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(年老代)中。 

posted on 2017-09-15 11:08  小付瓜  阅读(63)  评论(0)    收藏  举报