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