我是靠谱客的博主 无私蜻蜓,最近开发中收集的这篇文章主要介绍UseCompressedOops 压缩指针、JOL内存分布工具学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JVM知识专栏JVM-火种,持续更新,喜欢请关注???? 

目录

为什么需要压缩

压缩命令

验证

项目调用

命令行查看

数据验证


为什么需要压缩

通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。对于那些将要从32位平台移植到64位的应用来说(假如编译和运行环境同为32或同为64不需要手动开启),平白无辜多了1/2的内存占用,这是开发者不愿意看到的。幸运的是,从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。

压缩命令

在jvm参数中加入 -XX:+UseCompressedOops

验证

使用Oracle提供的实时内存布局工具jol进行查看实时内存,jol工具有两种使用方式,第一种是项目引入jar包,调用api打印。第二种是通过命令行查看。

项目调用

pom中加入maven配置,手动获取地址maven

<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version></version>
</dependency>
public static void main(String[] args) {
    int i = 1;
    //查看对象内部信息
    System.out.println(ClassLayout.parseInstance(i).toPrintable());
    //查看对象外部信息
    System.out.println(GraphLayout.parseInstance(i).toPrintable());
    //获取对象总大小
    System.out.println("size : " + GraphLayout.parseInstance(i).totalSize());
}

可以看出总共占用16字节,其中对象头信息占用了12字节,int对象占用了4个字节。java基本类型的内存占用情况:

命令行查看

先下载jar包,jol-cli-0.9-full.jar,注意:和项目配置的jar包不同。命令切到jar所在包下,几种常见命令如下

获取对象内部信息,即对象内的字段布局、标题信息、字段值、关于对齐丢失的数据

java -jar jol-cli/target/jol-cli.jar internals java.util.HashMa

获取外部对象,即从实例中可以访问的对象、它们的地址、通过可达性图的路径等

java -jar jol-cli/target/jol-cli.jar externals java.util.PriorityQueue

获取不同虚拟机模式下的估计对象布局

java -jar jol-cli/target/jol-cli.jar estimates java.math.BigInteger

在不同的VM模式下使用堆转储并计算感知的内存占用

java -jar jol-cli/target/jol-cli.jar heapdump heapdump.hprof

数据验证

对于那些将要从32位平台移植到64位的应用来说会有1.5倍内存占用(假如编译和运行环境同为32或同为64不需要手动开启),我的编译和运行环境都是64位,所以不需要手动开启压缩。只能试下手动关闭压缩来验证内存占用了,使用命令-XX:-UseCompressedOops,打印结果如下

同样的代码占用内存24字节,比开启压缩多了8字节,多了4字节的对象头和4字节对齐丢失数据,印证了不做指针压缩时内存消耗是正常情况的1.5倍。

参考资料

openjdk.jol

JVM优化之压缩普通对象指针(CompressedOops)

HotSpot JVM 中的对象指针压缩

一个int占多少个字节?


 

最后

以上就是无私蜻蜓为你收集整理的UseCompressedOops 压缩指针、JOL内存分布工具学习的全部内容,希望文章能够帮你解决UseCompressedOops 压缩指针、JOL内存分布工具学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部