每次New一个BouncyCastleProvider导致的内存泄漏

来源:互联网 发布:知画与永琪圆房的文 编辑:程序博客网 时间:2024/05/16 23:37

问题原因

生产服务器的内存一直升高,直到宕机。内存分析的结论是:内存泄漏。
下载dump文件,经过解析堆栈日志,如下图所示:

这里写图片描述

The class "javax.crypto.JceSecurity", loaded by "<system class loader>", occupies 2,522,379,928 (95.73%) bytes. The memory is accumulated in one instance of "java.lang.Object[]" loaded by "<system class loader>".Keywordsjava.lang.Object[]javax.crypto.JceSecurity

这里写图片描述

是BouncyCastleProvider 这个类里面的方法, 全是静态的, new一个多一个, GC不回收, 慢慢就宕机。

dump代码如下:
这里写图片描述

解决方案

private static org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = null;    public static synchronized org.bouncycastle.jce.provider.BouncyCastleProvider getInstance() {        if (bouncyCastleProvider == null) {            bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider();        }        return bouncyCastleProvider;    }KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", getInstance());

内存泄漏分析工具参见:http://blog.csdn.net/shenhaiwen/article/details/54670234

阅读全文
0 0
原创粉丝点击