JVM虚拟机
jvm内存管理主要是对堆的处理
http://zqhxuyuan.github.io/2016/07/26/JVM/
程序计数器:
虚拟机stack:
本地方法stack:
方法区:
堆:
堆内存的管理主要使用分代管理:分为新生代,老年代
新生代(young generation): eden / survivor1,survivor2
老年代:old
非堆内存:permanent管理,持久态
主要的回收算法及其虚拟机
算法:
根搜索算法:查找不可达的对象,比引用计数法好(循环引用的时候无法处理)
回收算法:标记清理(有内存碎片),复制算法(适合新生代,回收的对象多,存活对象少),标记整理(适合老年代,存活对象多)
1.标记清除算法,该算法是从根集合扫描整个空间,标记存活的对象,然后在扫描整个空间对没有被标记的对象进行回收,这种算法在存活对象较多时比较高效,但会产生内存碎片。
2.复制算法,该算法是从根集合扫描,并将存活的对象复制到新的空间,这种算法在存活对象少时比较高效。(适合新生代每次生存的对象很少)
3.标记整理算法,标记整理算法和标记清除算法一样都会扫描并标记存活对象,在回收未标记对象的同时会整理被标记的对象,解决了内存碎片的问题,(适合老年代:没有过多内存)。
JVM调优:
-XX:+PrintGCDetails -XX:+PrintHeapAtGC -Xmx32m -Xms32m -XX:NewRatio=1 -XX:SurvivorRatio=6 -XX:PermSize=20m
eden:12
survivor1:2
survivor2:2
old:16
perm:20
当eden使用量到70%,会触发young gc,如果to空间不够放,会放到old(年老代)中。
浙公网安备 33010602011771号