java的对象、对象句柄、变量等在内存的分布
来源:互联网 发布:java文件管理器源代码 编辑:程序博客网 时间:2024/05/14 17:54
摘自TIJ第二章
程序运行时,我们最好对数据存储到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以存储数据:
(1) 寄存器(Registers)。这是速度最快的存储场所,因为寄存器其他所有存储媒介都不同:它位于处理器内部。不过,寄存器的数量十分有限,所以寄存器是根据需要由编译器适当地分配。作为一个程序员,我们对此没有直接的控制权,也没办法在程序里头感觉到寄存器的任何存在迹象。
(2) Stack(栈)。位于一般的RAM(random-access memory,随机访问内存)中。处理器通过其指针(“栈指针”,stack pointer)获得处理的直接支持。栈指针若向下(后)移,会分配新的内存;若向上(前)移,则会释放那些内存。这是一种特别快、特别有效率的数据存储方式,速度仅次于寄存器。由于Java编译器有责任产生“将stack指针前后移动”的程序代码,所以它必须能够完全掌握它所编译的程序中“存在stack里头的所有数据的实际大小和存活时间”。如此一来便会限制程序的弹性。由于这个限制,尽管有些Java数据要存储在栈里——特别是对象句柄,但Java对象并不放到其中。
(3) Heap(堆)。Heap是一种通用性质的内存存储空间(也存在于RAM中),用来置放所有Java对象。“内存堆”或“堆”(Heap)胜过stack之处在于,编译器不需知道究竟得从堆里分配多少存储空间,也不需知道从堆上分配的空间究竟要存活多长的时间。因此,用堆存储数据时会得到更大的灵活性。要求创建一个对象时,只需用new即可。执行这些代码时,会在堆里分配空间。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会比从栈里分配花掉更长的时间(假设你真的可以在Java中像C++一样地从stack上产生对象的话)!
(4) 静态存储空间(Static storage)。这儿的“静态”(Static)是指“位于固定位置”(也在RAM里头)。静态存储空间存放着“程序运行期间”一直存在的数据。可用static关键字将某个对象内的特定成员设为静态,但Java对象本身永远都不会置入静态存储空间。
(5) 常量存储空间(Constant storage)。常量值通常被直接置于程序代码里头。因为它们永远都不会改变,所以也是安全的。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(read-only memory,ROM)中。
(6) 非RAM存储空间(Non-RAM storage)。若数据完全存活于程序之外,则程序不运行时数据仍继续存在,脱离了程序的控制范围。其中两个最主要的例子便是“串流化对象(streamed objects)”和“持久性对象(persistent objects)”。在串流化对象形式中,对象会被转换为一连串的字节(bytes)流,这些bytes通常会被传送给另一台机器。而在持久性对象形式中,对象被存储于磁盘,即使程序运行结束,这些对象还能够继续保有。这种类型的存储空间的特点在于,它们能够将对象转换为可存储于其他媒介的形式,并在需要时,将所存储的数据还原成可存储于RAM中的一般对象。Java提供了对“轻量级持久性(Lightweight persistence)”的支持。新版本有可能提供更完善的解决方案。
- java的对象、对象句柄、变量等在内存的分布
- java的对象、对象句柄、变量等在内存的分布
- java的对象、对象句柄、变量等在内存的分布
- 多维对象的元素矩阵在内存中的分布、opencv
- c++:变量在内存上的分布
- java-对象的理解-对象在内存的存储
- JAVA 程序在内存上的分布
- C++对象在内存中的分布
- Java中变量,对象,字符串等在内存中的存储区域
- 程序在内存的分布
- C语言 变量在内存的地址分布
- java 对象创建时,在内存中加载的过程
- 运行时java对象在内存中是什么样子的?
- java对象在内存中存储的布局
- Java对象在内存图示
- 小example说明java的值传递和引用传递,基础变量和对象在内存里的区别,堆栈
- 基本类型和引用类型的变量在内存存放的内容及对象
- 关于Java对象在内存中的状态和对象的引用的类型
- Python入门的36个例子 之 35 -> try – 一个使用的例子
- Python入门的36个例子 之 36 -> finally
- flex优化全集
- 一天一点爱恋!(看着感觉适合你,就留言;我写的不好的话,也请指正)
- 网络操作命令:netstat
- java的对象、对象句柄、变量等在内存的分布
- VC: [转]CListCtrl使用详解
- 关于Citrix
- 怎样从一名程序员过度到项目经理
- 开车要当心
- 谈谈红楼梦(第44回)
- 指针+1的问题
- 基于Web服务的电能质量监测系统的研究
- java中用句柄与封装基础类的方法实现C++中指针的部分效果