JVM学习笔记20-内存结构和内存回收

1.内存结构

如下图所示
JVM学习笔记20-内存结构和内存回收

  1. 堆上分配
    大多数情况在Eden上分配,偶尔直接在Old上分配
    其细节取决于GC的实现
  2. 栈上分配
    原子类型的局部变量

2 内存回收

2.1 引用类型

GC要做的是将那些消亡对象所占用的内存回收掉

  • Hotspot认为没有引用的对象是消亡的
  • Hotspot将引用分为四种
    • Strong—强引用
      即默认通过Object obj = new Object这种方式赋值的引用
    • Sotf—软引用
    • Weak—弱引用
    • Phantom—虚引用

Sotf,Weak,Phantom这个三种都是继承Reference

2.1 内存回收

Full GC会对Reference类型的引用进行特殊处理

  • Soft—内存不够是一定会被GC,长期不用一定会被GC
  • Weak—一定会被GC,当标记为消亡时,会在ReferenceQueue中通知
  • Phantom—本来就没引用,当前JVM 堆中释放时会通知