[转]Java对象内存占用分析

[转]Java对象内存占用分析

转载:https://segmentfault.com/a/1190000006933272
http://www.cnblogs.com/zhanjindong/p/3757767.html

java对象内存布局 对象头+实例数据+补充填充

对象头

开启指针压缩(-XX:-UseCompressedOops)的情况下(默认),对象头占用12bytes
不开启指针压缩(-XX:+UseCompressedOops)则占用16bytes。

填充对象

Java对象占用空间是8字节对齐的,即所有Java对象占用bytes数必须是8的倍数。例如,一个包含两个属性的对象:int和byte,并不是占用17bytes(12+4+1),而是占用24bytes(对17bytes进行8字节对齐)

实例数据

原生数据

Type Range Default Size Example
boolean true or false false 1 bit true, false
byte -128 .. 127 0 8 bits 1, -90, 128
char Unicode character or 0 to 65,536 \u0000 16 bits 'a', '\u0031', '\201', '\n', 4
short -32,768 .. 32,767 0 16 bits 1, 3, 720, 22,000
int -2,147,483,648 .. 2,147,483,647 0 32 bits -2, -1, 0, 1, 9
long -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 0 64 bits -4000L, -900L, 10L, 700L
float 3.40282347 x 1038, 1.40239846 x 10-45 0.0 32 bits 1.67e200f, -1.57e-207f, .9f, 10.4F
double 1.7976931348623157 x 10308, 4.9406564584124654 x 10-324 0.0 64 bits 1.e700d, -123457e, 37e1d
对象引用(reference)类型在64位机器上,关闭指针压缩时占用8bytes, 开启时占用4bytes。

对象内存占用

TestObject对象有四个属性,分别为int, double, Byte, char[]类型。在打开指针压缩(-XX:+UseCompressedOops)的情况下,在64位机器上,TestObject占用的内存大小应为:

12(Header) + 4(int) + 8(double) + 4(reference) = 28 (bytes),加上8字节对齐,最终的大小应为32 bytes。

当指针压缩关闭时(-XX:-UseCompressedOops) 如果打开,在64位机器上,TestObject占用的内存大小应为:

16(Header) + 4(int) + 8(double) + 8(reference) = 36 (bytes), 8字节对齐后为 40 bytes。

包装类型

Numberic Wrappers +useCompressedOops -useCompressedOops
Byte, Boolean 16 bytes 24 bytes
Short, Character 16 bytes 24 bytes
Integer, Float 16 bytes 24 bytes
Long, Double 24 bytes 24 bytes

数组

在64位机器,数组对象的对象头占24bytes 启动压缩了占用16字节,比普通对象占用内存多是因为需要额外的空间存储数组的长度?;∈堇嘈褪檎加玫目占浒ㄊ槎韵笸芬约盎∈堇嘈褪菡加玫哪诖婵占?br> 由于对象数组中存放的是对象的引用,所以对象数组本身的大小=数组对象头+length * 引用指针大小,总大小为对象数组本身大小+存放的数据的大小之和。

new Integer[3]:
关闭压缩:
Integer数组本身:24(header) + 3 * 8(Integer reference) = 48 bytes;
总共:48 + 3 * 24(Integer) = 120 bytes。
关闭压缩:
Integer数组本身:24(header) + 3 * 8(Integer reference) = 48 bytes;
总共:48 + 3 * 24(Integer) = 120 bytes。

String

在JDK1.7及以上版本中,String包含2个属性,一个用于存放字符串数据的char[], 一个int类型的hashcode,
因此,在关闭指针压缩时,一个String本身需要 16(Header) + 8(char[] reference) + 4(int) = 32 bytes。

除此之外,一个char[]占用24 + length * 2 bytes(8字节对齐), 即一个String占用的内存空间大小为:

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • 最近在做一个需求,评估Java列表10万数据加载到内容占用空间大小,以及对服务器内存使用影响。以前都是从书上看Ja...
    大头8086阅读 5,200评论 1 8
  • 博客链接:http://www.ideabuffer.cn/2017/05/06/Java对象内存布局/ 我们知道...
    闪电是只猫阅读 13,397评论 8 48
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,605评论 18 399
  • 本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本...
    kyson老师阅读 1,262评论 0 51
  • 4月11日 周六 晴 晓雨今天不用上学,可我6:00还是起了床。因为没有心情打开窗帘,房间里很暗。我起床踱到办公...
    柒可凡南苍术阅读 383评论 13 13