JVM(四):对象的内存布局

简介: JVM(四):对象的内存布局

对象的内存布局

请解释一下对象的创建过程

类加载机制

  • 加载
  • 验证
  • 准备
  • 解析
  • 初始化
  • 申请对象内存
  • 成员变量赋予默认值
  • 调用构造方法
  • 成员变量顺序赋予初始值
  • 执行构造方法语句

对象在内存中的存储布局

观察虚拟机的配置

java -XX:PrintCommandLineFlags -version

普通对象

  • 对象头 : markword 8【GC了多少次
  • ClassPointer :-XX:+UseCompressedClassPointers 为 4字节,不开启为 8 字节 【属于哪个Class】
  • 实例数据

  • Padding对齐,8的倍数

数组对象

  • 对象头
  • ClassPointer
  • 数组数据
  • 数组长度【Array length】
  • 对齐 8 的倍数

一个对象多少字节【16个字节】

-XX:+UseCompressedClassPointers : 类的引用

-XX:_UseCompressedOopsstring 的引用

Oops = ordinary object pointers

  • 对象头 8个字节
  • 压缩指针 4个字节
  • padding 4个字节

对象头具体包括什么

GC年龄默认是 15 :分代年龄 4 bit 0 ~ 15

markword 64 位

IdentityHashCode

当一个对象计算过 idetityHashCode 之后,不能进入偏向锁状态

当无锁的状态计算 HashCode 时,他就无法进入偏向锁状态

对象定位

  • 句柄池【找一个间接的指针,再找引用】
  • CMS 垃圾回收较快
  • 直接指针【直接引用】


相关文章
|
5天前
|
Java Linux
JVM堆内存诊断
JVM堆内存诊断
12 0
|
10天前
|
存储 Java 对象存储
JVM(内存区域划分)
JVM(内存区域划分)
27 1
|
12天前
|
存储 安全 Java
synchronized原理-字节码分析、对象内存结构、锁升级过程、Monitor
本文分析的问题: 1. synchronized 字节码文件分析之 monitorenter、monitorexit 指令 2. 为什么任何一个Java对象都可以成为一把锁? 3. 对象的内存结构 4. 锁升级过程 (无锁、偏向锁、轻量级锁、重量级锁) 5. Monitor 是什么、源码查看(hotspot虚拟机源码) 6. JOL工具使用
|
4天前
|
存储 算法 Java
JVM性能调优:内存模型及垃圾收集算法
JVM性能调优:内存模型及垃圾收集算法
12 0
|
5天前
|
存储 安全 Java
浅谈JVM内存结构
浅谈JVM内存结构
10 0
|
7天前
|
存储 Java 开发者
深入理解Java虚拟机:JVM内存模型解析
【5月更文挑战第27天】 在Java程序的运行过程中,JVM(Java Virtual Machine)扮演着至关重要的角色。作为Java语言的核心执行环境,JVM不仅负责代码的执行,还管理着程序运行时的内存分配与回收。本文将深入探讨JVM的内存模型,包括其结构、各部分的作用以及它们之间的相互关系。通过对JVM内存模型的剖析,我们能够更好地理解Java程序的性能特征,并针对性地进行调优,从而提升应用的执行效率和稳定性。
|
7天前
|
Java
<Java SE> 5道递归计算,创建数组,数组遍历,JVM内存分配...
<Java SE> 5道递归计算,创建数组,数组遍历,JVM内存分配
34 2
|
20天前
|
存储 安全 Java
Python中的引用和赋值机制允许变量引用内存中的对象,并通过引用计数来管理对象的生命周期
【5月更文挑战第14天】Python中的变量是对象引用,不存储数据,而是在内存中创建对象。赋值操作创建新变量并使其指向已有对象。引用计数用于管理对象生命周期,引用数为0时对象被回收。理解这些机制对编写高效Python代码很重要。
32 6
|
20天前
|
Java Linux Arthas
linux上如何排查JVM内存过高?
linux上如何排查JVM内存过高?
831 0
|
20天前
|
存储 缓存 算法
深入浅出JVM(十四)之内存溢出、泄漏与引用
深入浅出JVM(十四)之内存溢出、泄漏与引用