Java虚拟机-内存分配与回收策略
对象的内存分配,主要是在堆上分配(也可能是JIT编译后被拆散成标量类型并间接的栈上分配):
- 对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先分配在TLAB上。
- 少数情况下会直接分配在老年代中。
分配的规则并不是百分百固定的,细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数设置。
对象的回收主要分为两种:
- 新生代GC(Minor GC)指发生在新生代的垃圾回收动作,Minor GC十分频繁,回收速度较快。
- 老年代GC(Major/Full GC)指发生在老年代的GC,出现了Major GC,经常会伴随至少一次Minor GC ,但非绝对,Parallel Scavenger 收集器里有直接进行Major GC的策略选择。通常,Major GC 比Minor GC 慢10倍以上。

