请问用Java代码,怎样测试一段程序占用了多少内存?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问用Java代码,怎样测试一段程序占用了多少内存?相关的知识,希望对你有一定的参考价值。
比如说有个下载pdf的功能,我要测试一下下载pdf这个功能到底占用多少内存,用程序代码怎样测试?组长给我的想法是,要对下载pdf功能进行内存监控,如果即将内存溢出则跳转到错误页面。
你可以先用内存监控工具,进行监控,看看这个功能到底用多少内存。如果不多,其实都不需要实现你说的代码监控的。如果你要使用代码监控,你可是使用Runtime类的几个属性,MaxMemory、FreeMemory、TotalMemory。然后实现个线程,在下载pdf功能前开启线程,然后完毕时关闭线程,如果内存即将溢出(设定个阈值,比如说15%),就报错,跳转到错误页面。 参考技术A 你就直接打开任务管理器,查看java.exe的进程,内存占用如果一直增加,达不到一个稳定值,你可以尝试先设置-Xmx增大内存,如果内存还是一直增加直至溢出,那就是你程序上出现内存泄露的问题了.内存溢出捕获这个异常在异常处理那里跳转就可以了. 或者你用JAVA的内存监测工具监测内存使用 ,如果解决不了,可以继续追问追问不是用工具啊,是自己写程序代码来实现监控。
追答最简单的都是通过任务管理器来看内存的,一般的内存溢出都可以解决,如果有溢出,那里的内存会突然增大,如果用程序写,没办法得到的准确的内存占用,内存泄露基本上都是程序上问题,全局对象有没有及时释放,数据库连接,结果集没及时关闭,一个方法里大量使用String里的+,解析大xml用JDOM等都会是导致内存溢出的因素,你要检查那里出现的内存溢出,你这个下载PDF如果把PDF都加载都内存中如果PDF比较大,你这个也很可能出现溢出,增大内存也是治标不治本的方法,从数据库取值如果是大文本这个字段所占内存基本都能估计出来的.
参考技术B /*计算某一段程序消耗的内存和时间*/Runtime r = Runtime.getRuntime();
r.gc();//计算内存前先垃圾回收一次
long start = System.currentTimeMillis();//开始Time
long startMem = r.freeMemory(); // 开始Memory
GBSort(array,1,len);//!!!!!被测的程序!!!!!
long endMem =r.freeMemory(); // 末尾Memory
long end = System.currentTimeMillis();//末尾Time
//输出
System.out.println("TimeCost: "+String.valueOf(end - start)+"ms");
System.out.println("MemoryCost: "+String.valueOf((startMem- endMem))+"KB"); 参考技术C 一般是监控用Jconsole吧。这个可以监控。jdk自带的。
内存溢出是可以捕获的。所以出现异常就跳到错误页面可以实现追问
怎么监控?能具体点么?前提是不是用工具来人为进行监控,而是让程序自动进行监控。
追答可以参考这个类,Runtime可以得到一些你需要的信息。
jconsole是个监控的软件。优化的时候使用。
以上是关于请问用Java代码,怎样测试一段程序占用了多少内存?的主要内容,如果未能解决你的问题,请参考以下文章