Java中对象到底存在堆中还是栈中

创建一个对象的时候,到底是在栈中分配还是在堆中分配需要看2个方面:对象类型和在Java中存在的位置

1.如果是基本数据类型,byte、short、int、long、float、double、char,如果是在方法中声明,则存储在栈中,其它情况都是在堆中(比方说类的成员变量就在堆中);
2.除了基本数据类型之外的对象,JVM会在堆中创建对象,对象的引用存于虚拟机栈中的局部变量表中
3.并不是所有的对象都在堆中存储,可以走栈上分配,在不在栈上分配取决于Hotspot的一个优化技术:“逃逸分析”
一般JVM 执行某个方法的频次比较高的时候 才会触发逃逸分析,如果不满足方法逃逸就会在栈上分配

你可能感兴趣的:(虚拟机,java,Android,java,jvm)