请问用Java代码,怎样测试一段程序占用了多少内存?
比如说有个下载pdf的功能,我要测试一下下载pdf这个功能到底占用多少内存,用程序代码怎样测试?组长给我的想法是,要对下载pdf功能进行内存监控,如果即将内存溢出则跳转到...
比如说有个下载pdf的功能,我要测试一下下载pdf这个功能到底占用多少内存,用程序代码怎样测试?组长给我的想法是,要对下载pdf功能进行内存监控,如果即将内存溢出则跳转到错误页面。
展开
展开全部
你就直接打开任务管理器,查看java.exe的进程,内存占用如果一直增加,达不到一个稳定值,你可以尝试先设置-Xmx增大内存,如果内存还是一直增加直至溢出,那就是你程序上出现内存泄露的问题了.内存溢出捕获这个异常在异常处理那里跳转就可以了. 或者你用JAVA的内存监测工具监测内存使用 ,如果解决不了,可以继续追问
追问
不是用工具啊,是自己写程序代码来实现监控。
追答
最简单的都是通过任务管理器来看内存的,一般的内存溢出都可以解决,如果有溢出,那里的内存会突然增大,如果用程序写,没办法得到的准确的内存占用,内存泄露基本上都是程序上问题,全局对象有没有及时释放,数据库连接,结果集没及时关闭,一个方法里大量使用String里的+,解析大xml用JDOM等都会是导致内存溢出的因素,你要检查那里出现的内存溢出,你这个下载PDF如果把PDF都加载都内存中如果PDF比较大,你这个也很可能出现溢出,增大内存也是治标不治本的方法,从数据库取值如果是大文本这个字段所占内存基本都能估计出来的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*计算某一段程序消耗的内存和时间*/
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");
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");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般是监控用Jconsole吧。这个可以监控。jdk自带的。
内存溢出是可以捕获的。所以出现异常就跳到错误页面可以实现
内存溢出是可以捕获的。所以出现异常就跳到错误页面可以实现
追问
怎么监控?能具体点么?前提是不是用工具来人为进行监控,而是让程序自动进行监控。
追答
可以参考这个类,Runtime可以得到一些你需要的信息。
jconsole是个监控的软件。优化的时候使用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不能吧,可以根据你自己程序中变量的数量和规模大概估算一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询