long i[] = new long[1000000];
for(int j = 0; j < 1000000; j++) {
i[j]= 0l;
}
预算一个long占8个byte
* 8000000/(1024*1024) = 7.62939453125MB
完全正确。
Long i[] = new Long[1000000];
for(int j = 0; j < 1000000; j++) {
i[j]= 0l;
}
如果把Long按对象计算的话,引用占4byte,空对象占8byte,至少12byte吧。其实我理解错了。
Jvm对这种包装类型的自动拆箱和装箱机制在存储上进行了优化。
结果你会发现Long只占了4字节,这是为什么,好像Long自动优化成了int。看来我理解错了,jdk1.6会对包装类型进行优化,所以Java对象中应该定义对象的属性为包装类型或者基本类型都是浮云,有的时候包装类型反而占的存储更少
100W
基本类型
数据类型 预计占存 实际占存 结果
int 3.814697265625 3.81471252441406225 OK
short 1.9073486328125 1.90736389160156245 OK
long 7.62939453125 7.62940979003906225 OK
float 4.214820861816406 3.81471252441406225 OK
double 7.62939453125 7.62940979003906225 OK
char 1.9073486328125 1.90736389160156245 OK
包装类型
数据类型 预计占存 实际占存 结果
Integer[存储优化] 3.814697265625 3.81471252441406225 OK
Short[存储优化] 3.814697265625 3.81471252441406225 OK
Long[存储优化] 3.814697265625 3.81471252441406225 OK
Float 19.073486328125 18.99338531494140625 不理想
Double 19.073486328125 18.99338531494140625 不理想
Object 11.444091796875 11.27165222167968725 不理想
String 3.814697265625 3.81471252441406225 OK
Char[存储优化] 3.814697265625 3.81471252441406225 OK
疑问:Float和Double类型的包装类至少到对象16byte再加上float本身占用4byte,至少占用20字节与float相比差5倍的内存,大量使用的时候要注意.这里的String指的是同一个String,jvm会对它进行优化,放入常量池,而本身只保存一个引用,引用的大小是4byte.
[java对于数字类型Char,Integer,Short,Long都进行了优化]
那么如何计算一个对象的大小呢.
public MemObj(Integer a,Long b)
[当数字不在-127~128]
对象引用占4KB+空对象占8KB,Integer占4+16[创建],Long占4+16
* 预计占用52Kb
5.249168395996094 ==> 4.84906005859375025
* 实际一个对象占51Kb
[当数字在-127~128]
* 计算MemObj 因为对象过大,所以采用10W的对象
* 2.3214187622070312 ==> 1.92131042480468745
* 实际一个对象占20.146399999999999475712KB * 预计
* 对象引用占4KB+空对象占8KB,Integer占4,Long占4
* 总共20KB
注意使用数字时,能使用-127~128的,使用包装类型没问题,当不在这范围内时,最好使用基本类型,将会极大的优化存储.
分享到:
相关推荐
JVM运行机制深入分析,适用于研究java开发的人员,想深入理解jvm
《淘宝JVM优化实践》是一份深入探讨阿里巴巴集团核心系统研发部在JVM优化方面的实践经验的文档。这份文档主要涵盖了以下几个关键知识点: 1. **淘宝JVM优化背景**:随着淘宝、天猫等业务的快速发展,其Java应用规模...
JVM优化方法
【JVM运行机制详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行字节码,为Java程序提供跨平台的运行环境。在深入理解JVM内核的运行机制时,我们需要关注以下几个关键点: 1. **类加载机制**:JVM...
为了深入理解JVM优化的相关知识点,我们可以从多个角度来探讨。首先,需要理解JVM(Java虚拟机)的基本概念,以及在性能调优中的关键作用。JVM是运行Java程序的核心组件,负责解释Java字节码,并将字节码转换成特定...
JVM的设计目标是实现Java代码的“一次编写,到处运行”原则,这得益于它的平台无关性和字节码执行机制。 1. **JVM的结构** - **字节码指令集**:Java源代码经过编译器编译成字节码,这是一种平台无关的中间表示。...
**JVM性能优化** 在Java开发中,JVM(Java Virtual ...通过深入学习和实践,开发者可以更好地驾驭JVM,使Java应用运行得更加高效、稳定。这份PPT提供了一个全面的指南,帮助开发者深入理解和优化JVM的各个方面。
大厂架构师-日均百万订单量的JVM优化与高级GC调优策略实战(5.8G) 〖课程介绍〗: 来自顶尖大厂的架构师级JVM优化与GC调优策略实战课程,是具备有尖端技术的优化课程。在课程内容上几乎不用过多的介绍,单是查阅目录就...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。...同时,对于想要深入了解Java底层机制、开发Java工具或者研究JVM优化的人,深入研究JVM规格更是必不可少。
在JVM优化中,内存配置是关键的一环。例如,`-Xms2048m -Xmx2048m`设置了JVM的最小和最大堆内存为2GB,`-Xmn512m`指定了新生代的大小为512MB,`-XX:MaxPermSize=256m`设定了永久代的最大值为256MB,而`-Xss128k`则...
### MSB企业级JVM优化与性能调优课程解读 #### 一、JVM基础知识与原理 ##### 1.1 JVM内存结构 JVM(Java虚拟机)内存模型主要包括堆内存(Heap)、方法区(Method Area)、程序计数器(Program Counter Register...
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...
"jvm优化参数配置"是确保Tomcat稳定运行的关键环节,能够提高应用的响应速度,减少内存泄露,提升系统整体性能。以下是对JVM参数优化的详细解释: 1. **内存配置**: - **堆内存(Heap Memory)**:分为新生代...
- 了解下我们为什么要学习JVM优化 - 掌握jvm的运行参数以及参数的设置 - 掌握jvm的内存模型(堆内存) - 掌握jamp命令的使用以及通过MAT工具进行分析 - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握...
JVM性能优化笔记 ------------------------------------------
除了上述提到的内容外,JVM优化还涉及到了JIT(Just-In-Time)编译优化、类加载机制优化、以及JVM内部实现的优化。这些优化可以大幅度提升应用程序的性能,但这需要开发者具备深厚的Java虚拟机知识和丰富的实践经验...
### JVM优化及面试热点分析 #### 一、Java技术概览与重要性 Java作为一门历史悠久且广泛应用的编程语言,其重要性和影响力不言而喻。根据TIOBE编程语言排行榜,Java一直稳居首位,这不仅是因为它拥有庞大的开发者...
文档"深入Java虚拟机(原书第2版).pdf"将为你提供更深入的理论基础,"jvm优化.docx"涵盖了具体的JVM调优技巧,而"tomcat性能调优.docx"则专注于Tomcat的优化实践。通过学习这些资料,你将能够更好地理解和优化你的...