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

UE4-(反射)场景采集之场景采集2D 一、场景采集为两种:场景采集2D、场景采集立方体 场景采集2D:采集2D图片模式。 操作: 1.选择场景采集2D,是一个摄像机的物体,摆放到场景中。 2.在文件夹空白处创建纹理,一定要注意创建纹理的格式, 纹理为立方体渲染目标和渲染目标,此处我们使用的是2D模式,所以选择渲染目标(Texture Render Target2D)。创建后重命名为RenderTextue2D。 3.选择场景中刚拖入的 SceneCapture2D 摄像机在细节面板的Scene Capture 将.. 阅读详情
本文总结了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虚拟机的东西,一直想享下,弄了半天,太过理论了,也写不出太多特别的东西,看已经有朋友享的很好了,还整理成了一个系统,就转载下,希望对朋友们有用,欢迎关注老王公众号【软件老王】,关注不迷路。 Java对象大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句: Object ob = new Object(); 这样在程 阅读详情

相关推荐

手把手教你学PCIE--基本概念:PCIe 初始化流程概述

硬件上电复位:系统上电时,所有 PCIe 设备都会进行复位。链路训练(Link Training):主机和设备之间通过链路训练状态机(LTSSM)协商链路参数(如速度和宽度)。配置空间访问:主机通过配置空间读写来发现和配置设备。资源配:主机为设备配内存映射 I/O 区域(BARs)、中断向量等资源。驱动程序加载和高级配置:操作系统加载设备驱动程序,并进行更高级的配置和状态监控。硬件上电复位:确保所有设备处于已知的良好状态。链路训练:主机和设备通过 LTSSM 协商链路速度和宽度。

MHD0815的博客 1342

java对象比较的三种方式

java中提供了关于对象的比较,有以下方式 (1) equals() 这是所有的类都具备的能力。 理解:比较两个对象代表的是不是同一个实际事物 规则:需要重写(覆写)equals方法才能达到 (2)大小的比较有两种: 1. 自然顺序比较 Comparable compareTo() 不是所有的类都具备,需要通过实现Comparable接口来表明该类具备这个能力 理解:比较this和传入的引用指向的对象 2. 外部比较(比较器)Comparator —— 构造一个天平 不需要比较的类具备 Comparabl

WangYaRu 1582

YOLO算法公共场所室内场景吸烟行为目标检测数据集-9442张-标注类别为吸烟

YOLO算法公共场所室内场景吸烟行为目标检测数据集-9442张-标注类别为吸烟

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

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

weixin_42220853的博客 480

java - java中的引用类型大小

java - java中的引用类型大小

u011250186的博客 1187

对象,小对象

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

麦田里的守望者 2735

腾讯大佬详谈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

Java 性能优化之——大对象复用的目标和注意点

对于“大对象”的优化。“大对象”是一个泛化概念,它可能存放在 JVM 中,也可能正在网络上传输,也可能存在于数据库中 为什么大对象会影响我们的应用性能呢? 第一,大对象占用的资源多,垃圾回收器要花一部精力去对它进行回收; 第二,大对象在不同的设备之间交换,会耗费网络流量,以及昂贵的 I/O; 第三,对大对象的解析和处理操作是耗时的,对象职责不聚焦,就会承担额外的性能开销 结合缓存,以及对象的池化操作,加上对一些中间结果的保存,我们能够对大对象进行初步的提速,但这还远远

vincent_wen0766的博客 3885

启动 idea 弹出“Failed to load JVM DLL\bin\server\jvm.dll”错误的解决方法

如果以上都没用,可能是加载的jvm文件是idea中的jvm.dll导致的,直接找到报错的jvm.dll的位置,直接删除该文件即可。如下图所示,我的jdk是64位的,idea默认创建快捷方式是32位,所以需要找到idea的bin目录找到idea64双击打开即可。启动 idea 弹出“Failed to load JVM DLL\bin\server\jvm.dll”错误的解决方法。报错原因:可能是idea中存在jvm.dll,导致idea没加载jdk中的jvm.dll文件。

恒二哥的博客 7925

Failed to load JVM DLL

在环境变量没有配置错误的情况下,很有可能是win10权限的的问题。在启动IDEA时要用管理员权限启动。

m0_67402914的博客 1350

java一个引用多大,java一个对象多大?

最近在看点不知道什么鬼的东西,看得到了一个让我眼前一亮的新东西,感觉很有趣,记录一下;我们怎么知道一个java对象大小呢?比如HashMap map = new HashMap<>();,这个map对象在堆中多大呢?占多少个字节呢?我们可以借助apache的一个类RamUsageEstimator来计算,例如下面这种:org.apache.lucenelucene-core6.6.1...

weixin_32390279的博客 1086

JVM调优总结(二)-一些概念

  Java对象大小     基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。     在Java中,一个空Object对象大小是8byte,这个大小只是保存堆中一个没有任何属性的对象大小。看下面语句: Object ob = new Object();     这样在程序中完成了一个Java对象的生命,但是它所占的空间...

和你在一起 354

JVM 系列(5)吊打面试官:说一下 Java 的四种引用类型

Java Reference 类型是虚拟机垃圾回收机制密切相关的知识点,同时也是面试重要考点之一。一般认为 Java 有四种 Reference(强引用 & 软引用 & 弱引用 & 虚引用),但是其实还有隐藏的第五种 Reference,你知道是什么吗?...

pengxurui的博客 876
上一篇: 一个JAVA 程序员的告白
下一篇: Jive 源代码研究
coollor
博客等级 码龄15年 48粉丝 26原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值