![]() |
1
5
因此,您应该看到数字的增加,这并不意味着内存在泄漏,而是GC已经运行。
在第一种情况下,您也可以看到这种增长。它只会发生得慢得多,因为非常慢
|
![]() |
2
3
另一个需要注意的是
有一个
如果您真的想在不同的情况下准确地跟踪GC统计信息,我将在您的进程中使用Windows性能监视器,您可以在其中创建各种类型的监视器,包括.NET堆统计信息。 |
![]() |
3
1
如果您只等待几秒钟,您会看到收集计数在第一个测试中也会增加,但不会增加得那么快。 代码之间的区别在于,第一个测试总是尽可能快地写出收集计数,而第二个测试循环,直到达到时间限制才写出任何数据。 第一个测试花费大部分时间等待文本写入控制台,而第二个测试花费大部分时间循环,等待时间限制。第二个测试将在同一时间进行更多的迭代。 我计算了迭代次数,并打印出每个垃圾收集的迭代次数。在我的计算机上,第一个测试稳定在每个GC 45000次迭代左右,而第二个测试稳定在每个GC 130000次迭代左右。 所以,第一个测试实际上是 更多 垃圾收集比第二次测试多了大约三倍。 |
![]() |
4
0
谢谢大家!你的建议有助于揭露罪魁祸首:
GC不会一直运行,但只在分配内存时运行。如果内存使用率很低,则
测试的最新迭代展示了这种行为。第一次测试运行没有分配任何堆内存(
现在,两个
|
![]() |
payloc91 · 存储地图中的条目是否安全?它会导致内存泄漏吗? 7 年前 |
![]() |
pjj · 如果GC'ed是弱可达对象,那么为什么会出现OOM错误 7 年前 |
![]() |
K.R. · RxJava行为主体和使用者-这里是否存在内存泄漏? 7 年前 |
![]() |
eaglefreeman · 意外的R内存管理行为 7 年前 |
![]() |
areify · 如何避免此代码中的内存泄漏? 7 年前 |