| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> JVM(5)之对象创建过程+对象头具体包括什么+对象定位 -> 正文阅读 |
|
[移动开发]JVM(5)之对象创建过程+对象头具体包括什么+对象定位 |
一、一线互联网面试题? ? ?首先先看下下面的面试题: 二、对象的创建过程首先在创建对应的时候如果对象不存在肯定是涉及到class文件的加载,class文件的加载需要经历:加载 ->连接->初始化。
三、对象在内存中的存储布局2.1观察虚拟机配置的命令:
? ? ? ? 这个就是我本机默认的虚拟机配置参数: ?2.2普通对象????????内存里的一个Java对象分为三部分:对象头,实例数据,对齐、class Pointer 类指针。
2.3数组对象? ? ? ? 数组对象跟普通对象是差不多的,只不过比普通对象多出了一块数据:数组长度; ????????数组长度:4字节 标记数组有多少个元素; ? ? ? ? 下面做一个实验,做这个实验,首先我们需要自己做一个工具jar,实验:利用java agent(class文件到内存之间的代理,这个代理得自己去实现)的机制。下面补充了种用JOL工具的,比较简单。 1、创建文件ObjectSizeAgent(类似到内存前有个代理)
????????2、src目录下创建META-INF/MANIFEST.MF ????????这里可以只要Premain-Class: com.mashibing.jvm.agent.ObjectSizeAgent;
????????3、打包jar文件????? ????????4、在需要使用该Agent Jar的项目中引入该Jar包 project structure - project settings - library 添加该jar包 ????????5、运行时需要该Agent Jar的类,加入参数: ????????执行用哪个jar文件当作代理来运行我的虚拟机:
????????6、如何使用该类:
????????测出来 object:16个字节 object大小分析:对象头是8个字节,本来应该是8个字节(64位的)因为默认打开时压缩的,所以加上被压缩成4个字节(class_pointer ),一共是12字节,再加上有4字节的填充数据,一共16字节; 3、对象头包括什么????????1.8的实现,C++文件,去看Hotspot源码。 ????????HotSpot虚拟机的对象头(Object Header)包括两部分信息,第一部分用于存储对象自身的运行时数据, 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等,这部分数据的长度在32位和64位的虚拟机(暂 不考虑开启压缩指针的场景)中分别为32个和64个Bits,官方称它为“Mark Word”。 ????????对象需要存储的运行时数据很多,其实已经超出了32、64位Bitmap结构所能记录的限度,但是对象头信息是与对象自身定义的数据无关的额 外存储成本,考虑到虚拟机的空间效率,Mark Word被设计成一个非固定的数据结构以便在极小的空间内存储尽量多的信息,它会根据对象的状态复用自己的存储空间。例如在32位的HotSpot虚拟机 中对象未被锁定的状态下,Mark Word的32个Bits空间中的25Bits用于存储对象哈希码(HashCode),4Bits用于存储对象分代年龄,2Bits用于存储锁标志 位,1Bit固定为0,在其他状态(轻量级锁定、重量级锁定、GC标记、可偏向)下对象的存储内容如下表所示。
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 18:39:37- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |