gpt4 book ai didi

java.lang.OutOfMemoryError : Java heap space at com. sun.crypto.provider.CipherCore.update

转载 作者:行者123 更新时间:2023-12-01 10:05:12 24 4
gpt4 key购买 nike

我正在开发一个网络应用程序,我需要将大约 500mb 的大文件加密为图像。第一次代码工作正常,但之后我的服务器给出错误 java.lang.OutOfMemoryError: Java heap space。我正在使用 netbeans 和 glassfish 服务器。我还增加了堆大小。

    byte j[] = key.getBytes();
SecretKeySpec kye = new SecretKeySpec(j, "AES");
Cipher enc = Cipher.getInstance("AES");
enc.init(Cipher.ENCRYPT_MODE, kye);
FileOutputStream output = new FileOutputStream("xyz.mkv");
CipherOutputStream cos = new CipherOutputStream(output, enc);
byte[] buf = new byte[104857600];
int read;
while ((read = file.read(buf)) != -1) {
cos.write(buf, 0, read);
}
output.flush();
buf = null;
file.close();
cos.close();

我不知道出了什么问题,请帮忙。这是堆栈跟踪..

Warning:   StandardWrapperValve[DocEncrypt]: Servlet.service() for       
servlet DocEncrypt threw exception
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3236)
at com.sun.crypto.provider.CipherCore.update(CipherCore.java:666)
at com.sun.crypto.provider.AESCipher.engineUpdate(AESCipher.java:371)
at javax.crypto.Cipher.update(Cipher.java:1832)
at javax.crypto.CipherOutputStream.write(CipherOutputStream.java:158)

最佳答案

根据堆栈跟踪和源代码,看起来加密堆栈正在内部分配一个缓冲区,其大小与您使用 write 调用写入的 block 相同。

您选择使用非常大的缓冲区;即 104,857,600 字节。所以加密堆栈本身需要分配一个非常大的缓冲区。

解决方案:

  1. 您可以增加堆大小。
  2. 推荐:您可以将缓冲区大小减小到更合理的值。我建议 1MiB 或更少。 (大于此值,通过增大缓冲区获得的性能优势就很小......)

关于java.lang.OutOfMemoryError : Java heap space at com. sun.crypto.provider.CipherCore.update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36526626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com