Java 7でKeyStoreをロードすると、Classloaderがリークします。Java 7でKeyStoreをロードするとクラスローダーがリークする
Tomcat 7.0.47およびclassloader-leak-preventionの「リークの検索」機能を使用してこれを確認しました。ここにはtest code、webapp with the leak in @Configurationおよびwebapp with the leak in @Controllerがあります。
は、基本的にこれらの行は私のためにリークが発生:私はKeyStore.load()を削除すると、すべてが正常に動作しますが、それは明らかに機能するソリューションではありません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();
}
}
。
Oracle JDK 1.7u15、u17、u21、u25、u40、u45、OpenJDK 1.7u40、u45では動作しません。
これは、Oracle JDK 1.6u39、u41、u43、およびOpenJDK 1.6.0で動作します。
これは、Microsoft Windows Server 2008 R2 Standard 64 Bitでテストされました。 OpenJDKは、GitHubのalexkaskoによる最新のunofficial buildsです。
誰もがClassloaderのリークを引き起こしている可能性があるアイデアはありますか?私はヒープダンプを使って "GCルートへの最短パス"を呼び出そうとしましたが、結果は返されませんでした。
こんにちは、私はSpring MVCテストアプリを書いて、あなたのロジックをアプリ初期化子に追加しました。その後、私はplumbrの評価版でそれを装備し、すぐにクラスローダーのリークを検出しました。 JREとJDKは7.0、ランタイムはApache Tomcat-7.0.42.A.RELEASEに基づくTC Server 2.9.3です。 あなたのアプリケーションにはクラスローダーのリークがあると報告されています。アンデプロイするたびに5348クラスがアンロードされることはありません。あなたのコードがなければ、アプリはきれいです。まだ原因を探しています。 – TechTrip