首页 > 编程语言 >Java对象组成部分

Java对象组成部分

时间:2023-04-27 10:33:29浏览次数:34  
标签:Java 对象 虚拟机 HotSpot 组成部分 数据 指针

节选自《深入理解JAVA虚拟机》: 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 HotSpot虚拟机的对象头包括两部分信息,第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,官方称它为"Mark Word"。 对象头的另外一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。并不是所有的虚拟机实现都必须在对象数据上保留类型指针,换句话说,查找对象的元数据信息并不一定要经过对象本身,这点将在2.3.3节讨论。另外,如果对象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通Java对象的元数据信息确定Java对象的大小,但是从数组的元数据中却无法确定数组的大小。 接下来的实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录起来。 第三部分对齐填充并不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。由于HotSpot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说,就是对象的大小必须是8字节的整数倍。    

标签:Java,对象,虚拟机,HotSpot,组成部分,数据,指针
From: https://www.cnblogs.com/zeenzhou/p/17358219.html

相关文章

  • 【C++】类与对象(上)
    系列文章之前的文章中讲解了,什么是类、类的实例化,以及封装的意义,若仍有不理解的部分可以移步上一篇文章  【C++】类与对象(引入)目录系列文章1.默认成员函数2.构造函数2.1定义2.2特性2.2.1重载构造函数2.2.2与缺省参数混合使用2.2.3默认构造函数3.析构函数3.1定义3.2特性4.拷贝构造......
  • Java的初始化块
    三种初始化数据域的方法:在构造器中设置值在声明中赋值初始化块(initializationblock)初始化块在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会被执行。classEmployee{privatestaticintnextId;privateintid;privateStringname;......
  • java获取当前年份、月份和日期
    创建一个Calendar类的实例对象,Calendar类属于java.util包Calendarcalendar=Calendar.getInstance();获SimpleDateFormatformat=newSimpleDateFormat(“yyyy-MM-dd”);//获取当月第一天calendar=Calendar.getInstance();calendar.add(Calendar.MONTH,0);calendar......
  • JavaScript获取两个数组的差集
    constarra=['a','b','c','d','e'];constarrb=['b','e'];console.log("some:"+arra.filter(v=>!arrb.some((item)=>item===v)));console.log("find:&quo......
  • springboot入门时,发现Java版本与Spring boot版本无法对应导致错误的问题解决
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/......
  • Java自定义生成证书图片
    1、引入依赖<!--cmyk格式图片转换--><dependency><groupId>org.sejda.imageio</groupId><artifactId>webp-imageio</artifactId><version>0.1.6</version></dependen......
  • 基于Java开发支持全文检索、工作流审批、知识图谱的应用系统
    一、项目介绍一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,应用在需要进行常用文档整理、分类、归集、检索的地方,适合知识密集型单位/历史文档丰富的单位,或者大型企业、集团。为什么建立知识库平台?二、项目所用技术springboot+vue+tinyMce+activiti+elastics......
  • 【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现
    简介单例模式(SingletonPattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式,同时要通过加锁来避免线程......
  • java解决表达式计算问题(转)
    这是LeetCode上的一道题,因为特别具有代表性,所有记录在这里。题目227.给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如eval()。......
  • Java8使用Stream API转换Map遇到的2种异常报错和解决思路
    问题java8提供了StreamAPI,配合Lambda表达式,让开发者能对集合对象进行便利、高效的操作。在日常业务开发中,有个经常用到的场景是将List类型对象转换为Map类型对象,方便后续操作。在java8之前,这种转换需要先new一个Map对象,遍历list然后通过Map#put来初始化。使用java8后,可方便的......