1. 寄存器

这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。

2. 栈(stack)

位于通用RAM中, 存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)

3. 堆(heap)

存放所有new出来的对象

4. 静态存储(static storage)

存放静态成员(static定义的)

5. 常数存储(constant storage)

存放字符串常量和基本类型常量(public static final)

6. 非 RAM 存储。

如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。

测试

public static void main(String[] args) {
        // 创建了1个string对象。"apple"存储在字符串常量池中 , str1 和str2存储于栈中
         String str1 = "apple" ; 
         String str2 = "apple" ; 
         System.out.println(str1==str2);//true
         // 创建了2个string对象,对象存储在堆内存中, 引用存于栈中 
         String str3 = new String("orange" ); 
         String str4 = new String("orange" ); 
         System.out.println(str3==str4);//false . 
         
         //创建了2个对象。两个1对象存储在堆内存中 
         Integer l1 = new Integer(1); 
         Integer k1 = new Integer(1); 
         System.out.println(l1==k1);//false . 
         
         // 以下两条语句创建了2个对象。i1,i2变量存储在栈内存中,两个256对象存储在堆内存中 
         Integer i1 = 256; 
         Integer i2 = 256; 
         System.out.println(i1==i2);//false 
         
    }

lpy1990
26 声望10 粉丝