|
1
0
为什么不启动一个商用内存分析器(都有免费试用版)这样 MemProfiler ,比较两个快照并查看内存的去向。 如果没有看到代码,很难判断是否存在内存泄漏。 |
|
|
2
1
它似乎正在将整个列数据(在我的例子中包括一个大的二进制列数据)加载到内存中。数据一直保存到“范围”结束(例如内容超出范围)。在循环过程中,一些数据在垃圾收集中幸存下来,并被提升到下一代,这会导致保留期更长(在我的例子中,大约10分钟后会释放内存)。 我试过各种各样的方法,但我认为这只是我们必须接受的一种行为。 在我的特殊情况下,我使用二进制序列化将对象状态保存到数据库中。我还没有解决这个问题,但是我减少内存使用峰值的解决方法是重构代码,这样我就不用二进制序列化了,而是将原始数据保存到数据库表列中,并简单地将值赋给代码中的对象。下一个修复级别是使用“惰性初始化”,然后是缓存等。 在站点地图中,也许可以“分段”视图并只加载节点的子集。 |