Java中如何查看java对象所占内存大小呢?

书欣 Java经验 发布时间:2023-07-10 17:39:07 阅读数:2667 1
下文笔者讲述java中查看对象占用内存大小的方法及示例分享,如下所示

对象占用内存大小的实现思路

方式1
 使用jdk自带的方法 ObjectSizeCalculator.getObjectSize查看

方式2
 使用org.apache.lucene工具类

方式3
 使用jol工具类 
例:查看java对象的示例
1.使用jdk8自带API
   使用这种jdk8方式时
    Open JDK需要set一下环境变量

	System.setProperty("java.vm.name","Java HotSpot(TM) ");
	System.out.println(ObjectSizeCalculator.getObjectSize(123L));
	 


2.借助org.apache.lucene工具类
  当一个对象有多个属性
   需要计算整个对象的大小时
   可使用org.apache.lucene工具类

2.1 引入maven坐标
<dependency>
	<groupId>org.apache.lucene</groupId>
	<artifactId>lucene-core</artifactId>
	<version>4.0.0</version>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.12.0</version>
</dependency>

2.2 编写业务代码
	Map<String, String> map = new HashMap<>();
	System.out.println("map init value is " + RamUsageEstimator.sizeOf(map));
	for (int i = 0; i < 100; i++) {
		RandomStringUtils.randomAlphanumeric(100);
		map.put(RandomStringUtils.randomAlphanumeric(10), RandomStringUtils.randomAlphanumeric(10));
	}
	System.out.println("map size 100, value is " + RamUsageEstimator.sizeOf(map));
	System.out.println("map size 100, value is " + RamUsageEstimator.humanSizeOf(map));
 
3.借助jol工具类
   需要查看某个对象的详细内存分布
     可借助jol工具类
	 不过这种当对象中内嵌其他对象时
	 只能计算ClassLayout方法中
	   这个object对象所占内存的大小

3.1 导入maven坐标

		<dependency>
            <groupId>org.openjdk.jol</groupId>
            <artifactId>jol-core</artifactId>
            <version>0.9</version>
        </dependency>

3.2 编写测试代码
   System.out.println(ClassLayout.parseInstance(89L).toPrintable());
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202307/16889819727051.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者