标签:style blog http ar color 使用 sp java on
计算机中可用的存储空间有寄存器,RAM和硬盘之类的外部存储器。寄存器位于CPU内部,是有限储存容量的高速存储器,用来暂存指令,中间数据和地址。RAM(random access memory)是与CPU直接交换数据的内部存储器,操作系统或其他正在运行中程序临时存取数据的地儿,速度也很快。硬盘是外部存储器,那些暂时不用而需要长期保存的数据就存储在这儿。
JAVA程序是通过JVM(Java Virtual Machine)与系统进行交互运算执行的,并不关心系统底层对内存的管理。JVM在执行JAVA程序时会为每个程序创建独立的进程,分配一块内存空间。每个程序就像一台完整的计算机,相互之间通过通信协作完成任务。JVM分配的存储空间如下:
1,寄存器,根据需要由编译器分配。
2,栈,存在于RAM中,采用一种先进后出的数据存储模式,速度仅次于寄存器。编译器会把java的句柄和基本数据类型放置在栈中。
3,堆,也存在于RAM中,是一种先进先出的方式,速度略慢。编译器会把对象放置在堆内存中。
4,静态存储,位于RAM中,Static即位于一个固定位置。在程序运行期间,位于静态存储空间的数据随时等待被调用。可以用Static指出一个对象的特定元素是静态的,但对象本身并不位于静态存储空间内。
5,常数存储,位于RAM中的ROM。常数数据通常位于代码内部,这样已经足够安全,但有时候有些常数需要严格保护起来,就可以把它们置于常数存储区中。
6,方法区,加载的类存放于此。
7,非RAM,即硬盘等一系列外部存储器。
Java的数据类型如下:
Java中的一切都是对象,数据也不例外,它们在内存中应该包括三个部分:名字,地址和值。JVM把名字和地址都放置在堆内存中,基本类型不需要通过new关键字来创建,JVM把它们的值也放在栈内存中。当创建新的基本类型时,JVM会先搜索栈是否已经存在这个值,如果存在就把地址赋给要创建的类型。如果没有,则开辟新的空间进行创建。使用new关键字创建类型时,JVM会把创建的对象放置在堆内存中,把名字和对象的地址值关联后放置在栈内存当中。每次使用new关键字都会在堆中开辟新空间。
String类型比较特别,可以通过两种方式创建。
//String类型的内存分配测试。 class MyString { public static void main(String[] args) { String a="abc"; String b="abc"; System.out.println("a==b? "+(a==b)); //true String a1=new String("abc"); String b1=new String("abc"); System.out.println("a1==b1? "+(a1==b1)); //false } }
测试结果正如我们所料。
标签:style blog http ar color 使用 sp java on
原文地址:http://www.cnblogs.com/jianmo-o/p/4126670.html