JVM概念中的Java对象的大小,以及三种引用类型的定义与区分

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
本文总结了JVM概念中的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时,肯定是没有软引用存在的。 

弱引用:弱引用与软引用类似,都是作为缓存来使用。但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内。 

强引用不用说,我们系统一般在使用时都是用的强引用。而“软引用”和“弱引用”比较少见。他们一般被作为缓存使用,而且一般是在内存大小比较受限的情况下做为缓存。因为如果内存足够大的话,可以直接使用强引用作为缓存即可,同时可控性更高。因而,他们常见的是被使用在桌面应用系统的缓存。
java对象比较的三种方式 java中提供了关于对象的比较,有以下方式 (1) equals() 这是所有的类都具备的能力。 理解:比较两个对象代表的是不是同一个实际事物 规则:需要重写(覆写)equals方法才能达到 (2)大小的比较有两种: 1. 自然顺序比较 Comparable compareTo() 不是所有的类都具备,需要通过实现Comparable接口来表明该类具备这个能力 理解:比较this和传入的引用指向的对象 2. 外部比较(比较器)Comparator —— 构造一个天平 不需要比较的类具备 Comparabl 阅读详情

相关推荐

java对象的长度_什么决定Java对象大小

这完全取决于实现,但是有一些因素会影响Java中的对象大小。首先,Java对象中的字段的数量和类型明确地影响空间使用,因为您需要至少具有存储所有对象的字段所需的存储空间。但是,由于填充,对齐和指针压缩优化,没有直接公式可以用来精确计算这种方式使用了多少空间。对于方法,通常说,对象中的方法数量对其大小没有影响。方法通常使用称为virtual function tables(或“vtables”)的功...

weixin_42220853的博客 480

对象,小对象

很多时候,当我们说起对象的时候往往都说的是程序中的某个类的实例,在教学的时候很多老师也都会这么说。但是在现实的项目开发中,这样的定义是没有任何意义的,因为只要用的是一门面向对象的语言,这种定义本来就已经蕴含在语言之中,所以在程序开发的时候再给开发人员传输这么一个定义是完全重复的,没有任何实际意义的。 我认为对象定义不能一概而论,对象层次的,那么对象定义也应该是层次的,本文的观点就是将

麦田里的守望者 2735

java - java中的引用类型大小

java - java中的引用类型大小

u011250186的博客 1187

腾讯大佬详谈JVM概念Java对象大小引用类型

正文 在参考文献1中,总结了JVM概念中的Java对象大小,以及三种引用类型定义区分Java对象大小   基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句: Object ob = new Object();   这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部所说的Java

shayukaifa的博客 169

java jvm对象_(转)JVM概念Java对象大小引用类型

本文来自和你在一起的博客,原文标题:《JVM调优总结(二)-一些概念》。本文总结了JVM概念中的Java对象大小,以及三种引用类型定义区分。基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句:Objectob=newObject(...

weixin_39764379的博客 959

java 引用 大小_JVM概念Java对象大小引用类型

参考文献正文在参考文献1中,总结了JVM概念中的Java对象大小,以及三种引用类型定义区分Java对象大小基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句:Object ob = new Object();这样在程序中完成了一个...

weixin_39946029的博客 182

JVM概念Java对象大小引用类型

本文来自和你在一起的博客,原文标题:《JVM调优总结(二)-一些概念》。本文总结了JVM概念中的Java对象大小,以及三种引用类型定义区分。 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句:   1.Object ...

qijingwang的博客 996

java对象大小引用类型

本文来自和你在一起的博客,原文标题:《JVM调优总结(二)-一些概念》。本文总结了JVM概念中的Java对象大小,以及三种引用类型定义区分。 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句: Object ob =

414

java 对象引用类型_JVM概念Java对象大小引用类型

本文来自和你在一起的博客,原文标题:《JVM调优总结(二)-一些概念》。本文总结了JVM概念中的Java对象大小,以及三种引用类型定义区分。基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句:Objectob=newObject(...

weixin_29061531的博客 127

jvm概念简介

Java虚拟机中,数据类型可以为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括:类类型,接口类型...

xmh_sxh_1314的博客 314
上一篇: 一个JAVA 程序员的告白
下一篇: Jive 源代码研究
coollor
博客等级 码龄15年 48粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值