菜鸟笔记
提升您的技术认知

如何计算一个对象的大小-ag真人游戏

 jdk版本1.8

        
            org.apache.lucene
            lucene-core
            8.11.2
        

堆内存占用大小的工具类:ramusageestimator

//计算指定对象及其引用树上的所有对象的综合大小,单位字节

long ramusageestimator.sizeof(object obj)

//计算指定对象本身在堆空间的大小,单位字节

long ramusageestimator.shallowsizeof(object obj)

//计算指定对象及其引用树上的所有对象的综合大小,返回可读的结果,如:2kb

string ramusageestimator.humansizeof(object obj)

点评:使用该第三方工具比较简单直接,主要依靠jvm本身环境、参数及cpu架构计算头信息,再依据数据类型的标准计算实例字段大小,计算速度很快,另外使用较方便。如果非要说这种方式有什么缺点的话,那就是这种方式计算所得的对象头大小是基于jvm声明规范的,并不是通过运行时内存地址计算而得,存在与实际大小不符的这种可能性。

package com.test;
import jdk.nashorn.internal.ir.debug.objectsizecalculator;
import org.apache.lucene.util.ramusageestimator;
import java.nio.charset.standardcharsets;
import java.util.arraylist;
import java.util.hashmap;
import java.util.list;
import java.util.map;
public class test7 {
    public static void main(string[] args) {
        string s = "";
        for (int i = 0; i < 20480; i  ) {
            s  = "0";
        }
        system.out.println("实际大小:"   s.getbytes(standardcharsets.utf_8).length   " byte");
        system.out.println("占用内存:"   ramusageestimator.sizeof(s)   " byte");
        system.out.println("占用内存:"   ramusageestimator.sizeofobject(s)   " byte");
        system.out.println("占用内存:"   objectsizecalculator.getobjectsize(s)   " byte");//jdk自带工具
        system.out.println();
        map map = new hashmap<>();
        for (int i = 0; i < 1024; i  ) {
            map.put(i, "0");
        }
        list
网站地图