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程序随时都可以访问引用的变量的集合——也就是存在堆栈或是静态存储空间上的引用变量。从这些根集变量出发可直接或是间接到达的对象,垃圾收集器会认为这些对象是生命尚存的对象;相对的从这些根集变量出发通过任意途径都无法到达的对象,就是死亡的,它们就会成为下一次垃圾收集的对象。

  • 相关阅读:
    二叉排序树的最低公共祖先
    [jobdu]树中两个结点的最低公共祖先
    [jobdu]用两个栈实现队列
    [leetcode]Balanced Binary Tree
    [jobdu]从尾到头打印链表
    [leetcode]Flatten Binary Tree to Linked List
    [leetcode]Unique Binary Search Trees
    hdu 4059
    hdu 3972 1 M possible
    CF 317D Game with Powers
  • 原文地址:https://www.cnblogs.com/chuanqi1995/p/11607370.html
Copyright © 2011-2022 走看看