• 技术文章 >java >java基础

    gc在java中原理分析

    小妮浅浅小妮浅浅2021-02-07 17:31:44原创3239

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    1.GC堆内存

    Java将堆内存分为3大部分:新生代、老年代和持久代,其中新生代又进一步划分为Eden、S0、S1(Survivor)三个区

    我们在程序中new出来的对象一般情况下都会在新生代里的Eden区里面分配空间,如果存活时间足够长将会进入Survivor区,进而如果存活时间再长,还会被提升分配到老年代里面。持久代里面存放的是Class类元数据、方法描述等。

    1Minor GC(年轻代GC):

    对象优先在Eden中分配,当Eden中没有足够空间时,虚拟机将发生一次Minor GC,因为Java大多数对象都是朝生夕灭,所以Minor GC非常频繁,而且速度也很快。

    2Full GC(老年代GC):

    Full GC是指发生在老年代的GC,当老年代没有足够的空间时即发生Full GC,发生Full GC一般都会有一次Minor GC。

    3)持久代(Permanent generation)也称之为 方法区(Method area):

    用于保存类常量以及字符串常量。注意,这个区域不是用于存储那些从老年代存活下来的对象,这个区域也可能发生GC。发生在这个区域的GC事件也被算为 Major GC 。

    2.GC执行条件

    eden区空间不够存放新对象的时候,执行Minro GC。升到老年代的对象大于老年代剩余空间的时候执行Full GC,或者小于的时候被HandlePromotionFailure 参数强制Full GC 。调优主要是减少 Full GC 的触发次数,可以通过 NewRatio 控制新生代转老年代的比例,通过MaxTenuringThreshold 设置对象进入老年代的年龄阀值

    3.GC算法原理

    HotSpot 虚拟机采用了可达性分析来进行内存回收,可达性分析的基本思路就是通过一系列可以做为root的对象作为起始点,从这些节点开始向下搜索。当一个对象到root节点没有任何引用链接时,则证明此对象是可以被回收的。以下对象会被认为是root对象:

    以上就是gc在java中原理分析,相信经过本篇的学习理解,已经对基础的名词概念有所掌握。对于一些GC算法还不会使用的,可以再学完本篇文章后,回顾之前所学的知识内容。

    专题推荐:java gc原理
    上一篇:java中gc是什么 下一篇:java中gc算法的实现

    相关文章推荐

    • java开发是什么• java环境是什么• java缓存是什么• java关键字是什么• java中gc是什么

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网