Java 虚拟机之内存分配垃圾收集

2019-10-08  本文已影响0人  baoyinlei
运行数据区
GC Roots
  1. 虚拟机栈中引用的变量(本地变量)
  2. 方法区中类的静态属性(类的静态属性)
  3. 方法区中常量引用的对象(常量)
  4. 本地方法栈中引用的变量 (本地方法)
垃圾收集算法
  1. 标记-清除算法
    • 缺点: 标记-清除效率都不高,且内存空间容易产生碎片化,分配较大内存对象时,不得不进行垃圾收集动作
  2. 复制算法
    • 优点: 不会出现碎片化等情况,实现简单,运行搞笑
    • 缺点: 需要2倍内存,如果存活的对象较多时, 效率变低
    • 应用: 商业虚拟机用复制算法来回收新生代的内存,因为新生代的对象存活率低,因此不需要1:1分配内存,Hotspot 虚拟机分配比例为eden:survivor:survivor=8:1:1
  3. 标记-整理算法
    • 标记过程和“标记-清除”一样,但不是直接对可回收对象进行清除,而是对存活的对象向一端移动,然后清理掉其他的内存
  4. 分代收集算法
    • 描述: 根据对象存活的周期,将java堆分成新生代和老年代,根据年代的特定,采用适当的收集方法。
    • 新生代: 每次垃圾收集时,有大量的对象死去,只有少量的存活,所以采用复制算法,调节适当的比例。
    • 老年代: 对象比较稳定,存活率较高,没有多余的空间,所以比较适合用”标记-整理”或“标记-清除“算法。
Minor GC和Full GC区别
堆内存分为几块

堆内存分为新生代和老年代 永久代(hotspot中在方法区,元空间?)

内存分配策略
垃圾收集器
上一篇 下一篇

猜你喜欢

热点阅读