小编Arl*_*rlo的帖子

在Java 7中加载KeyStore会泄漏Classloader

在Java 7中加载KeyStore时,类加载器被泄露.

我已经使用Tomcat 7.0.47中的"Find Leaks"功能和classloader-leak-prevention确认了这一点.这是测试代码,带有@Configuration泄漏的webapp和带有@Controller泄漏的webapp.

基本上这些线为我造成了泄漏:

InputStream is = null;
try {
    is = new FileInputStream("./app.truststore");
    KeyStore keyStore = KeyStore.getInstance("JKS");
    keyStore.load(is, "changeit".toCharArray());
} catch (Exception e) {
    System.out.println(e);
} finally {
    if (is != null) {
        is.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除KeyStore.load()一切正常,但这显然不是一个有效的解决方案.

它不适用于Oracle JDK 1.7u15,u17,u21,u25,u40和u45以及OpenJDK 1.7u40和u45.

它适用于Oracle JDK 1.6u39,u41,u43和45以及OpenJDK 1.6.0.

这是在Microsoft Windows Server 2008 R2 Standard 64 Bit上测试的.OpenJDKs是alexkasko在GitHub上的最新非官方版本.

有谁知道可能导致Classloader泄漏的原因是什么?我尝试使用堆转储并调用"GC根目录的最短路径",但没有返回任何结果.

java memory-leaks classloader

12
推荐指数
1
解决办法
516
查看次数

标签 统计

classloader ×1

java ×1

memory-leaks ×1