内存分配

来源:互联网 发布:shell脚本内执行python 编辑:程序博客网 时间:2024/05/16 17:42

java程序在运行过程中涉及到的数据会保存在什么地方?其中数据包括句柄、基本数据类型、new出来的对象、常量、静态变量等等。
1.寄存器
寄存器位于处理器中,直接从处理器中读写,属于最快的存储区域,寄存器根据需要由编译器进行选择,无法在java程序中对其进行选择。所以,可以暂时忽略这一块。
2.栈
栈是存取速度仅次于寄存器的一块存储区域,位于RAM中,栈读写速度快,当存储空间有限,同时栈需要明确知道保存在栈内的数据的长度以及生存时间,了解生存时间,以便及时释放栈内存,若是栈内存不能及时释放,大量数据到来时会导致内存溢出,所以用于存储需要经常使用到的数据,比如对象句柄。
3.堆
堆同样是位于RAM中,其存取速度慢于栈,但其空间相对栈而言大,不必关心存储数据的生存时间以及其长度,堆用于存储new出来的对象,对于new出来的对象通过垃圾回收机制进行回收。
4.静态存储
对于由static创建的静态变量,静态方法,位于ram中特定位置,随时恭候调用
5.常数存储
常数值通常直接置于程序代码内部,更加安全
6.非RAM存储
数据独立于程序之外,比如图片、文本等文件,将其存储于其他媒体上,在程序需要时,转换成RAM对象进行操作。
特殊情况:
在java中,所有一切都是对象,但有一些类需要特殊对待,它们属于在程序中经常使用到的类,称其为基本类型,基本类型有9种,如下:
boolean、char、byte、short、int、long、float、double、void
因为在java程序中需要经常使用基本类型,为加快程序运行效率,读取方便,基本类型构建的句柄以及值都位于栈中。基本类型可以封装成类。