iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解JVM中Java对象的大小与引用类型
  • 898
分享到

如何理解JVM中Java对象的大小与引用类型

2023-06-17 19:06:20 898人浏览 薄情痞子
摘要

本篇文章为大家展示了如何理解JVM中Java对象的大小与引用类型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。小编总结了JVM概念中的Java对象的大小,以及三种引用类型的定义与区分。基本数据的类型

本篇文章为大家展示了如何理解JVM中Java对象的大小与引用类型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

小编总结了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。

  • Java新手进阶:细说引用类型

  • Java对象的序列化和反序列化实践

  • Java对象的强、软、弱和虚引用

  • jdk、SDK、JRE、JVM概念详解

  • Java对象类型转换的四个经验

这里需要注意一下基本类型的包装类型的大小。因为这种包装类型已经成为对象了,因此需要把他们作为对象来看待。包装类型的大小至少是12byte(声明一个空Object至少需要的空间),而且12byte没有包含任何有效信息,同时,因为Java对象大小是8的整数倍,因此一个基本类型包装类的大小至少是16byte。这个内存占用是很恐怖的,它是使用基本类型的N倍(N>2),有些类型的内存占用更是夸张(随便想下就知道了)。因此,可能的话应尽量少使用包装类。在JDK5.0以后,因为加入了自动类型装换,因此,Java虚拟机会在存储方面进行相应的优化

引用类型

对象引用类型分为强引用、软引用、弱引用和虚引用。

强引用:就是我们一般声明对象是时虚拟机生成的引用,强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用,则不会被垃圾回收

软引用:软引用一般被做为缓存来使用。与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间;如果剩余内存相对富裕,则不会进行回收。换句话说,虚拟机在发生OutOfMemory时,肯定是没有软引用存在的。

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

强引用不用说,我们系统一般在使用时都是用的强引用。而“软引用”和“弱引用”比较少见。他们一般被作为缓存使用,而且一般是在内存大小比较受限的情况下做为缓存。因为如果内存足够大的话,可以直接使用强引用作为缓存即可,同时可控性更高。因而,他们常见的是被使用在桌面应用系统的缓存。

上述内容就是如何理解JVM中Java对象的大小与引用类型,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何理解JVM中Java对象的大小与引用类型

本文链接: https://www.lsjlt.com/news/292182.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解JVM中Java对象的大小与引用类型
    本篇文章为大家展示了如何理解JVM中Java对象的大小与引用类型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。小编总结了JVM概念中的Java对象的大小,以及三种引用类型的定义与区分。基本数据的类型...
    99+
    2023-06-17
  • 如何解析Java对象引用与JVM自动内存管理
    今天就跟大家聊聊有关如何解析Java对象引用与JVM自动内存管理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。解析Java对象引用与JVM自动内存管理(转)[@more@]对象引用应...
    99+
    2023-06-03
  • 如何处理Java中的大对象
    这篇文章主要介绍“如何处理Java中的大对象”,在日常操作中,相信很多人在如何处理Java中的大对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何处理Java中的大对象”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-30
  • JS中时间对象与引用类型的示例分析
    这篇文章将为大家详细讲解有关JS中时间对象与引用类型的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基础类型有哪些?复杂类型有哪些?有什么特征?基础类型:Stri...
    99+
    2024-04-02
  • Java中的对象如何引用+ReferenceQueue
    Java中的对象如何引用+ReferenceQueue?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。详解Java对象的强、软、弱和虚引用+ReferenceQueue一、强引用...
    99+
    2023-05-31
    java 对象 +referencequeue
  • Java中long类型与Long类型的区别和大小比较详解
    前言最近在学习java,接触到了long类型,发现网上这方面的资料较乱,所以决定总结一下,在Java中我们经常要做一些判断,而对于判断的话,用的最多的便是“>”、“==”、“<”的比较,这里我们进行一个Long类型数据和long...
    99+
    2023-05-30
    java long类型 ava
  • JS的时间对象与引用类型是什么
    这篇文章主要讲解了“JS的时间对象与引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS的时间对象与引用类型是什么”吧!   基础类型:Str...
    99+
    2024-04-02
  • 详解Java中类与对象的关系
    目录前言一、类与对象的介绍二、类的实例化三.类与对象的使用方法3.1对象的初始化3.2内存显示图四.this的使用方法总结前言 已经开始类与对象的讲解了,正式步入了Java的道路了,...
    99+
    2023-05-19
    Java类 Java对象
  • 如何理解C#值类型和引用类型
    本篇内容主要讲解“如何理解C#值类型和引用类型”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解C#值类型和引用类型”吧!C#值类型数据直接在他自身分配到的内存中存储数据,而C#引用类型只是...
    99+
    2023-06-17
  • 如何理解C++中的类和对象
    如何理解C++中的类和对象,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.构造函数1.构造函数的定义:构造函数 是一个 特殊的成员函数,名字与类名相同 , 创...
    99+
    2023-06-25
  • 深入浅析Java中的对象与引用
    今天就跟大家聊聊有关深入浅析Java中的对象与引用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java中的对象和引用详解 在Java中,有一组名词经常一起出现,它们就是“对象和对象...
    99+
    2023-05-31
    java 对象 引用
  • java中类与对象的使用详情
    目录1. 类的定义2.对象的创建和使用如何得到对象如何使用对象3.学生对象-练习4.成员变量的默认值1. 类的定义 面向对象是通过类和对象去描述和代表万千事物对象的,首先我们需要知道...
    99+
    2024-04-02
  • 如何理解java 多态与抽象类
    今天就跟大家聊聊有关如何理解java 多态与抽象类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK...
    99+
    2023-06-25
  • Android中深入学习对象的四种引用类型
    目录一、引用详解1、强引用 StrongReference2、弱引用3、软引用4、虚引用前言: Java中,一切被视为对象,引用则是用来操纵对象的;在JDK1.2就把对象引用分为四...
    99+
    2024-04-02
  • Java中如何区分引用类型和原始类型
    今天就跟大家聊聊有关Java中如何区分引用类型和原始类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java中区分引用类型和原始类型 (转)[@more@]下表列出了原始类型以及它...
    99+
    2023-06-03
  • Java如何应用于大数据处理中的对象管理?
    随着大数据时代的到来,数据的处理已经成为了人们日常工作中不可或缺的一部分。在大数据处理中,对象管理是非常重要的一环。Java作为一种优秀的编程语言,它在大数据处理中的对象管理方面也发挥了重要作用。本文将会详细介绍Java在大数据处理中的对...
    99+
    2023-10-12
    大数据 对象 numpy
  • 如何从对接口的引用中获取对具体类型的引用
    在PHP中,接口是一种定义了一组方法的抽象类。我们可以通过实现接口来保证类具有特定的行为。然而,有时候我们需要从对接口的引用中获取对具体类型的引用。这在某些情况下可能会导致一些困惑。所...
    99+
    2024-02-09
  • 如何处理Python对象中的实时数据类型?
    Python是一种强大的编程语言,它支持多种数据类型,包括整数、浮点数、布尔值、字符串等基本数据类型,还支持列表、元组、字典等复杂数据类型。但是,在某些情况下,我们需要处理实时数据类型,例如时间戳、日期等。本文将介绍如何在Python中处...
    99+
    2023-10-23
    对象 实时 数据类型
  • Python 和 Linux:如何理解数据类型和对象?
    Python 和 Linux 是两个非常流行的开源项目。Python 是一种动态、面向对象、解释型语言,而 Linux 是一种开源的操作系统。虽然 Python 和 Linux 是两个不同的项目,但是它们之间有一个共同的概念:数据类型和对...
    99+
    2023-11-08
    linux 数据类型 对象
  • 怎么解析Java性能优化中的基本类型与引用类型
    这期内容当中小编将会给大家带来有关怎么解析Java性能优化中的基本类型与引用类型,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。★名词定义  先明确一下什么是“基本类型”,什么是“引用类型”。  简单地说,...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作