Arl*_*rlo 12 java memory-leaks 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根目录的最短路径",但没有返回任何结果.
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |