BouncyCastleProvider 内存泄露 OOM

提要

每次New一个BouncyCastleProvider导致的内存泄漏,原因为provider对象是JCE可以信任的JAR,并把缓存结果存起来,将把该种provider当key存入一个静态的MAP中缓存起来, 故到OLD区也未回收

错误使用方法

 Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());

解决方案

方法一

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

方法二

Provider provider=Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
 if(provider==null){
    
    
     provider=new BouncyCastleProvider();
     Security.addProvider(provider);
 }
 Cipher cipher = Cipher.getInstance("RSA","BC");

猜你喜欢

转载自blog.csdn.net/qq_35868811/article/details/106187153
OOM