gpt4 book ai didi

java - 如何根据这个统计数据改进java代码?

转载 作者:行者123 更新时间:2023-12-02 00:43:15 25 4
gpt4 key购买 nike

我有一个 Web 应用程序,它通过每 10 秒运行一个调度程序任务将一些 PCL 文件转换为 PDF。每次最多需要。目录中的 20 个文件并将它们转换为 pdf。

前几个任务运行良好,但逐渐变慢,并且突然出现 超出 GC 开销限制 错误消息。

我尝试使用 VisualVM 分析此内存泄漏,以下是堆转储的一些输出:enter image description here

显示如此数量的字节实例(3.366.687!!!)很奇怪。在应用程序中,我也有 Streams,我确实检查了所有这些流在相关操作完成后是否都已关闭。

我在单个类中通过三种方法使用字节: byte[] buf = 新字节[1024];

 public void initBuf() {
if (buf != null) {
for (int i = 0; i < buf.length; i++) {
buf[i] = (byte) 0x00;
}

pdf_y = PageSize.A4.getHeight();
}
}

public void appendBuf(char ch) {

if (ch == '\n') {
processChunk();
drawChunks();
pdf_newline();
} else if (ch != '\r') {
buf[buf_index++] = (byte) (0xff & ch);
}
}

public void resetBuf() {
for (int i = buf_index; i >= 0; i--) {
buf[i] = (byte) 0x00;
}

buf_index = 0;
}

您建议我去哪里寻找?我如何才能真正识别出我的哪些代码正在执行此有害操作?

我无法发布所有代码,因为有更多的类可以执行此转换,但我真的希望您能帮助我提供一些建议,因为我花了很多时间,但这个内存问题仍然存在。

提前致谢

最佳答案

您的分析器屏幕截图显示了 330 万个 java.lang.Byte 实例,而不是 byte[] 实例。我会在其他地方寻找 Byte 的用法(可能包括从 byte 自动装箱以将它们插入集合中的实例)。

我的第一个怀疑是代码的其他部分正在向映射添加 Bytebyte 实例(作为键或作为值)并且未能当不再需要它们时将其移除。但这只是基于追踪我自己的一些内存泄漏而做出的猜测。

关于java - 如何根据这个统计数据改进java代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721592/

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