通过一张图来了解如何通过JVM参数来控制各区域的内存大小
控制参数
-Xms设置堆的最小空间大小。
-Xmx设置堆的最大空间大小。
-XX:NewSize设置新生代最小空间大小。
-XX:MaxNewSize设置新生代最大空间大小。
-XX:PermSize设置永久代最小空间大小。
-XX:MaxPermSize设置永久代最大空间大小。
-Xss设置每个线程的堆栈大小。
没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。
老年代空间大小=堆空间大小-年轻代大空间大小
VM内存区域总体分两类,heap区 和 非heap 区 。
heap区: 堆区分为Young Gen(新生代),Tenured Gen(老年代-养老区)。其中新生代又分为Eden Space(伊甸园)、Survivor Space(幸存者区)。
非heap区: Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。
为什么要区分新生代和老生代?
堆中区分的新生代和老年代是为了垃圾回收,新生代中的对象存活期一般不长,
而老年代中的对象存活期较长,所以当垃圾回收器回收内存时,新生代中垃圾回收效果较好,
会回收大量的内存,而老年代中回收效果较差,内存回收不会太多。
不同代采用的算法区别?
基于以上特性,新生代中一般采用复制算法,因为存活下来的对象是少数,
所需要复制的对象少,而老年代对象存活多,不适合采用复制算法,
一般是标记整理和标记清除算法。
因为复制算法需要留出一块单独的内存空间来以备垃圾回收时复制对象使用,
所以将新生代分为eden区和两个survivor区,每次使用eden和一个survivor区,
另一个survivor作为备用的对象复制内存区。
以上就是关于“JVM参数设置的方法”介绍,大家如果想了解更多相关知识,不妨来关注一下极悦的Java虚拟机视频,里面的课程由浅到深,适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习