- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个创建大约 2000 个对象的应用程序。
对于每个对象,它下载一个网页(大约 75kb 的字符串),创建整个 html 树的 DOM 文档对象模型并丢弃字符串(它超出范围)。
然后它从 DOM 中提取一些文本和链接,并丢弃 DOM(通过将其设置为 null)。
在大约 1000 个对象之后(取决于我打开了多少应用程序,它可能在 50 个对象之后)我得到一个 OutOfMemory 异常,并且使用 Process Explorer 我可以看到内存占用一直在增加,以对数步长。
我尝试插入 System.gc();
后将其设置为 null,但内存使用量仍在不断增加,但现在不是以对数步长而是在每个处理对象后以大约 0.5Mb 的步长.此外,在调试时,每当我跨过 System.gc()
时,足迹都会增加这个数量,并且它保持不变,直到指令指针位于相同的 System.gc()
再次。
[编辑]
我按照答案中的建议在转储上运行配置文件,发现每个类仍然存储一个 150kb 的字符串(75k 个字符)。总计 242mb。所以问题就变成了,如何在不保留原始字符串的情况下保留子字符串?显然,String 构造函数会执行此操作。
最佳答案
这看起来像是内存泄漏。我猜你不会在解析 HTML 后关闭 HTTP 连接或清理(?),但这只是猜测。您有两种选择来诊断问题:
在出现内存不足错误时转储内存 (-XX:+HeapDumpOnOutOfMemoryError
) 并使用内存分析器。它会告诉你什么占用了大部分内存
尝试删除一些处理步骤(通过 HTTP 获取数据、解析 HTML、提取数据),看看没有哪一步内存增长会停止。此步骤会导致内存泄漏。
同时调用 System.gc()
永远也帮不了你。
关于java - 内存增长无限制,垃圾收集器增加占用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573378/
我在正则表达式帖子中进行了大量搜索,但没有找到我正在寻找的解决方案。 我有正则表达式 ([a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?) ?接受这些案例: 空
我想获取总金额最大的用户的user_id和总金额。我无法使用 LIMIT,因为这只会返回 1 条记录(多个用户的总金额可能相同) 这是我的数据架构和一些记录 CREATE TABLE transact
我想从 x 开始。 xpage 应用程序(比如 10 对)上的字段(在我的应用程序中我有一对文本数据字段和数字数据字段),然后当用户单击“更多字段”时,我希望更多对动态显示而没有完整刷新页面,但想无限
#include struct B { int x,y; }; struct A : public B { // This whines about "copy assignment ope
是的,我想删除所有 ulimits 并将它们设置为unlimited。我该怎么做呢?谢谢! 最佳答案 使用这样的东西: for opt in $(ulimit -a | sed 's/.*\-\([
我是 C 编程的初学者,我想知道如何才能做到这一点。我希望能够输入整数(我想要的数量),然后找到其中最小的一个。我应该/如何做到这一点?我需要使用数组来存储它们吗?我不太确定如何做到这一点。 谢谢!
我一直在寻找,但似乎编译器开发人员对支持这些的兴趣为零。 对我来说,这似乎很奇怪——基本上,当前的 C++ 对 union 有一些限制,这些限制总是令人恼火而且从不合适。您可能认为基本上删除一些错误检
一个不受限制的 union 类的例子,它包含一个整数映射或一个整数 vector : #include #include #include #include typedef std::vect
谁能解释一下如何将一个字符串(在一个结构体中的 union 体中)赋值并推送到一个 vector 中?这可能吗? vector 是否试图访问无效内存? #include #include #inc
考虑这段代码: struct TNumeric { bool Negative; wstring Integral; wstring Fraction; }; union
我目前正在通过 C# 控制台应用程序使用 Azure API 为 Cosmos DB 播种。在此过程中,我删除并重新创建数据库,以确保删除所有预先存在的数据(这可能不是最好的选择,但我没有看到截断所有
我是一名优秀的程序员,十分优秀!