美文网首页JavaJava成长之路互联网科技
JVM知识点——其他知识梳理

JVM知识点——其他知识梳理

作者: Java_老男孩 | 来源:发表于2019-05-30 17:02 被阅读5次

    其他知识梳理

    详解分代回收

    前面提到过,java的堆内存被分代管理,分代管理主要是为了方便垃圾回收,这样做基于2个事实,第一、大部分对象很快就不再使用,第二,还有一部分不会立即无用,但也不会持续很长时间。

    虚拟机中划分为年轻代、老年代、和永久代。

    1>年轻代:主要用来存放新创建的对象,年轻代分为eden区和两个Survivor区。大部分对象在Eden区中生成。当Eden区满时,还存活的对象会在两个Survivor区交替保存,达到一定次数的对象会晋升到老年代。

    2>老年代:用来存放从年轻代晋升而来的,存活时间较长的对象。

    3>永久代:主要保存类信息等内容,这里的永久代是指对象划分方式,不是专指1.7的permGen,或者1.8之后的metaspace。

    根据年轻代与老年代的特点,jvm提供了不同的垃圾回收算法。垃圾回收算法按类型可以分为引用计数法、复制法和标记清除法。

    其中引用计数法是通过对象被引用的次数来确定对象是否被使用,缺点是无法解决循环引用的问题。

    复制算法需要from和to两块相同大小的内存空间,对象分配时只在from块中进行,回收时把存活对象复制到to块中,并清空from块,然后交换两块的分工,即把from块作为to块,把to块作为from块。缺点是内存使用率较低。

    标记清除算法分为标记对象和清除不在使用的对象两个阶段,标记清除算法的缺点是会产生内存碎片。

    jvm中提供的年轻代回收算法Serial、ParNew、Parallel Scavenge都是复制算法,而CMS、G1、zgc都属于标记清除算法。

    相关文章

      网友评论

        本文标题:JVM知识点——其他知识梳理

        本文链接:https://www.haomeiwen.com/subject/rmsvtctx.html