码迷,mamicode.com
首页 > 编程语言 > 详细

java的存储空间分配

时间:2014-11-28 15:59:09      阅读:197      评论:0      收藏:0      [点我收藏+]

标签: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的数据类型如下:

bubuko.com,布布扣

  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的存储空间分配

标签:style   blog   http   ar   color   使用   sp   java   on   

原文地址:http://www.cnblogs.com/jianmo-o/p/4126670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!