1.寄存器
寄存器是存储速度最快的区域,位于存储器内部,寄存位于处理器内部,寄存器又编译器进行分配不能用java代码控制。
2.栈
栈的存储速度仅次于寄存器,存放基础数据类型和引用数据类型的引用。但存储数据不够灵活,因为栈的数据有生存周期,方法消亡后,数据也跟着消亡。方法中局部变量存储在栈中,栈中的数据也不能被多线程共享。
3.堆
堆的存储速度没有栈快,存储的数据类型是new出来的对象,用于存放所有对象。但数据的存储灵活性高,因为编译器不需要知道分配多少空间,也不需要知道生存周期,所以相对灵活。成员变量存储在堆中。
4.常量池
常量池用于存放字符串常量和基本数据类型常量。被public static final 所共同修饰的变量也是常量,String修饰的也是常量。
5.静态域
静态域在方法区中,包含整个程序中永远唯一的元素,被static修饰的变量。
6.非ram存储
非ram存储,不依赖程序也可以存活。如硬盘。
二.局域变量和成员变量进行比较所需要的存储空间代码
public class Stackheap { int a = 520; public static void main(String[] args) { Stackheap h = new Stackheap(); h.f(); } public void f() { int b=520; System.out.println(a==b); } }
所以要的区域
a和b比较的是常量值中的哈希码值,哈希码值为16进制,哈希码值一样则输出true。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)