System.out.println("--- Memory Usage:"); /*打印一行字符串---Memory Usage*/

Runtime rt=Runtime.getRuntime( ); //获得系统的Runtime对象rt

System.out.println("Total Memory= " + rt.totalMemory( )+//打印总内存大小

" Free Memory = "+rt.freeMemory( )); //打印空闲内存大小

基类:

public abstract class SizeOf {

private final Runtime s_runtime = Runtime.getRuntime();

/**

*

* 子类负责覆盖该方法以提供被测试类的实例

*

* @return 被测试类的实例

*/

protected abstract Object newInstance();

/**

*

* 计算实例的大小(字节数)

*

* @return 实例所占内存的字节数

* @throws Exception

*/

public int size() throws Exception {

// 垃圾回收

runGC();

// 提供尽可能多(10万)的实例以使计算结果更精确

final int count = 100000;

Object[] objects = new Object[count];

// 实例化前堆已使用大小

long heap1 = usedMemory();

// 多实例化一个对象

for (int i = -1; i < count; ++i) {

Object object = null;

// 实例化对象

object = newInstance();

if (i >= 0) {

objects[i] = object;

} else {

// 释放第一个对象

object = null;

// 垃圾收集

runGC();

// 实例化之前堆已使用大小

heap1 = usedMemory();

}

}

runGC();

// 实例化之后堆已使用大小

long heap2 = usedMemory();

final int size = Math.round(((float) (heap2 - heap1)) / count);

// 释放内存

for (int i = 0; i < count; ++i) {

objects[i] = null;

}

objects = null;

return size;

}

private void runGC() throws Exception {

// 执行多次以使内存收集更有效

for (int r = 0; r < 4; ++r) {

_runGC();

}

}

private void _runGC() throws Exception {

long usedMem1 = usedMemory();

long 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();

}

}

/**

*

* 堆中已使用内存

*

* @return 堆中已使用内存

*/

private long usedMemory() {

return s_runtime.totalMemory() - s_runtime.freeMemory();

}

}

子类:

public class SizeOfObject extends SizeOf {

@Override

protected Object newInstance() {

return new Object();

}

public static void main(String[] args) throws Exception {

SizeOf sizeOf = new SizeOfObject();

System.out.println("所占内存:" + sizeOf.size() + "字节");

}

}

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

利用序列化(Serializable)计算对象的大小

下面代码可以计算session的大小:

将session中的所有对象输出到文件中,文件的大小就是对象的大小.

try {

FileOutputStream f = new FileOutputStream("c:/sessionFiles");

ObjectOutputStream s = new ObjectOutputStream(f);

s.writeObject("session:");

HttpSession session = request.getSession(false);

Enumeration names = session.getAttributeNames();

while(names.hasMoreElements()){

s.writeObject(session.getAttribute((String) names.nextElement()));

}

s.flush();

s.close();

f.close();

} catch (Exception e) {

e.printStackTrace();

}

也可以看看这个

java对象占内存大小

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

Java计算一个对象所占内存大小_Java程序计算各种对象所占内存的大小的方法相关推荐

  1. java 图片 内存溢出_Java修改图片尺寸,总是报内存溢出怎么解决?

    项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图. 例如:原图8268x6201,需要压缩成400x300. 我现在的方法:将图片整个读 ...

  2. java 内存类_Java学习——类的生命周期和内存

    常识是本能,有足够的常识便是天才.--肖伯纳 一.类的生命周期 类的生命周期:1.加载:将二进制流加载进来.class 2.连接: 验证:确保加载进来的数据不会损害虚拟机 准备:为类变量分配内存,附默 ...

  3. java 字符串排列组合_Java 程序计算列出字符串的所有排列组合

    Java 程序计算列出字符串的所有排列组合 在此示例中,我们将学习计算Java中字符串的所有排列组合. 要理解此示例,您应该了解以下Java编程主题: 字符串的排列是指可以通过互换字符串字符的位置来形 ...

  4. java 求商_Java程序计算商和余数

    Java程序计算商和余数 在该程序中,您将学习从Java中给定的被除数和除数计算商和余数. 示例:计算商和余数 public class QuotientRemainder { public stat ...

  5. Java教程交集_Java 程序计算两个集合的交集

    Java 程序计算两个集合的交集 在此示例中,我们将学习计算Java中两个集合的交集. 要理解此示例,您应该了解以下Java编程主题: 示例1:计算两个集合的交集 示例import java.util ...

  6. 分页池内存持续增长_Java技术学习之对虚拟机(JVM)内存模型的分析

    JVM会将Java进程所管理的内存划分为若干不同的数据区域,这些区域有各自的用途.创建/销毁时间. JVM内存数据:栈管运行,堆管存储 第一章 线程私有区域 线程私有数据区域生命周期与线程相同, 依赖 ...

  7. arthas 排查内存溢出_Java程序线上故障排查

    这篇文章是在公司做了不少的线上Java服务故障排查和优化之后的一个总结,可以作为一个工具清单,在分析问题的时候需要有整体思路:全局观,先从系统层面入手,大致定位方向(内存,cpu,磁盘,网络),然后再 ...

  8. java引用静态方法会实例化类吗_Java系列之:看似简单的问题 静态方法和实例化方法的区别...

    今天看书时一直没真正弄明白静态方法和实例方法的区别,就在网上搜索,找到一篇很好的文章,和大家分享一下: 这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方 ...

  9. java中怎么让一个数倒转_java 输入一个数字,反转输出这个数字的值(实现方法)

    java 输入一个数字,反转输出这个数字的值(实现方法) 如下所示: package 第四天; import java.util.Scanner; public class 数字反转 { public ...

最新文章

  1. 腾讯裁撤中层干部,拥抱年轻人
  2. EF架构~为IEnumerable接口添加增删查等操作,原因是IEnumerable导航属性更放心
  3. python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. JS特效——鼠标跟随特效——动态背景线条跟随鼠标移动
  5. 企业dns 服务器的搭建
  6. iOS开发--地图与定位
  7. sql相同顺序法和一次封锁法_数学专题 | Ep01 隔板法的妙用
  8. ElasticSearch之 控制相关度原理讲解
  9. java 利用Future异步获取多线程任务结果
  10. 通过批处理来运行python程序
  11. [原创]性能测试工程师试题
  12. C/C++[指针/引用]
  13. win安装appium
  14. 串口IEC103协议
  15. latex数学符号加粗_LaTex数学公式符号整理
  16. java计算base64图片大小
  17. 网站搭建:从零搭建个人网站教程(10)
  18. python获取北京时间_python获取标准北京时间的方法
  19. 电影《海贼王:红发歌姬》观后感
  20. 处理Nginx返回octet-stream数据流的配置

热门文章

  1. python基础30个常用代码大全-Python3列表内置方法大全及示例代码小结
  2. 普通人有必要学python-风变编程:普通人学Python有意义吗?
  3. python3.5怎么安装pip-python3.5.2安装pip管理工具
  4. 电脑python下载-Python3.9官方下载
  5. python怎么检查错误-错误处理
  6. python基础教程第四版-python基础教程第4版pdf
  7. 以下哪个不是python中的关键字-以下哪个选项不是Python语言的保留字
  8. python人脸识别毕业设计-基于Python的人脸识别系统研究.docx
  9. python下载教程1001python下载教程-1001种玩法 | Python 学习指南资源
  10. python基础知识ppt-python入门ppt下载