0

0

Java对象存储内存布局的方法是什么

王林

王林

发布时间:2023-05-10 18:34:06

|

1382人浏览过

|

来源于亿速云

转载

Java对象存储内存布局

众所周知,java是一门面向对象的语言,那么一个对象在内存中都包含什么东西呢,首先,对象大部分是存储在堆上的(逃逸除外 )。

那么对象存储在堆中主要分为三个部分

  • 对象头、对象实例数据、对齐补充(数组会多一个数组长度)

  • 对象头:

    mark word: 存储对象的hashCode、锁信息(锁升级)或分代年龄或GC标志等信息

    立即学习Java免费学习笔记(深入)”;

    类型指针: 存储指向对象所属类(元数据中class文件)的指针,JVM通过这个确定这个对象属于哪个类

  • 对象实例数据:

    new出的对象信息,存放类的属性数据信息,包括父类的属性信息;

  • 对齐补充

    数组对象会多对齐填充

    JVM要求对象占用的空间必须是8 的倍数,方便内存分配(以字节为最小单位分配),因此这部分就是用于填满不够的空间凑数用的。

Java对象的访问定位

  • 主流的访问方式主要有句柄直接指针

  • 句柄

    Java堆中划分出一块内存作为句柄池,栈中的reference中存储的事对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息

  • 直接指针

    java堆中对象的内存布局必须考虑如何防止访问类型数据的相关信息,reference中存储的直接是对象地址。

  • 直接指针访问对象不需要多一次间接访问开销,而句柄方便在对象地址发生改变时(垃圾回收会移动对象地址)只需要改变句柄中的指针引用本身不需要改变。

    Tome
    Tome

    先进的AI智能PPT制作工具

    下载

Java对象的创建过程

  • 虚拟机遇到new指令时,先去检查指定的类是否被加载、验证、准备为类中的所有静态变量分配内存空间,并为其设置一个初始值 解析、初始化过。

  • 类检查后虚拟机为新对象分配内存

    如何保证并发情况分配堆内存安全

    虚拟机采用CAS配上失败重试保证原子性

    把内存分配交给线程,在创建线程时分配空间,把分配内存的任务交给线程支配。通过TLAB(Thread local Allocation Buffer)开启

  • 分配完内存后设置对象头,如哪个类的实例、hashcode、类的元数据信息指针(方法区)

  • 执⾏ init ⽅法(内核方法),初始化成员变量,执⾏实例化代码块,调⽤类的构造⽅法,并把堆内对象的⾸地址赋 值给引⽤变量。

Java对象分配内存是否线程安全

  • CAS 加失败重试保证更新原⼦性。

  • 把内存分配按线程划分在不同空间,即每个线程在 Java 堆中预先分配⼀⼩块内存,叫做本地线程分配缓冲 TLAB,哪个线程要分配内存就在对应的 TLAB 分配,TLAB ⽤完了再进⾏同步。

Java类实例化顺序

  • 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行

  • 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行

  • 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行

  • 父类构造方法

  • 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行

  • 子类构造方法

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

3

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

17

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 8万人学习

Java 教程
Java 教程

共578课时 | 53.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号