博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM调优-Java中的对象
阅读量:4335 次
发布时间:2019-06-07

本文共 1260 字,大约阅读时间需要 4 分钟。

Java对象的大小

基本数据的类型的大小是固定的,这里不做详细说明。对于非基本类型的Java对象,其大小就值得商榷。

在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看
下面语句:
Object ob = new Object();
这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的
Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都
需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。
有了Object对象的大小,我们就可以计算其他对象的大小了。
例如,下面一段代码。

Class NewObject {
int count; boolean flag; Object ob; }
其大小为:空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小
(4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接
近8的整数倍的是24,因此此对象的大小为24byte。

这里需要注意一下基本类型的包装类型的大小。因为这种包装类型已经成为对象了,因此需要把他们作为对

象来看待。包装类型的大小至少是12byte(声明一个空Object至少需要的空间),而且12byte没有包含任何有
效信息,同时,因为Java对象大小是8的整数倍,因此一个基本类型包装类的大小至少是16byte。这个内存占
用是很恐怖的,它是使用基本类型的N倍(N>2),有些类型的内存占用更是夸张(随便想下就知道了)。因
此,可能的话应尽量少使用包装类。在JDK5.0以后,因为加入了自动类型装换,因此,Java虚拟机会在存储方
面进行相应的优化。
对象的引用类型
对象引用类型分为强引用,软引用,弱引用和虚引用。
强引用:声明对象时虚拟机生成的引用,强引用环境下,虚拟机需要严格判断对象是否被强应用,如果是则不会被垃圾回收。
软引用:软引用一般作为缓存来使用。软引用在进行垃圾回收时,虚拟机会根据当前系统的神域内存来决定是否对软引用进行垃圾回收。
如果剩余内存比较紧张,则会垃圾回收软引用锁引用的内存空间。可以理解为,当虚拟机发生OutOfMemory时,肯定没有软引用存在。
弱引用:弱引用与软引用类似,都是作为缓存来使用。但与软引用不同,弱引用在进行垃圾回收时,是一定会被
回收掉的,因此其生命周期只存在于一个垃圾回收周期内。
虚引用:顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,
那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

转载于:https://www.cnblogs.com/weiguo21/p/5193819.html

你可能感兴趣的文章
高斯消元
查看>>
理解js中的this指向以及call,apply,bind方法
查看>>
Python爬虫:Xpath语法笔记
查看>>
提高代码质量:如何编写函数
查看>>
关于“做一个聊天+信息分享客户端”的设想(SNS?)
查看>>
L1-023 输出GPLT (20 分)
查看>>
Java基础相关
查看>>
C# LINQ(5)
查看>>
HTML课堂笔记02-21
查看>>
c#读取xml文件配置文件Winform及WebForm-Demo具体解释
查看>>
开源 java CMS - FreeCMS2.3员
查看>>
目标检測的图像特征提取之(一)HOG特征
查看>>
DIV+CSS常见问题的14条原因分析
查看>>
shlve模块 序列化 python任意的数据
查看>>
第十篇 Form表单
查看>>
PHP教程:WebService最常用的两种方法
查看>>
哪些书你看之前以为很枯燥,结果一看却欲罢不能的?
查看>>
左边跟鼠标滑动导航
查看>>
BZOJ 1666 USACO 2006 Oct. 奶牛的数字游戏
查看>>
简单的html5 readAsDataURL img和base64互相转换
查看>>