本文介绍监视JSP中JVM可用内存,以及介绍System.gc()并不能强迫JVM马上释放内存,如果那样,我的内存溢出问题早就解决了。

公司有个JSP项目内存常常溢出,tomcat两个小时左右就停,我写了一个类对JVM可用内存进行了监测

监督JSP中JVM可用内存  JVM可用内存 JSP 第1张

  1. importjava.util.Timer;  
  2. importjava.util.TimerTask;  
  3. importjava.util.Calendar;  
  4. importjava.util.GregorianCalendar;  
  5. /** 
  6. Title:GCTimerTask
  7. *@authorzhuangyan  
  8. *@msn:nacl_zhuang@hotmail.com  
  9. *@qq:368924454  
  10. *@version1.0  
  11. */  
  12. publicclassGCTimerTask  
  13. extendsTimerTask{  
  14. privatestaticGCTimerTaskinstance=null;  
  15. publicvoidrun(){  
  16. Calendarcal=newGregorianCalendar();  
  17. inthour24=cal.get(Calendar.HOUR_OF_DAY);//0..23  
  18. intmin=cal.get(Calendar.MINUTE);//0..59  
  19. System.out.print("["+String.valueOf(hour24)+":"+String.valueOf(min)+"]");  
  20. System.out.println("JVM可用内存:"+java.lang.Runtime.getRuntime().
  21. freeMemory()/(1024*1024)+"M/"+java.lang.Runtime.getRuntime()
    .totalMemory()/(1024*1024)+"M");
  22. System.gc();  
  23. }  
  24. privatevoidstartWork()  
  25. {  
  26. Timert=newTimer();  
  27. t.schedule(instance,0,1000*60);  
  28. }  
  29. publicstaticGCTimerTaskgetInstance()  
  30. {  
  31. if(instance==null)  {  
  32. instance=newGCTimerTask();  
  33. instance.startWork();  
  34. }  
  35. returninstance;  
  36. }  
  37. }

这个类尽管简略,但初学者从中应该学到
1)timer类的用法
2)java.lang.Runtime.getRuntime().freeMemory(),java.lang.Runtime.getRuntime().totalMemory(),System.gc()
这三个方法的运用,需求阐明的是System.gc()并不能逼迫JVM立刻开释内存,假如那样,我的内存溢出问题早就处理了.
3)getInstance()单例形式,
4)***的便是怎样用这个类的问题,我把它放到了EncodingFilter类中,现在许多JSP程序中都有这个类吧

  1. publicfinalvoidinit(finalFilterConfigarg0)throwsServletException{
  2. GCTimerTask.getInstance();
  3. this.filterConfig=arg0;
  4. this.encoding=filterConfig.getInitParameter("encoding");
  5. Stringvalue=filterConfig.getInitParameter("ignore");
  6. if(value==null){
  7. this.ignore=true;
  8. }
  9. elseif(value.equalsIgnoreCase("true")){
  10. this.ignore=true;
  11. }
  12. elseif(value.equalsIgnoreCase("yes")){
  13. this.ignore=true;
  14. }
  15. else{
  16. this.ignore=false;
  17. }
  18. }

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下不能用.

【修改引荐】

  1. JSP引擎的作业原理
  2. 深化分析JSP charset
  3. My JSP的根底示例
  4. 详解JSP页面传值
  5. JSP页面***实践
转载请说明出处
知优网 » 监督JSP中JVM可用内存

发表评论

您需要后才能发表评论