`

JOL:查看Java 对象布局、大小工具

阅读更多

 

编写不易,转载请注明(http://shihlei.iteye.com/blog/2407693)!

 

一 概述

最近需求,打算再内存缓存数据,数据量130000万并且还会增加,了解这些数据占用空间的大小是很常见的监控需要。

常规方式,人工可以按照Java基础数据类型大小及内容大小估算出缓存对象的大概堆占用,但是麻烦还不准。

OpenJDK,提供了JOL包,可以帮我们在运行时计算某个对象的大小,是非常好的工具

 

官网:http://openjdk.java.net/projects/code-tools/jol/

定位:分析对象在JVM的大小和分布

依赖:

 

<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>put-the-version-here</version>
</dependency>

 

二 使用

 1)准备一个map,用于测试JOL Api的结果

static Object generate() {
        Map<String, Object> map = new HashMap<>();
        map.put("a", new Integer(1));
        map.put("b", "b");
        map.put("c", new Date());

        for (int i = 0; i < 10; i++) {
            map.put(String.valueOf(i), String.valueOf(i));
        }
        return map;
    }

 

 2)常用的几个方法

(1)查看对象内部信息: ClassLayout.parseInstance(obj).toPrintable()

 

 

(2)查看对象外部信息:包括引用的对象:GraphLayout.parseInstance(obj).toPrintable()



 

(3)查看对象占用空间总大小:GraphLayout.parseInstance(obj).totalSize()

 

三 完整Demo

 

package x.demo.java;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.info.GraphLayout;

public class JolDemo {

    static Object generate() {
        Map<String, Object> map = new HashMap<>();
        map.put("a", new Integer(1));
        map.put("b", "b");
        map.put("c", new Date());

        for (int i = 0; i < 10; i++) {
            map.put(String.valueOf(i), String.valueOf(i));
        }
        return map;
    }

    static void print(String message) {
        System.out.println(message);
        System.out.println("-------------------------");
    }

    public static void main(String[] args) {
        Object obj = generate();

        //查看对象内部信息
        print(ClassLayout.parseInstance(obj).toPrintable());

        //查看对象外部信息
        print(GraphLayout.parseInstance(obj).toPrintable());

        //获取对象总大小
        print("size : " + GraphLayout.parseInstance(obj).totalSize());
    }
}

 

 

  • 大小: 106.2 KB
  • 大小: 273.2 KB
  • 大小: 144.2 KB
分享到:
评论
1 楼 1927105 2018-08-17  
赞挺实用的

相关推荐

    JOL(JAVA OBJECT LAYOUT)工具0.9.zip

    查看java对象内部构造

    jol-core-0.9.jar

    openjdk的一个工具,他可以很方便的让我看到一个对象的布局

    Java对象布局(JOL)实现过程解析

    主要介绍了Java对象布局(JOL)实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    jol:졸작

    乔尔 졸작

    jol-cli-0.9-full.jar

    可以查阅java虚拟机中对象的内存分布,是OpenJDK的Code Tools项目中的工具,具体可以通过如下两套指令来实现: $ java -jar /path/to/jol-cli-0.9-full.jar internals java.util.HashMap $ java -jar /path/to/jol-...

    jol-core-0.10.jar

    对jol-core-0.10.jar进行拓展,打印二进制头信息Mark Word 用法: ClassLayout.parseInstance(对象).toPrintableSimple(true) toPrintableSimple():true 表示二进值,false 表示 十六进制

    jol-cli-0.4-full.jar

    jol-cli-0.4-full.jar JOL

    jol-cli-0.9-全部jar包.rar

    包含jol-cli的全部jar包: jol-cli-0.9-full.jar jol-cli-0.9-javadoc.jar jol-cli-0.9-sources.jar jol-cli-0.9.jar

    java8源码-small-frame-demo:小框架-demo

    对象大小 java-op-db connection-pool-test 连接池测试,包含高性能HikariCP,提供强大的监控和扩展功能druid MyBatis-demo MyBatis 测试 http-client-demo retrofit-test resume-parse Apache httpclient 测试 ...

    Java synchronized锁升级jol过程详解

    主要介绍了Java synchronized锁升级jol过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    对象内存分布

    主要讲述了c++对象内存布局情况!

    word源码java-concurrency:并发

    word源码java concurrency 并发 &lt;groupId&gt;org.openjdk.jol &lt;artifactId&gt;jol-core &lt;version&gt;0.8 out.println(ClassLayout.parseInstance(student).toPrintable()); -XX:+UseBiasedLocking ...关于java对象头的一

    jwplayer视频网页免费播放器

    jwplayerjwplayerjwplayerjwplayerjwplayerjwplayerjwplayerjwplayer

    synchronized锁原理分析(二、锁的膨胀过程)

    继续承接上一篇博客一、从Java对象头看synchronized锁的状态 先通过几个案例,从结果直观的展示锁是如何膨胀的 最后将锁的膨胀过程通过一张流程图展示出来 案例1(无锁,不可偏向状态) import org.openjdk.jol....

    AjtoAkaszto2_ajtoakaszto_

    ajtot jol beakaszto akaszto

    映美JolimarkLQ-720K打印机驱动程序

    映美Jolimark LQ-720K打印机驱动程序是一款可以有效解决映美Jolimark LQ-720K打印机在使用过程中出现的一些问题的驱动工具,本站提供了映美LQ-720K打印机驱动下载地址,需要的朋友们可以前来下载使用。 Jolimark LQ...

    docs_ajtoakaszto_

    ajtot kivaloan jol beakaszto akaszto

    AjtoAkaszto5_ajtoakaszto_

    akaszto ajto ezzel ajtot jol beakaszt

    jaeger-core-0.16.0.jar

    用于OpenTracing API的Jaeger Java绑定 com.uber.jaeger/jaeger-core/0.16.0/jaeger-core-0.16.0.jar

Global site tag (gtag.js) - Google Analytics