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

一、
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;//.......................1
new Student();//...........................2
s = new Student();//....................3

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值