首页 > 代码库 > java的存储空间分配

java的存储空间分配

  计算机中可用的存储空间有寄存器,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       }}

  测试结果正如我们所料。

java的存储空间分配