Thinking in Java--对象存储位置

1、寄存器

这是最快的存储区,因为它位于处理器的内部。但是由于寄存器的大小数量都是有限的,所以寄存器是由编译器根据需求进行分配。你不能直接控制,也不能感觉到寄存器的存在。

2、堆栈

位于通用RAM(随机访问存储器)中,但是通过“堆栈指针”可以从处理器那里获得直接的支持。通过堆栈指针的上下移动来为程序分配需要的空间,它的速度仅仅次于寄存器的速度。创建程序的时候,Java编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,一边上下移动指针。这样的一种限制很大程度上限制了程序的灵活性。所以Java虽然某些数据存储在堆栈中(对象引用),但是实际的Java对象并不存储在堆栈中,而是存储在堆中。

3、堆

位于RAM,由于存储Java对象。堆不同于堆栈的好处在于:编译器不需要知道程序数据所需要的空间的大小和生命周期。所以可以直接new出对象,在执行的时候会自动的在堆里面自动分配内存。这样程序相对来说,就变得灵活了一些。但是问题来了,用堆进行内存分配比用堆栈进行存储分配需要更多的时间(这也是大家都说Java慢的原因之一吧)。

4、静态存储

位于RAM了,对应于Java中static关键字标识的某个对象的特定元素。静态是指:在固定的位置

5、常量存储

常量值通常直接存放在程序代码内部。

6、非RAM存储

如果数据存在于程序之外,它可以不受程序的任何控制,在程序没有运行的时候也可以存在,对应Java中的“流对象”和“持久化对象”。

时间: 2024-10-04 21:54:27

Thinking in Java--对象存储位置的相关文章

java之变量以及对象的存储位置区别

Java内存分配的时候一共涉及5个区域,分别是;寄存器.栈.堆.常量池.非RAM存储. 寄存器 寄存器是最快的存储区,位于处理器内部,由于寄存器的数量非常有限,所以寄存器都是按需分配,我们在程序中无法控制. 栈 栈位于通用RAM(随机访问存储器)中,栈由编译器自动分配和释放,栈存放的是基本数据类型(基本数据类型包括:int.short.double.long.float.boolean.char.byte:注意没有String)以及对象的引用.栈的优势是存取速度比堆快,仅次于CPU中的寄存器.另

java数据的5种存储位置(转)

任何语言所编写的程序,其中的各类型的数据都需要一个存储位置,java中书的存储位置分为以下5种: 1.寄存器 最快的存储区,位于处理器内部,但是数量及其有限.所以寄存器根据需求自动分配,无序人为控制. 2.栈内存 位于RAM中,通过堆栈指针可以从处理器中获得直接支持.堆栈指针向下移动,则分配新的内存:向上移动,则释放哪些内存.这种存储方式仅次于寄存器.(常用于存放对象引用和基本数据类型,而不用于存储对象) 3.堆 一种通用的内存池,也位于RAM中.其中存放的数据由JVM自动进行管理. 堆相对于栈

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式) 原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 - 转载请保留该原文链接) 07/19/12 03:08:05 PM 在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在需要的时候取出来.Redis的key和value都支持二进制安全的字符串,存储Java对象不是问题,下面我们看一下如何来实现. 1要存储的对象 现在写一个

利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能

利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一个接收动态添加div的容器 <div> 功能区域 <br /> <input id="1" type="checkbox" value="新闻" name="11" />新闻 <input id="2" type="checkbox"

对象存储在什么地方(java编程思想)

用引用操作对象.创建了一个引用,需要进行初始化(与事物进行关联),才能正常使用.new将引用于对象进行关联 对象存储到什么地方? 程序运行时,对象是怎么进行放置安排的呢?特别是内存是怎么分配的呢?对这些方面的了解会对你有很大的帮助. 有五个不同的地方可以存储数据: 1.寄存器.这是最快的存储区,因为它位于不同于其他存储区的地方----处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象 2.堆栈.位于通用RAM(随机访问存储器

java 对象序列化存储oracle

java 对象序列化存储oracle: import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputS

Java对象在内存中的存储

Java对象在内存中的存储分3块区域 1.对象头(Header) 2.实例数据(Instance Data) 3.对齐填充(Padding) 一.对象头 哈希码.GC分代年龄.锁状态标志.线程持有的锁.偏向线程ID.偏向时间戳 类型指针 二.实例数据 各种类型的字段(父类继承下来的.子类自身定义的) 相同宽度的字段会被分配到一起 三.对齐填充 没有特别含义,仅仅起着占位符的作用(8字节的整数倍)

Java程序运行时数据存储位置

寄存器: 这是最快的存储区, 但是寄存器的数量极其有限, 所以寄存器根据需求进行分配, 而且不能直接控制. 堆栈: 位于通用的RAM(随机访问存储器), Java系统必须知道存储在堆栈内所有项的确切生命周期, 以便上下移动堆栈指针. 这一约束限制了程序的灵活性,所以虽然某些Java数据存储于堆栈中, 特别是对象的引用, 但是Java对象并不存储于其中. 堆: 一种通用的内存池(也位于RAM区), 用于存放所有的Java对象. 堆不同于堆栈的好处是编译器不需要知道存储的数据在堆里存活多久. 常量存

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。 说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功

session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息. 说白了session就是一种可以维持服务器端的数据存储技术.session主要有以下的这些特点: 1. session保存的位置是在服务器端 2. session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能 3. 单纯的使用session来维持用户状态的话