java对象都是分配在堆内存吗

随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。

在编译期间,JIT会对代码做很多优化。其中有一部分优化的目的就是减少内存堆分配压力,其中一种重要的技术叫做逃逸分析。

如果JIT经过逃逸分析,发现有些对象没有逃逸出方法,那么有可能堆内存分配会被优化成栈内存分配。

这里借鉴一下大佬的图片:

java对象都是分配在堆内存吗

对于逃逸分析可以看看下面两篇文章:

深入理解Java中的逃逸分析    对象并不一定都是在堆上分配内存的