Java SSL太多的内存分配

时间:2015-11-18 01:49:19

标签: java ssl encryption

当通过swebhdfs下载大文件时,java会分配太多的字节数组并让它立即变为垃圾。虽然这些是短暂的字节数组,但它们会引发太多的小暂停,从而导致应用程序无法预测。

enter image description here

据我所知,问题是CipherBox.decrypt重新使用相同的字节数组输入和输出到调用Cipher.update http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/sun/security/ssl/CipherBox.java#469

大多数Cipher实现如果为输入和输出传递相同的数组,则分配一个新的字节数组并返回它。如果您没有使用SSL来下载大数据,这无关紧要。在我们的例子中,我们从Hadoop下载TB数据,这会导致许多次要的GC暂停。

以前有人遇到过这个问题吗?我认为只有没有这种行为的密码是RSA,但RSA因其他原因而被破坏。

1 个答案:

答案 0 :(得分:0)

BouncyCastle没有出现此问题。 BouncyCastle与JCE SSL实现完全兼容。

您可以通过以下代码

来选择BouncyCastle而不是JCE
Security.insertProviderAt(new BouncyCastleProvider(), 1);

这解决了我们的GC问题。