小姐姐问:Object obj=new Object()究竟占多少字节啊?

目录概述Java 对象头内存模型验证模型内存对齐非空对象占用内存计算总结概述公司小姐姐今天突然找我聊天,那个激动啊,然后她突然问我你有对象吗?我心里一愣,难道我的春天来了吗?但是接下来一句话让我心灰意冷 啊,你知道Object obj=new Object()占多少字节吗?我男朋友问我,我内心真的是一万头***奔腾而过啊,处于耿直的程序员,我们来看一下对象到底占用多...
摘要由CSDN通过智能技术生成

目录

概述

Java 对象头内存模型

验证模型

内存对齐

非空对象占用内存计算

总结


概述

公司小姐姐今天突然找我聊天,那个激动啊,然后她突然问我你有对象吗?我心里一愣,难道我的春天来了吗?但是接下来一句话让我心灰意冷 啊,你知道Object obj=new Object()占多少字节吗?我男朋友问我,我内心真的是一万头***奔腾而过啊,处于耿直的程序员,我们来看一下对象到底占用多少字节。

Java 对象头内存模型

我们先来看看,一个Java 对象的内存模型是怎么样的?由于我们的虚拟机是分为32位和64位,那肯定它们的模型也是有区别的,下面我列出列32位虚拟机和64位虚拟机下的Java对象头内存模型。

小姐姐问:Object obj=new Object()究竟占多少字节啊?

 

小姐姐问:Object obj=new Object()究竟占多少字节啊?

 

小姐姐问:Object obj=new Object()究竟占多少字节啊?

 

因为我的本地环境是jdk1.8,64位虚拟机,这里我以64位虚拟机(开启指针压缩)来分析,因为默认情况下,jdk1.8 在64位虚拟机默认开启指针压缩。

Java 对象头主要包括两部分,第一部分就是 Mark Word,这也是 Java 锁实现原理中重要的一环,另外一部分是 Klass Word。

Klass Word 这里其实是虚拟机设计的一个oop-klass model模型,这里的OOP是指Ordinary Object Pointer(普通对象指针),看起来像个指针实际上是藏在指针里的对象。而 klass 则包含 元数据和方法信息,用来描述 Java 类。它在64位虚拟机开启压缩指针的环境下占用 32bits 空间。

Mark Word 是我们分析的重点,这里也会设计到锁的相关知识。Mark Word 在64位虚拟机环境下占用 64bits 空间。整个Mark Word的分配有几种情况:

  1. 未锁定(Normal): 哈希码(identity_hashcode)占用31bits,分代年龄(age)占用4 bits,偏向模式(biased_lock&#x
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值