如何获取一个类的实例所占用的内存空间大小? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 查看一个对象到底需要使用多少内存Runtime runtime = Runtime.getRuntime();long before, after;System.gc();before = runtime.freeMemory();Object newObject = new String();after = runtime.freeMemory();long size = before - after; 就是仅仅System.gc();并不能真正完成垃圾收集,也就是说实际上jvm的内存此时并不是稳定的。 所以,只有当内存不再发生大的变动,或者说已经稳定,我们才可能说垃圾收集已经完成。private static final Runtime s_runtime = Runtime.getRuntime ();private static long usedMemory () { return s_runtime.totalMemory () - s_runtime.freeMemory (); }private static void runGC () throws Exception {long usedMem1 = usedMemory (), usedMem2 = Long.MAX_value;for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++ i) { s_runtime.runFinalization (); s_runtime.gc (); Thread.currentThread ().yield (); usedMem2 = usedMem1; usedMem1 = usedMemory (); } } 顶一下 呵呵你可以参考一下和jvm相关的书 用runtime.totalMemory和runtime.freeMemory不一定能确定实例的占用空间的,因为系统本身的运算和函数调用也需要内存空间的,即runtime.totalMemory也需要内存空间的,不信你可以试试,多进行些运算或多调用几次函数,得到的结果都不一样的可以试试用数组比如Object []obj;obj = new Object[2];System.out.prntln(obj[0]);System.out.prntln(obj[1]);自己看一下内存的分配,两个内存地址之差,应该就是实例占用的空间吧仅仅是推测,没测试过 class文件里面好像定义了大小,改天帮你找找。 java.lang.* 中的lang是哪个单词的缩写? 递归问题 Reentrantlock 跟 Semaphore 有什么区别呢 关于Vector 超菜鸟问题 急!!!!!!!!!!ServerSocket问题 Arrays.sort(String[] a, Comparator<? super String> c)实现手法是什么? 新手问题 请问怎么样使另一个窗口从最小化变为NORMAL? 如何实现窗口中拖放. 在性能测试中,tomcat出现out of memory for 循环中的i++ 和 ++i有什么区别?
long before, after;
System.gc();before = runtime.freeMemory();
Object newObject = new String();
after = runtime.freeMemory();long size = before - after;
所以,只有当内存不再发生大的变动,或者说已经稳定,我们才可能说垃圾收集已经完成。
private static final Runtime s_runtime =
Runtime.getRuntime ();
private static long usedMemory ()
{
return s_runtime.totalMemory () -
s_runtime.freeMemory ();
}
private static void runGC () throws Exception
{
long usedMem1 = usedMemory (), usedMem2 = Long.MAX_value;
for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++ i)
{
s_runtime.runFinalization ();
s_runtime.gc ();
Thread.currentThread ().yield ();
usedMem2 = usedMem1;
usedMem1 = usedMemory ();
}
}
你可以参考一下和jvm相关的书
可以试试用数组
比如
Object []obj;
obj = new Object[2];
System.out.prntln(obj[0]);
System.out.prntln(obj[1]);
自己看一下内存的分配,两个内存地址之差,应该就是实例占用的空间吧
仅仅是推测,没测试过