当前位置:首页 » 存储配置 » 对象存储布局

对象存储布局

发布时间: 2022-05-11 17:58:12

A. 类和对象的内存分配关系如何

一个类的每个对象的数据成员有自己的内存
一个类的所有对象合用成员函数的内存
具体的细节,你可以去看一本书《深度探索c++对象模型》,网上也有电子版

B. 对象和内存溢出怎么处理

1. 对象。
A.创建。首先检查指令的参数能不能在常量区找到类的符号引用,并检查这个类是否加载、解析和初始化过,如果没有就执行类的加载过程。其次是内存分配,类加载之后就知道要分配的内存大小,分配方法有两种,一种是指针碰撞,就是一块内存是使用过的,一块是未使用的,用一个指针分割,新分配的内存指针就向空闲的挪动,compact功能的虚拟机是用指针碰撞;另一种是空闲列表,就是一个列表记录空闲的内存块,不断更新列表,新分配的内存在列表中寻找一个合适大小的内存块,sweep功能的虚拟机是使用空闲列表。第三,在分配内存空间的时候,还要考虑并发性。有两个方法,一种是同步处理,如采用CAS和失败重试的方法;另外一种是把内存分配动作按照线程划分在不同的空间之中,每个线程在堆中预先分配一小块内存,本地线程分配缓冲TLAB,那个线程需要分配内存在那个TLAB上分配,只有TLAB用完了,才要同步锁定,重新分配。第四、对对象进行必要设置,比方说对象属于那个类,如何找到类的元数据信息和对象hashcode以及对象GC分代年龄等。
B.对象的内存布局。分为对象头、实例数据和对齐填充。对象头包括两部分,第一部分是存储对象自身信息,如hashcode,GC分代年龄,锁状态等;第二部分是类型指针,对象指向它的类的元数据的指针,虚拟机通过这个指针确定这是那个类的实例。
C.对象访问定位。两种方式,一种是句柄访问,句柄池有访问对象实例数据的指针和访问对象数据类型的指针。这个访问最大好处是reference是稳定的句柄池地址,对象改变都是改变句柄池里面的指针,而reference本身不动。另外一种就是直接指针,它有到对象类型数据的指针和实例数据。这个访问的好处是速度更快,节省了一次指针定位的开销。
2. 内存溢出OOM。
A.堆溢出。堆存放的是对象实例,只要不断创建对象,并且保证GC Root到对象有可大路径避免被垃圾回收清除掉对象,那么对象数量达到最大堆容量限制就会OOM。用内存映象分析工具,Eclipse Memory Analyzer分析一下。
B.虚拟机栈和本地方法栈溢出。分为两种,一种是如果线程请求的栈深度大于虚拟机所允许的最大深度,抛出StackOverFlowError异常;另一种是如果虚拟机在扩展栈时无法申请到足够内存空间,抛出OutOfMemoryError异常。可以减小最大堆和栈容量来获取更多的线程数量。
C.方法区和常量池溢出。会有额外提示 PermGen space。
D.本机直接内存溢出。这个Heap Dump文件看不到内存占用,但是如果有直接或简介使用了NIO,那有可能就是本机直接内存溢出了。

C. 翻译一段计算机关于对象存储英文

对象存储是基于数据对象,对包括数据属性和元数据在内的用户数据进行封装的储存。使对象存储数据,属性和元数据相结合,确定数据布局或每一个对象的基础上的服务质量,提高灵活性和可管理性。

D. 面向对象在运行时内存空间是如何组织的

子程序 的局部数据 放在当前 运行栈的栈顶 用变址寄存器 编制寻址 把全局数据放在静态区

以上说法在C++中依然正确。类里的变量,函数放到一起,就像一个模块一样。具体对象的内存布局,可以看 侯捷 翻译的《深入C++对象模型》,这里有详细介绍。
其他面向对象语言的实现就不清楚了。

E. 对象所占用的内存,是否包括这个类里面所有方法的代码

1)类里面的方法,仅仅占用类本身的代码区内存,不会存在于对象内存之中
2)那么A和B各new出100个对象出来,所消耗的内存是一样多吗
与JVM实现相关。以SUN的JVM来说,一个对象的内存布局是:第一部分:是一个指针,指向该对象所拥有的方法的列表。第二部分:一个指针,指向一个代表该对象类型的一个Class对象,第三部分:该对象的数据成员空间。

F. 请问C++中怎么计算对象占用的内存啊

一个基本概念:类只是一个数据结构的定义,类的成员变量根本就不占用内存空间(static成员例外,static成员放在静态数据段中)
如果对象本身是堆栈(ss)里的,那么它的(非静态)数据成员也在堆栈里
如果对象本身是堆里的,那么它的(非静态)数据成员也在堆里
如果对象本身是ds里的,那么它的数据成员也在ds里
如果仅考虑数据成员,c++的对象与c的结构类型变量没什么区别
所谓public/private/protected规定的是成员的“存取”权限
而ss/ds/heap是“存储”方式,与前者没有任何关系

G. linux下有没有可以查看类对象的内存布局的

这个要用调试器来查看吧,调试器能够查看当前调试程序的内存空间,在调试器中定位到一个内存地址,再结合实际代码就可以查看内存布局,当然,类对象的内存空间也一目了然,查看函数的调用栈都是可以的。

H. 如何使用VS2008命令行选项查看对象的内存布局

这些都是标准命令行命令了
cd
命令是改变当前路径,但是它不会改变当前盘符,改变盘符要输入
[盘符]:
命令。
如下:
setting
environment
for
using
microsoft
visual
studio
2010
x86
tools.
d:\program
files\microsoft
visual
studio
10.0\vc>cd
c:\windows\system32
d:\program
files\microsoft
visual
studio
10.0\vc>c:
c:\windows\system32>

I. java面向对象中如何分析内存布局,求高手解答

java语言不能操作内存的。。

热点内容
安卓动态库反编译 发布:2024-11-16 15:23:04 浏览:373
什么是奥维服务器lp地址 发布:2024-11-16 15:20:13 浏览:9
c数字图像处理源码 发布:2024-11-16 15:13:28 浏览:401
为什么苹果处理器一直比安卓好 发布:2024-11-16 15:13:22 浏览:152
折标算法 发布:2024-11-16 15:07:10 浏览:474
如何做好编译类节目 发布:2024-11-16 14:56:51 浏览:976
正版激活服务器搭建 发布:2024-11-16 14:47:04 浏览:777
安卓导航cd怎么用 发布:2024-11-16 14:37:06 浏览:801
mysql同步两个数据库 发布:2024-11-16 14:20:55 浏览:759
北京php培训 发布:2024-11-16 14:20:39 浏览:495