一、基本数据类型的存储方式
1.1 作为成员变量时
如果没有被 static
修饰的话,就存放在堆中。
不建议如此使用,应当使用基本数据类型对应的包装类型
被static
修饰,就存放在方法区中。
什么是static?
Java中的static关键字用于修饰成员变量和成员方法,表示它们属于类而不是对象。在Java中,每个类都有一个对应的Class对象,当类被加载时,它的Class对象会被创建并保存在方法区(Method Area)中。static成员变量和方法都存放在方法区中的Class对象中,而不是存放在堆内存中的对象中。
1.2 作为局部变量时
存放在 Java 虚拟机栈(VM Stack)中的局部变量表中。
Tip:一个虚拟机栈帧包含局部变量表、方法返回地址、操作数栈、动态链接和一些附加信息
二、包装类型的存储方式
包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
为什么说是几乎所有对象实例都存在于堆中呢?
这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免在堆上分配内存。