jVM笔记4-对象的结构
1.对象的结构有:
1.Header(对象头),其组成主要有两部分:
1.自身运行时的数据(Mark Word),包括:
1.哈希值
2.GC分代年龄。
3.锁状态标志
4。线程所持有的锁
5.偏向线程ID
6.偏向时间戳
自身运行时的数据(Mark Word)说占多少多内存呢?其实是根据32位,64位的虚拟机而定的。但是它包含的数据远远超过其本身内存。
那它是如何做到将这些数据存储的 呢?先看下图:
很明显它是通过内存复用来实现。
2.类型指针。就是对象指向它的类的元数据的指针。虚拟机通过这个指针来确定这个对象是哪个类的实例。注意并不是所有的虚拟机的实现都保留类型指针。
2.InstanceData(数据实例):这部分是真正存储对象的有效信息,也是我们接触到的,看到的最多的地方。不管是从父类继承下来的,还是子类定义的,都要记录下来。
这部分存储的顺序会收到虚拟机的分配策略和字段在java源码中的顺序的影响。HotSpot虚拟机所默认的 分配策略是相同宽度的字段被分配到一起。
3.Padding(填充):它仅仅相当于占位符。这部分并不是必然存在的,也没有特别的含义,它仅仅相当于占位符。那为什么需要占位符呢?主要是因为HotSpot虚拟机的自动内存管理系统要求
对象起始地址必须是8个字节的整数倍,也就是说对象的大小必须是八个字节的整数倍,而对象头部分刚好是8个字节的整数倍,而InstanceData如果没有八个字节的整数倍,则要通过填充来
使它达到。
jVM笔记4-对象的结构的更多相关文章
- es6学习笔记-proxy对象
前提摘要 尤大大的vue3.0即将到来,虽然学不动了,但是还要学的啊,据说vue3.0是基于proxy来进行对值进行拦截并操作,所以es6的proxy也是要学习一下的. 一 什么是proxy Prox ...
- JVM学习01:内存结构
JVM学习01:内存结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 内存结构知识要点Xmind梳理 案例分析 分析1 package com.h ...
- JVM笔记(虚拟机各内存的介绍)
JVM笔记 java代码执行分为两部分:javac编译 java执行 代码并不是由上往下执行的,会经过编译期重排序进行优化,存在依赖关系的代码不会被重排序,保证了代码最终执行结果的正确性! j ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- java对象的结构
[Java对象解析]不得不了解的对象头 一个Java对象到底占用多大内存? JVM源码分析之java对象头实现 java对象在内存中的结构(转帖) 一个Java对象到底占多大内存? 在Hotspot ...
- jQuery 学习笔记:jQuery 代码结构
jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...
- [Java基础] Java对象内存结构
转载地址:http://www.importnew.com/1305.html 原文于2008年11月13日 发表, 2008年12月18日更新:这里还有一篇关于Java的Sizeof运算符的实用库的 ...
- 99.9%的Java程序员都说不清的问题:JVM中的对象内存布局?
本文转载自公众号:石彬的架构笔记,阅读大约需要8分钟. 作者:李瑞杰 目前就职于阿里巴巴,资深 JVM 研究人员 在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的 new 语句之外,我 ...
- JVM笔记-Java技术体系与JVM概述
1. 简述 Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系. Java 的广告词为 "一次编写,到处运行",之所以能够做到"跨平台&quo ...
随机推荐
- struts2 添加请求后缀的3种方式
第一种方式在struts.xml文件中添加 <constant name="struts.action.extension" value="">&l ...
- try{}catch(e){}不能捕获到异常
只能捕获到ReferenceError异常,I don't know why. try{ aa();//这是一个未被定义的方法 }catch(e){ if(e instanceof Reference ...
- 文件A包含文件B,找出A不包含B的那部分
文件A: a f b e c d 文件B: b c a 目的:A包含B,找出A中有但B中没有的部分 代码: 首先利用dos2unix命令将windows文件转换为unix文件 dos2unix a.t ...
- 提取位于<title>...</title>内的文本标题内容
#vim title.txt <title>nhlinkin</title> # cat title.txt | sed 's:.*<title>\([^< ...
- 如何使用 highlight.js 高亮代码
highlight 是一款简单易用的 web 代码高亮插件,可以自动检测编程语言并高亮,兼容各种框架,可以说是十分强大了.下面就简单介绍一下如何使用这款插件. 两种使用方式: 1. 手动选择主题,官网 ...
- History对象和location对象
history对象 History对象包含用户在浏览器窗口中访问过的url.不是所有浏览器都支持该对象. 属性length 返回浏览器历史列表中的URL数量. 方法:back() 加载histor ...
- Jmeter之性能测试插件PerfMon Metrics Collector监听器,实时监听服务器资源(十四)
Servers Performance Monitoring Introduction During a load test, it is important to know the health o ...
- python3中,os.path模块下常用的用法总结
abspath basename dirname exists getatime getctime getmtime getsize isabs isdir isfile islink ismount ...
- ansible playbook实践(三)-yaml文件写法
playbook基于YAML语法来编写,基本语法规则如下: 1.大小写敏感 2.使用缩进表示层级关系 3.缩进时不允许使用Tab键,只允许使用空格 4.缩进的空格数目不重要,只要相同层级的元素左侧对齐 ...
- JVM学习(一)
一.gc日志查看与分析 在sever端的run.xml中run和debug中加入如下参数: <jvmarg value="-XX:+PrintGCDateStamps"/&g ...