撸羊毛[草泥马] int & Integer
int是java八大基本数据类型之一,Integer是int对应的包装类,jdk5后引入了自动拆装箱,java根据上下文自动转换,简化编程。
》Integer缓存上限值默认(-128~127),jvm参数设置可调整上限:
-XX:AutoBoxCacheMax=N
》对象在内存中的布局分三个区域:对象头、实例数据、对齐填充
1)对象头存储
①Mark Word :对象运行时数据(hashcode、GC分代年龄、数组长度……)
②类型指针:jvm通过这个指针确定是哪个类的实例
2)实例数据:对象真正存储着的有效信息(程序代码中的各类字段……)
3)对齐填充:非必然存在,起占位符作用,jvm要求对象起始地址必须是8字节的整数倍
》如何获取对象大小
- Instrumentation + premain实现工具类:Instrumentation.getObjectSize()
- Unsafe,Unsafe.objectFieldOffset()
- jol,GraphLayout.parseInstance(obj).totalSize()
int是java八大基本数据类型之一,Integer是int对应的包装类,jdk5后引入了自动拆装箱,java根据上下文自动转换,简化编程。
》Integer缓存上限值默认(-128~127),jvm参数设置可调整上限:
-XX:AutoBoxCacheMax=N
》对象在内存中的布局分三个区域:对象头、实例数据、对齐填充
1)对象头存储
①Mark Word :对象运行时数据(hashcode、GC分代年龄、数组长度……)
②类型指针:jvm通过这个指针确定是哪个类的实例
2)实例数据:对象真正存储着的有效信息(程序代码中的各类字段……)
3)对齐填充:非必然存在,起占位符作用,jvm要求对象起始地址必须是8字节的整数倍
》如何获取对象大小
- Instrumentation + premain实现工具类:Instrumentation.getObjectSize()
- Unsafe,Unsafe.objectFieldOffset()
- jol,GraphLayout.parseInstance(obj).totalSize()
你说你喜欢python,丰富的库函数,高效的语法糖。但是你不喜欢python执行速度很慢。
你说你喜欢java,去除了指针,实现了自动垃圾回收机制。但是你不喜欢jvm虚拟机繁杂的实现逻辑,以及java冗长的语法。
你说你喜欢scala,有利于数据处理的函数式编程,并实现了解释执行与编译执行的结合。但是你不喜欢scala始终强依赖与jvm。
世界上没有最好的语言。说什么java天下无敌的,还有说php是世界上最好的语言的人都是鼠目寸光的sunshine boy简称SB。
你说你喜欢java,去除了指针,实现了自动垃圾回收机制。但是你不喜欢jvm虚拟机繁杂的实现逻辑,以及java冗长的语法。
你说你喜欢scala,有利于数据处理的函数式编程,并实现了解释执行与编译执行的结合。但是你不喜欢scala始终强依赖与jvm。
世界上没有最好的语言。说什么java天下无敌的,还有说php是世界上最好的语言的人都是鼠目寸光的sunshine boy简称SB。
#CSDN博文精选# 《Android性能优化(1):常见内存泄漏与优化》https://t.cn/Aiu5y4l3众所周知,Java因其拥有独特的虚拟机(JVM)设计,使其成为一门跨平台、内存自动管理的高级开发语言。所谓跨平台,即"一次编译,多次运行",从而解决了不同平台由于编译器不同导致无法运行问题;所谓内存自动管理,即Java不像C/C++那样需要开发者来分配、释放内存,它拥有一套垃圾回收机制来管理内存,这套机制减轻了很多潜在的内存回收不当问题。
✋热门推荐