异常信息如下:
/**
* 私钥解密
* @desc
* @param data
* @param privateKey
* @return
* @throws Exception
*/
public static byte[] decryptByPrivateKey(byte[] data,
RSAPrivateKey privateKey) throws Exception {
//每次都是new一个对象
Cipher cipher = Cipher.getInstance(TRANSFORMATION,new BouncyCastleProvider());
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(data);
}
new BouncyCastleProvider() 是静态方法中的, new一个多一个,GC不回收, 慢慢就宕机。
改成单例模式
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class SingletonBouncyCastleProvider {
//将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法
//来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;
private SingletonBouncyCastleProvider() {}
private static volatile BouncyCastleProvider singleton=null;
public static BouncyCastleProvider getInstance() {
//双重检验锁
if(singleton==null) {
synchronized(SingletonBouncyCastleProvider.class){
if(singleton==null) {
return new BouncyCastleProvider();
}
}
}
return singleton;
}
}
Cipher cipher = Cipher.getInstance(TRANSFORMATION,SingletonBouncyCastleProvider.getInstance());