java 查看内存占用大小

简介: 引用:http://www.iteye.com/problems/41631 Java程序计算各种对象所占内存的大小的方法。 基类:  Java代码   public abstract class SizeOf {          private final Runtime s_runtime = Runtime.

引用:http://www.iteye.com/problems/41631

Java程序计算各种对象所占内存的大小的方法。 


基类: 

Java代码 
  收藏代码
  1. public abstract class SizeOf {  
  2.   
  3.     private final Runtime s_runtime = Runtime.getRuntime();  
  4.   
  5.     /** 
  6.      * 
  7.      * 子类负责覆盖该方法以提供被测试类的实例 
  8.      * 
  9.      * @return 被测试类的实例 
  10.      */  
  11.     protected abstract Object newInstance();  
  12.   
  13.     /** 
  14.      * 
  15.      * 计算实例的大小(字节数) 
  16.      * 
  17.      * @return 实例所占内存的字节数 
  18.      * @throws Exception 
  19.      */  
  20.     public int size() throws Exception {  
  21.   
  22.         // 垃圾回收  
  23.         runGC();  
  24.   
  25.         // 提供尽可能多(10万)的实例以使计算结果更精确  
  26.         final int count = 100000;  
  27.         Object[] objects = new Object[count];  
  28.   
  29.         // 实例化前堆已使用大小  
  30.         long heap1 = usedMemory();  
  31.         // 多实例化一个对象  
  32.         for (int i = -1; i < count; ++i) {  
  33.             Object object = null;  
  34.   
  35.             // 实例化对象  
  36.             object = newInstance();  
  37.   
  38.             if (i >= 0) {  
  39.                 objects[i] = object;  
  40.             } else {  
  41.                 // 释放第一个对象  
  42.                 object = null;  
  43.                 // 垃圾收集  
  44.                 runGC();  
  45.                 // 实例化之前堆已使用大小  
  46.                 heap1 = usedMemory();  
  47.             }  
  48.         }  
  49.   
  50.         runGC();  
  51.         // 实例化之后堆已使用大小  
  52.         long heap2 = usedMemory();  
  53.         final int size = Math.round(((float) (heap2 - heap1)) / count);  
  54.   
  55.         // 释放内存  
  56.         for (int i = 0; i < count; ++i) {  
  57.             objects[i] = null;  
  58.         }  
  59.         objects = null;  
  60.         return size;  
  61.     }  
  62.   
  63.     private void runGC() throws Exception {  
  64.         // 执行多次以使内存收集更有效  
  65.         for (int r = 0; r < 4; ++r) {  
  66.             _runGC();  
  67.         }  
  68.     }  
  69.   
  70.     private void _runGC() throws Exception {  
  71.         long usedMem1 = usedMemory();  
  72.         long usedMem2 = Long.MAX_VALUE;  
  73.         for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++i) {  
  74.             s_runtime.runFinalization();  
  75.             s_runtime.gc();  
  76.             Thread.currentThread().yield();  
  77.             usedMem2 = usedMem1;  
  78.             usedMem1 = usedMemory();  
  79.         }  
  80.     }  
  81.   
  82.     /** 
  83.      * 
  84.      * 堆中已使用内存 
  85.      * 
  86.      * @return 堆中已使用内存 
  87.      */  
  88.     private long usedMemory() {  
  89.         return s_runtime.totalMemory() - s_runtime.freeMemory();  
  90.     }  
  91. }  



子类: 

Java代码 
  收藏代码
  1. public class SizeOfObject extends SizeOf {  
  2.   
  3.     @Override  
  4.     protected Object newInstance() {  
  5.         return new Object();  
  6.     }  
  7.   
  8.     public static void main(String[] args) throws Exception {  
  9.         SizeOf sizeOf = new SizeOfObject();  
  10.         System.out.println("所占内存:" + sizeOf.size() + "字节");  
  11.     }  
  12. }  




输出为:所占内存:8字节 

利用序列化(Serializable)计算对象的大小 
下面代码可以计算session的大小: 
将session中的所有对象输出到文件中,文件的大小就是对象的大小. 

Java代码 
  收藏代码
  1. try {  
  2.     FileOutputStream f = new FileOutputStream("c:/sessionFiles");  
  3.     ObjectOutputStream s = new ObjectOutputStream(f);  
  4.     s.writeObject("session:");  
  5.     HttpSession session = request.getSession(false);  
  6.     Enumeration names = session.getAttributeNames();  
  7.     while(names.hasMoreElements()){  
  8.         s.writeObject(session.getAttribute((String) names.nextElement()));  
  9.     }  
  10.     s.flush();  
  11.     s.close();  
  12.     f.close();  
  13. catch (Exception e) {  
  14.     e.printStackTrace();  
  15. }  



也可以看看这个 


java对象占内存大小 

http://329937021.iteye.com/blog/547779 

相关文章
|
4月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
143 0
|
3月前
|
Java 物联网 数据处理
Java Solon v3.2.0 史上最强性能优化版本发布 并发能力提升 700% 内存占用节省 50%
Java Solon v3.2.0 是一款性能卓越的后端开发框架,新版本并发性能提升700%,内存占用节省50%。本文将从核心特性(如事件驱动模型与内存优化)、技术方案示例(Web应用搭建与数据库集成)到实际应用案例(电商平台与物联网平台)全面解析其优势与使用方法。通过简单代码示例和真实场景展示,帮助开发者快速掌握并应用于项目中,大幅提升系统性能与资源利用率。
108 6
Java Solon v3.2.0 史上最强性能优化版本发布 并发能力提升 700% 内存占用节省 50%
|
3月前
|
消息中间件 缓存 固态存储
说一说 Java 中的内存映射(mmap)
我是小假 期待与你的下一次相遇 ~
144 1
说一说 Java 中的内存映射(mmap)
|
3月前
|
缓存 监控 Cloud Native
Java Solon v3.2.0 高并发与低内存实战指南之解决方案优化
本文深入解析了Java Solon v3.2.0框架的实战应用,聚焦高并发与低内存消耗场景。通过响应式编程、云原生支持、内存优化等特性,结合API网关、数据库操作及分布式缓存实例,展示其在秒杀系统中的性能优势。文章还提供了Docker部署、监控方案及实际效果数据,助力开发者构建高效稳定的应用系统。代码示例详尽,适合希望提升系统性能的Java开发者参考。
157 4
Java Solon v3.2.0 高并发与低内存实战指南之解决方案优化
|
2月前
|
SQL 缓存 安全
深度理解 Java 内存模型:从并发基石到实践应用
本文深入解析 Java 内存模型(JMM),涵盖其在并发编程中的核心作用与实践应用。内容包括 JMM 解决的可见性、原子性和有序性问题,线程与内存的交互机制,volatile、synchronized 和 happens-before 等关键机制的使用,以及在单例模式、线程通信等场景中的实战案例。同时,还介绍了常见并发 Bug 的排查与解决方案,帮助开发者写出高效、线程安全的 Java 程序。
140 0
|
2月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
|
3月前
|
存储 Java
说一说 JAVA 内存模型与线程
我是小假 期待与你的下一次相遇 ~
|
3月前
|
存储 监控 Java
Java内存管理集合框架篇最佳实践技巧
本文深入探讨Java 17+时代集合框架的内存管理最佳实践,涵盖不可变集合、Stream API结合、并行处理等现代特性。通过实战案例展示大数据集优化效果,如分批处理与内存映射文件的应用。同时介绍VisualVM、jcmd等内存分析工具的使用方法,总结六大集合内存优化原则,助你打造高性能Java应用。附代码资源链接供参考。
110 3
|
6月前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
308 29
JVM简介—1.Java内存区域

热门文章

最新文章