返回顶部
首页 > 资讯 > 精选 >java中对象占用内存情况
  • 593
分享到

java中对象占用内存情况

2023-06-14 19:06:13 593人浏览 独家记忆
摘要

本篇文章为大家展示了java中对象占用内存情况,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:

本篇文章为大家展示了java中对象占用内存情况,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Java有哪些集合

Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3、Set集合:不可重复;4、Map映射:无序,键唯一,值不唯一。

内存公式:Java对象的内存布 = 对象头(Header) + 实例数据(Instance Data) + 补齐填充(Padding)。

补齐填充:Java对象占用空间是8字节对齐的,即所有Java对象占用bytes数必须是8的倍数

Shallow Size

对象自身占用的内存大小,不包括它引用的对象。
针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
针对数组类型的对象,它的大小是数组元素对象的大小总和。

Retained Size

Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

基本数据类型占用

类型占用空间
boolean、byte1byte
short、char2byte
int、float4byte
long、double8byte

接下来用JProfiler验证:

新建一个空对象,观察空对象内存占用

public class TestObject {}

对象占用内存 16b,如图

java中对象占用内存情况

结论:一般自建空对象占用内存 16b,16 = 12(Header) + 4(Padding)

在TestObj中新增一个 int 属性,观察对象内存占用

public class TestObj {    private int i;}

对象占用内存 16b,如图

java中对象占用内存情况

结论:int 占用 4b, 16 = 12(Header) + 4(int)

在TestObj中新增一个 long 属性,观察对象内存占用

public class TestObj {    private long i;}

对象占用内存 24b,如图

java中对象占用内存情况

结论:long 占用 8b, 24 = 12(Header) + 8(long) + 4(Padding)

其余基本类型可以参照以上自行验证,原理一样

包装类型占用

包装类(Boolean/Byte/Short/Character/Integer/Long/Double/Float)占用内存的大小 = 对象头大小 + 底层基础数据类型的大小

包装类和其他引用类一样,会产生一个引用(reference)

类型占用空间
Boolean、Byte16byte
Short、Char16byte
Integer、Float16byte
Long、Double24byte

在TestObj中新增一个 Integer 属性,观察对象内存占用

public class TestObj {   private Integer  i =128;}

对象占用内存 32b,如图

java中对象占用内存情况

结论:Integer 占用 16b, 32 = 12 (Header) + 16(Integer) + 4(reference)

特别的:-128~127 在常量池,只占用 4b,且不产生引用(reference)

在TestObj中新增一个 Long 属性,观察对象内存占用

public class TestObj {   private Long  l = new Long(1);}

对象占用内存 40b,如图

java中对象占用内存情况

结论:Long 占用 24b, 40 = 12 (Header) + 24(Long) + 4(reference)

其余包装类型可以参照以上自行验证,原理一样

基本类型数组占用

64位机器上,数组对象的对象头占用24 bytes,启用压缩后占用16字节。比普通对象占用内存多是因为需要额外的空间存储数组的长度(普通16b-12b)。

对象数组本身的大小=数组对象头 + length * 存放单个元素大小

在TestObj中新增一个 char[] 属性,观察对象内存占用

public class TestObj {   private char[] c = {'a','b','c'};}

char[] c占用内存 40b,如图

java中对象占用内存情况

结论:char[3] 占用 24b, 24 = 40 - 16,24 = 16(Header) + 3 * 2(char) + 2(Padding)

封装类型数组占用

封装类型数组比基本类型的数组,需要多管理元素的引用

对象数组本身的大小=数组对象头+length * 引用指针大小 + length * 存放单个元素大小

在TestObj中新增一个 Integer[] 属性,观察对象内存占用

public class TestObj {    private Integer[] i = {128,129,130};}

Integer[] i占用内存 80b,如图

java中对象占用内存情况

结论:Integer[3] 占用 80b, 80 = 96 - 16, 80 = 16(Header) + 3 * 4 (reference)+ 3 * 16(Integer) +4(padding)

String占用内存

在TestObj中新增一个空 String 属性,观察对象内存占用

public class TestObj {    private String s = new String("");}

对象占用内存 40b,如图

java中对象占用内存情况

结论:String 本身占用 24b, 24 = 40 -16也就是说空""也需要16b

注意:这里为什么要写String s = new String("")?请自己思考,不写会怎么样?

答:如果写成String s = “”,是不会再堆中开辟内存的,也就看不到String占用的空间,你看到的将会是下面的,至于为什么,都是因为final

java中对象占用内存情况

上述内容就是java中对象占用内存情况,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网精选频道。

--结束END--

本文标题: java中对象占用内存情况

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

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

猜你喜欢
  • java中对象占用内存情况
    本篇文章为大家展示了java中对象占用内存情况,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:...
    99+
    2023-06-14
  • java各种类型对象占用内存情况分析
    目录前言基本数据类型占用包装类型占用基本类型数组占用封装类型数组占用String占用内存前言 其实一般的程序猿根本不用了解这么深,只有当你到了一定层次,需要了解jvm内部运行机制,或...
    99+
    2024-04-02
  • python怎么查看内存占用情况
    可以使用Python的内置模块`sys`来查看内存占用情况。1. 使用`sys.getsizeof()`函数来获取对象占用的内存大小...
    99+
    2023-09-15
    python
  • linux怎么查看内存占用情况
    在Linux上查看内存占用情况可以使用以下命令: free命令:用于查看系统内存的使用情况。 free -h 该命令将以可读的方...
    99+
    2023-10-24
    linux
  • win11如何查看内存占用情况
    这篇文章主要介绍了win11如何查看内存占用情况的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win11如何查看内存占用情况文章都会有所收获,下面我们一起来看看吧。方法一:首先右键“windows徽标”,打开“...
    99+
    2023-07-02
  • mysql怎么查看内存占用情况
    要查看MySQL内存占用情况,可以使用以下几种方法: 使用MySQL自带的performance_schema插件:通过perfo...
    99+
    2024-04-09
    mysql
  • centos怎么查看内存占用情况
    在CentOS系统中,可以使用以下命令来查看内存占用情况: 使用 free 命令查看系统内存使用情况: free -h 使用...
    99+
    2024-04-02
  • Linux中怎么用smem查看内存占用情况
    小编给大家分享一下Linux中怎么用smem查看内存占用情况,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!无论是作为系统管理员,还是作为使用桌面版Linux的简单...
    99+
    2023-06-16
  • Python利用memory_profiler查看内存占用情况
    目录简介安装使用方法1、通过装饰器运行2、通过命令行运行补充简介 memory_profiler是第三方模块,用于监视进程的内存消耗以及python程序内存消耗的逐行分析。它是一个纯...
    99+
    2024-04-02
  • python如何检查对象的内存使用情况
    这篇文章主要介绍了python如何检查对象的内存使用情况,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 检查对象的内存使用情况。在 Python 2.7 中,32 ...
    99+
    2023-06-27
  • python怎么检查对象的内存使用情况
    小编给大家分享一下python怎么检查对象的内存使用情况,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!检查对象的内存使用情况使用sys.getsizeof()可以检查对象的内存使用情况:import sys&nb...
    99+
    2023-06-27
  • Python如何查看程序内存占用情况
    目录查看程序内存占用情况python查看内存使用查看程序内存占用情况 flyfishpsutil 这里用在查看内存占用情况memory_profiler输出每一行代码增减的内存 安装...
    99+
    2024-04-02
  • Linux系统内存、磁盘占用情况查询
    #查看磁盘占用空间 df -h 显示所有磁盘的使用情况,包括磁盘的总大小、已用空间、可用空间和文件系统类型等。 #查看运行内存的占用情况 free -m #查看进程 1、ps 命令:该命令用于列出当前用户的进程。以下是几个常用的选项: ...
    99+
    2023-09-08
    linux 运维 服务器
  • Python怎么查看程序内存占用情况
    今天小编给大家分享一下Python怎么查看程序内存占用情况的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。查看程序内存占用情况...
    99+
    2023-06-30
  • 浅谈Python 对象内存占用
    一切皆是对象 在 Python 一切皆是对象,包括所有类型的常量与变量,整型,布尔型,甚至函数。 参见stackoverflow上的一个问题 Is everything an object in pytho...
    99+
    2022-06-04
    浅谈 对象 内存
  • 怎么在Linux中可视化显示内存占用情况
    本篇内容主要讲解“怎么在Linux中可视化显示内存占用情况”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Linux中可视化显示内存占用情况”吧!物理内存不足对Linux桌面系统和服务器系统...
    99+
    2023-06-13
  • 云服务器内存占用情况怎么查看
    要查看云服务器的内存占用情况,可以使用以下方法:1. 使用命令行工具:登录到云服务器的命令行界面,使用命令`free -h`可以查看...
    99+
    2023-09-21
    云服务器
  • Linux下怎么查看CPU和内存占用情况
    这篇文章将为大家详细讲解有关Linux下怎么查看CPU和内存占用情况,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。top命令  top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源...
    99+
    2023-06-28
  • 阿里云服务器内存占用情况分析
    简介:随着云计算技术的快速发展,越来越多的企业选择使用阿里云服务器来托管他们的业务。然而,由于服务器资源的限制,内存占用问题一直是用户关注的焦点。本文将从阿里云服务器内存占用情况的角度出发,对服务器内存占用情况进行分析,并给出一些解决方案。...
    99+
    2023-12-30
    阿里 内存 情况
  • 怎么远程检测Linux服务器中内存占用情况
    本篇内容介绍了“怎么远程检测Linux服务器中内存占用情况”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!准备远程服务器在 Debain/Ub...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作