zoukankan      html  css  js  c++  java
  • 堆内存内部结构

    Jvm 堆内存内部结构

    所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx-Xms来控制。堆被划分为新生代和老年代,新生代又被进一步划分为Eden(伊甸园)和Survivor幸存者)区,老年代,在后面不是堆区是永恒代(方法区),为了进一步了解堆内存里的结构,我们先看看后面要讲的一种垃圾回收算法,分代算法,回收垃圾的过程,通过这个过程的分析,进一步了解堆区里的结构细节,结构图如下所示:

    当幸存对象的年龄到达某个值后,就会从年轻代进入老年代。

    最后的永恒代,放常用库文件和方法。

    Edensurvivor的比例为81年轻代中的对象基本都是朝生夕死的(80%以上),老年代比年轻代内存大。如果老年代内存满了,就会触发major GC或者full GC。触发full GC就会出现所谓的STWstop the world)现象。即所有的进程都挂起等待清理垃圾。

    major GC是回收老年代的垃圾。Full GC是回收老年代和年轻代的垃圾。

    JVM的垃圾回收器判定是否是垃圾数据的一般方法:

    许多Java的垃圾收集器都使用了引用的根集GC Roots,作为分析对象存活与否的依据。引用的根集是正在执行的Java程序随时都可以访问引用的变量的集合——也就是存在堆栈或是静态存储空间上的引用变量。从这些根集变量出发可直接或是间接到达的对象,垃圾收集器会认为这些对象是生命尚存的对象;相对的从这些根集变量出发通过任意途径都无法到达的对象,就是死亡的,它们就会成为下一次垃圾收集的对象。

  • 相关阅读:
    手搓一个兔子问题(分享一个C语言问题,持续更新...)
    一个C语言萌新的学习之旅(持续更新中...)
    ...续上文(一个小萌新的C语言之旅)
    手搓一个C语言简单计算器。
    嘿,C语言(持续更新中...)
    一个博客萌新的博客之旅。。。。
    vue+uikit3+laravel快速建站
    mpvue开发博客园小程序
    C语言俄罗斯方块小游戏练习
    c语言贪吃蛇小游戏练习
  • 原文地址:https://www.cnblogs.com/chuanqi1995/p/11607370.html
Copyright © 2011-2022 走看看