版权声明: https://blog.csdn.net/qq_16525279/article/details/82012191
Java技术体系中的自动内存管理解决了两个问题:给对象分配内存以及回收分配给对象的内存。
关于回收内存,之前的文章提到了对象已死吗(对象存活判定算法、回收方法区)和垃圾收集算法。
对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配。少数情况有可能会直接分配在老年代中,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。
内存分配规则
对象优先在Eden分配
大对象直接进入老年代
长期存活的对象将进入老年代
动态对象年龄判定
空间分配担保
参考自:《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》周志明