java 对象的创建和对象的内存布局
来源:互联网 发布:tor 网络 编辑:程序博客网 时间:2024/05/16 12:00
由看到一篇3年前的xieyuooo 博客,我去学习了的java中对象的内存布局 现做个笔记
(博客文:如何精确地测量java对象的大小-底层instrument API 地址:http://blog.csdn.net/xieyuooo/article/details/7068216)
java普通对象的创建(不包括数组和class对象)
1.确定类有没有被加载解析和初始化
2.如果没有那必须先执行相应的类加载过程。
3.类加载检查通过后,虚拟机将为新生对象分配内存。(对象所需的内存大小在类加载完成后可以完全确定)
4.虚拟机将分配到的内存空间都初始化为零值(不包括对象头)
5.对对象头进行设置
%%%%% java虚拟机的工作已经结束了 %%%%
6.按照程序员意愿进行程序初始化
对象的内存布局
对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding).
对象头分为两个部分:Mark Word(哈希吗、GC分代年龄等等)
类型指针(Sun HotSpot是属于通过直接指针访问)即对象指向它的类元数据的指针
(虚拟机通过类型指针来确定这个对象是哪个类的实例)
另外:如果对象是一个Java数组,对象头中还必须有一块用于记录数组长度的数据。
对齐填充的意思是:对象的大小必须是8字节的整数倍
突然想起了一个jdk自带的工具 javap可以反编译,可以查看Java编译器生成的字节码
javap A.class (反编译)
javap -c A.class (查看Java编译器生成的字节码)
参考文章:1. 如何精确地测量java对象的大小-底层instrument API
2. Java装箱和拆箱的基本概念及使用
3. 深入JVM---JVM命令---invokespecial
4. 深入理解java虚拟机 (书籍 周志明著)
- java 对象的创建和对象的内存布局
- java对象的内存布局
- Java对象的内存布局
- java对象的内存布局
- java对象的内存布局
- JAVA中对象的创建、对象的内存布局、对象的访问定位
- Java对象的创建、内存布局、访问定位
- jvm读书笔记-2.3内存对象的创建、布局和访问
- 对象的创建、内存布局和访问定位
- JVM对象的创建、内存布局、访问
- 对象的创建,访问,内存布局
- 对象的创建、内存布局、访问定位
- java内存,对象的创建
- 对象的创建、内存布局、对象的访问定位
- 对象创建,内存布局,对象的访问定位
- 对象的内存布局
- 对象的内存布局
- 对象的内存布局
- 第十周项目一(3)getchar函数
- 第十周项目4-大奖赛计分(1)
- 追踪长尾豹马修 I'm Alive Celion Dion
- jetty的maven旧版本
- 第10周项目1-拓展一次计算10道题
- java 对象的创建和对象的内存布局
- 图像去噪处理
- Linux 下安装数据库软件
- 还原非本机备份的数据库2008 的.bak文件
- Unity3D 错误nativeVideoFrameCallback的解决方法
- intet与xinetd
- 在linux中添加ftp用户,并设置相应的权限
- 在Esri官网申请60天试用版 ArcGIS Desktop(过期)
- 2014-11-2 学习日志