JVM学习笔记20-内存结构和内存回收
1.内存结构
如下图所示
- 堆上分配
大多数情况在Eden上分配,偶尔直接在Old上分配
其细节取决于GC的实现 - 栈上分配
原子类型的局部变量
2 内存回收
2.1 引用类型
GC要做的是将那些消亡对象所占用的内存回收掉
- Hotspot认为没有引用的对象是消亡的
- Hotspot将引用分为四种
- Strong—强引用
即默认通过Object obj = new Object
这种方式赋值的引用 - Sotf—软引用
- Weak—弱引用
- Phantom—虚引用
- Strong—强引用
Sotf,Weak,Phantom这个三种都是继承Reference
2.1 内存回收
在Full GC
会对Reference类型的引用进行特殊处理
- Soft—内存不够是一定会被GC,长期不用一定会被GC
- Weak—一定会被GC,当标记为消亡时,会在ReferenceQueue中通知
- Phantom—本来就没引用,当前JVM 堆中释放时会通知