JVM
包括字节码指令集,寄存器,栈(方法栈和本地方法栈),垃圾回收,堆,方法区,运行在操作系统上,与硬件无交互
这里给大家整理了一些面试题有需要完整版的朋友可以点一点领取:点这里即可领取下面资料!!!,获取码:CSDN
新建出来的对象一定会分配在堆上吗
还有可能分配在栈上或者是 和TLAB(Thread Local Allocation Buffer)。
棧:利用逃逸分析来确定是否要分配在堆上,逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他过程或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。沒有逃逸就分配在棧上
TLAB:JVM在内存新生代Eden Space中开辟了一小块线程私有的区域,称作T