
JVM
JVM基础知识以及常见问题
adrian_h
想要变得优秀
展开
-
内存泄露和内存溢出
内存泄露和内存溢出最近排查项目组问题的时候,收到了一些页面卡顿和内存溢出的问题,写一篇文章复习下内存泄露和内存溢出的知识。内存泄露:程序使用一块内存,但是并没有释放它,通过堆积最终导致内存溢出。通常是存在一些无法被GC回收的对象,这些对象没有作用,却会一致占用内存。内存泄露是代码层面的问题,可以通过修改我们的程序来避免。内存溢出:即程序在申请内存的时候,发现内存不够了。通常是因为JVM设置的内存过小、没有释放资源、一次性加载过多数据等等。解决办法可以分为两种:一是增大JVM内存,二是修改我们的程序,从原创 2020-12-14 17:25:25 · 203 阅读 · 0 评论 -
GC算法
GC算法:标记清除算法扫描对象,并标记出所有需要回收的对象。之后再次扫描,回收所有被标记的对象。优点:节省空间 缺点:扫描两次,浪费了时间,会产生内存碎片。标记压缩算法(标记整理算法)优化了标记清除算法,在标记后不是直接清除对象,而是将存活对象移向内存的一端。然后清除需要回收的对象。复制算法主要用在年轻代中(年轻代中对象存活度较低),每次GC后,都会将Eden区中还存活的对象移到幸存区的To中,幸存区From里面的对象,会判断它经历了几次GC,如果达到设定的值(默认15,可以使用-原创 2020-08-30 13:21:50 · 116 阅读 · 0 评论 -
JVM调优
堆内存调优参数-Xmx 设置最大分配内存大小,超出这个值会抛出OutOfMemory异常-Xms 设置初始分配内存大小,指程序启动占用的内存大小-Xmn 设置年轻代大小,推荐为整个堆内存的3/8-XX:+PrintGCDetails 输出GC处理日志-XX:+HeapDumpOnOutOfMemoryError 导出OOM的堆信息文件-XX:MaxTenuringThreshold=… 该参数主要是控制新生代需要经历多少次GC晋升到老年代中的最大阈值System.out.println原创 2020-08-30 13:20:38 · 108 阅读 · 0 评论 -
双亲委派机制
双亲委派机制类加载器:类加载器的作用是加载字节码文件。1.启动类加载器(根加载器) BootstrapClassLoader2.扩展类加载器 ExtClassLoader3.应用程序加载器 AppClassLoader4.用户自定义加载器 – 先忽略双亲委派机制:当类加载器加载字节码文件时,首先会检查应用程序加载器中是否加载过,如果加载过,就无需再加载,如果没有的话,把这个任务委托给他的上级类加载器,再次检查,如果一直到启动类加载器,都没有加载过,启动类加载器检查是否能够加载,能加载就会原创 2020-08-28 15:28:44 · 88 阅读 · 0 评论 -
JVM内存区域
内存区域JVM就是二进制字节码的运行环境,负责装载字节码到内部,解释/编译为对应平台上的机器指令执行。JVM运行在操作系统上,与计算机硬件没有直接交互。本地方法栈:被native关键字修饰的方法会进入本地方法栈,调用JNI(本地方法接口),JNI可以调用C/C++程序。程序计数器:每一个线程都有一个私有的程序计数器,指向方法区中的方法字节码,在执行引擎读取下一条指令。方法区:存储类信息、常量、静态变量、类中的方法信息以及编译器编译后的代码等数据。(static final 类信息 常量池)原创 2020-08-28 15:27:27 · 235 阅读 · 0 评论