本文介绍监视JSP中JVM可用内存,以及介绍System.gc()并不能强迫JVM马上释放内存,如果那样,我的内存溢出问题早就解决了。
公司有个JSP项目内存常常溢出,tomcat两个小时左右就停,我写了一个类对JVM可用内存进行了监测
- importjava.util.Timer;
- importjava.util.TimerTask;
- importjava.util.Calendar;
- importjava.util.GregorianCalendar;
- /**
- Title:GCTimerTask
- *@authorzhuangyan
- *@msn:nacl_zhuang@hotmail.com
- *@qq:368924454
- *@version1.0
- */
- publicclassGCTimerTask
- extendsTimerTask{
- privatestaticGCTimerTaskinstance=null;
- publicvoidrun(){
- Calendarcal=newGregorianCalendar();
- inthour24=cal.get(Calendar.HOUR_OF_DAY);//0..23
- intmin=cal.get(Calendar.MINUTE);//0..59
- System.out.print("["+String.valueOf(hour24)+":"+String.valueOf(min)+"]");
- System.out.println("JVM可用内存:"+java.lang.Runtime.getRuntime().
- freeMemory()/(1024*1024)+"M/"+java.lang.Runtime.getRuntime()
.totalMemory()/(1024*1024)+"M");- System.gc();
- }
- privatevoidstartWork()
- {
- Timert=newTimer();
- t.schedule(instance,0,1000*60);
- }
- publicstaticGCTimerTaskgetInstance()
- {
- if(instance==null) {
- instance=newGCTimerTask();
- instance.startWork();
- }
- returninstance;
- }
- }
这个类尽管简略,但初学者从中应该学到
1)timer类的用法
2)java.lang.Runtime.getRuntime().freeMemory(),java.lang.Runtime.getRuntime().totalMemory(),System.gc()
这三个方法的运用,需求阐明的是System.gc()并不能逼迫JVM立刻开释内存,假如那样,我的内存溢出问题早就处理了.
3)getInstance()单例形式,
4)***的便是怎样用这个类的问题,我把它放到了EncodingFilter类中,现在许多JSP程序中都有这个类吧
- publicfinalvoidinit(finalFilterConfigarg0)throwsServletException{
- GCTimerTask.getInstance();
- this.filterConfig=arg0;
- this.encoding=filterConfig.getInitParameter("encoding");
- Stringvalue=filterConfig.getInitParameter("ignore");
- if(value==null){
- this.ignore=true;
- }
- elseif(value.equalsIgnoreCase("true")){
- this.ignore=true;
- }
- elseif(value.equalsIgnoreCase("yes")){
- this.ignore=true;
- }
- else{
- this.ignore=false;
- }
- }
JVM可用内存:405M/508M
java.lang.OutOfMemoryError
为什么显现的JVM可用内存有400多M,还OutOfMemoryError?在window的资源管理器中看tomcat的内存用量是继续添加的,它和 java.lang.Runtime.getRuntime().freeMemory()是什么差异啊?
JSP溢出时在window资源管理器中tomcat内存占300多M,MSSQL内存也差不多到300M了.有什么方法能够守时重启这两个服务呢,我写了一个程序,在XP下可用.但2000下不能用.
【修改引荐】
- JSP引擎的作业原理
- 深化分析JSP charset
- My JSP的根底示例
- 详解JSP页面传值
- JSP页面***实践
转载请说明出处
知优网 » 监督JSP中JVM可用内存
知优网 » 监督JSP中JVM可用内存