Tomcat 6.0.24之后引入内存泄露检查机制,由此导致严重警告,有无完美解决方案?

问题描述

严重:Thewebapplication[...]registeredtheJDBCdriver[com.microsoft.sqlserver.jdbc.SQLServerDriver]butfailedtounregisteritwhenthewebapplicationwasstopped.Topreventamemoryleak,theJDBCDriverhasbeenforciblyunregistered.在网上查了查,无非是以下三种解决方案:1.假装没看见2.使用6.0.24之前的Tomcat版本3.由于是内存泄露检查导致的警告,故在tomcat的server.xml文件中,关闭监听<!--Preventmemoryleaksduetouseofparticularjava/javaxAPIs--><ListenerclassName="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>以上方案确实有效,但治标不治本。https://issues.apache.org/jira/browse/DBCP-332这里有个貌似治本的解决方案想请教一下,还有更优的方案么?

解决方案

解决方案二:
该回复于2011-05-09 10:17:32被版主删除

时间: 2024-08-30 03:26:14

Tomcat 6.0.24之后引入内存泄露检查机制,由此导致严重警告,有无完美解决方案?的相关文章

VC内存泄露检查工具:VisualLeakDetector

初识VisualLeakDetector灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存泄漏是最常见的内存问题之一.内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现.然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚至会影响到其他程序的正常运行.另外内存问题的一个共同特点是,内存问题本身并不会有很明

C++简单内存泄漏检查机制实现

这里是一个简单的内存泄漏自动检查机制.只适用于单线程情况下.工作原理就是将已经分配的内存用一个双向链表串联起来,释放内存时从链表里删除.在程序退出时,将链表中未释放的内存打印出来.同时在内存块中保存文件名和行号,用于定位内存分配地址. 001 // placement_new.cpp : Defines the entry point for the console application. 002 // 003 004 #include "stdafx.h" 005 #include

C++内存泄露检查的5个方法

一.前言 在Linux平台上 有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容 易形成"统一"的标准.而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同.下面结合我的实际经验,整理下常见定位内存泄漏的方 法. 注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这个库或者CRT库本身的内存泄漏检测函数能够分析出内存泄漏,相对而言比较简单.而服务器有

Android应用内存泄露分析、改善经验总结

前言 通过这几天对好几个应用的内存泄露检测和改善,效果明显: 完全退出应用时,手动触发GC,从原来占有内存100多M降到低于20M: 手动触发GC后,通过adb shell dumpsys meminfo packagename -d查看Activity和View的数量也趋近于0了(没有做到归零是因为SDK中存在内存泄露,需要中间层去处理): 发现了一个SDK中的内存泄露(Android InputMethodManager 导致的内存泄露及解决方案): 发现一个MTK Webview的内存泄露

如何用Java编写一段代码引发内存泄露

Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码.这个问题我一点思路都没有,好囧. A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中): 应用程序创建一个长时间运行的线程(或者使用线程池,会更快地发生内存泄露). 线程通过某个类加载器(可以自定义)加载一个类. 该类分配了大块内存(比如new byte[1000000]),在某个静态变量存储一个强引用,然后在ThreadLocal中存储它自身的引用.分配额外的内存new byte[

用java创建一个内存泄露的步骤?

问题: 我之前参加了一个面试, 被问到在java中如何创建一个内存泄露.不用说我当时不知道说啥,如何创建一个,我到现在也没有头绪.可以给我示范一个例子么? 回答: 有一个方式可以创建一个纯Java的内存泄露(运行代码中对象不可达,但仍然驻留在内存里) 1. 应用创建了一个长时间运行的线程(或者使用线程池,这会使内存泄露更快)2.线程从类加载器加载一个类3. 这个类分配一个大内存块(例如new byte[1000000]) ,把它通过强引用指向一个静态成员变量,然后把它自己的引用存储到Thread

讨论下面这个程序在jdk1.5下是否真的有内存泄露

问题描述 importjava.util.EmptyStackException;publicclassStack{/***Fieldelements.*/privateObject[]elements=newObject[10];/***Fieldsize.*/privateintsize=0;/***Methodpush.*@parameObject*/publicvoidpush(Objecte){ensureCapacity();elements[size++]=e;}/***Metho

Android 中Handler引起的内存泄露_Android

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } } } 但是,其实上面的代码可能导致内存泄露,当你使用Androi

Android中Handler引起的内存泄露问题解决办法_java

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. 复制代码 代码如下: public class SampleActivity extends Activity {   private final Handler mLeakyHandler = new Handler() {     @Override     public void handleMessage(Message msg) {       // ...     }