Java的内存分配--初步学习

来源:互联网 发布:收银员练习软件 编辑:程序博客网 时间:2024/05/29 07:24

一、
Java有六个数据存放的地方,分别是:CPU寄存器、栈、堆、静态存储、常量存储、非RAM存储,其中,主要是栈和堆的存储。(RAM:随机存储器 Random Access Memory)
二、
1、Java中的栈和堆与C++的还有不同,C++中的栈和堆可以直接设置,而Java中是自动设置的。
1.1
栈:
栈的优势是存取速度要比堆快,仅次于CPU中的寄存器。另外栈数据可以共享。但缺点是栈中的数据,大小和生存期必须是确定的,缺乏灵活性。
1.2
堆:
堆的优点在于可以动态的分配存储空间。生存期也可以不必告诉编辑器。Java的垃圾回收机制不会回收这里的数据,但缺点也比较明显,就是读取速度比较慢。

2、Java中数据的存储方式

2.1基本数据类型的存储

Java 的基本数据类型定义时为

 int a=1; long b = 2L;

类似这样。这种类型称为自动变量。
自动变量存的是字面值,不是类的实例,即不是类的引用。而且在声明时,大小、生存期(就在该类的范围内)是确定的,所以是分配为栈内存。另外栈的一个特点是:栈中的数据可以共享。

 int a = 3; int b = 3;

这时,编译器先处理a = 3;首先是在栈中建立一个变量为a的引用,然后在查找有没有字面值为3的地址,没找到的话,就开启一个字面值为3的地址,然后将a指向3。接着处理b = 3;在创建完b这个变量后,首先还是查找有没有字面值为3 的地址,有的话,就不再重复创建了,直接将b指向3。这样就出现了两个变量同时指向一个值,这就是数据的共享,同时也节约了空间。定义完a与b的值之后,再令a = 4;这时编译器内部会找有没有4这个字面值的地址,没有的话,就直接再创建一个,所以,不会影响b的值。

2.2引用变量的数据存储

关于引用变量,有常见的几种:类声明对象、String、数组等等。他们有创建时的有个共同点,就是都要用到关键字 new .
引用变量声明范例如下:

Student s = null;//.......................1new Student();//...........................2s = new Student();//....................3

上面1式中,类的对象创建一个栈空间存放s,值为 空 。
而2式中利用new这个关键字,开辟 了一个堆空间,括号中没有实参的话,开辟的空间值为默认值(null 或 0)。
3式为,将s指向堆中的变量,从而实现值的连线。

原创粉丝点击