![]() |
1
5
因此,您应该看到数字的增加,这并不意味着内存在泄漏,而是GC已经运行。
在第一种情况下,您也可以看到这种增长。它只会发生得慢得多,因为非常慢
|
![]() |
2
3
另一个需要注意的是
有一个
如果您真的想在不同的情况下准确地跟踪GC统计信息,我将在您的进程中使用Windows性能监视器,您可以在其中创建各种类型的监视器,包括.NET堆统计信息。 |
![]() |
3
1
如果您只等待几秒钟,您会看到收集计数在第一个测试中也会增加,但不会增加得那么快。 代码之间的区别在于,第一个测试总是尽可能快地写出收集计数,而第二个测试循环,直到达到时间限制才写出任何数据。 第一个测试花费大部分时间等待文本写入控制台,而第二个测试花费大部分时间循环,等待时间限制。第二个测试将在同一时间进行更多的迭代。 我计算了迭代次数,并打印出每个垃圾收集的迭代次数。在我的计算机上,第一个测试稳定在每个GC 45000次迭代左右,而第二个测试稳定在每个GC 130000次迭代左右。 所以,第一个测试实际上是 更多 垃圾收集比第二次测试多了大约三倍。 |
![]() |
4
0
谢谢大家!你的建议有助于揭露罪魁祸首:
GC不会一直运行,但只在分配内存时运行。如果内存使用率很低,则
测试的最新迭代展示了这种行为。第一次测试运行没有分配任何堆内存(
现在,两个
|
![]() |
codeforester · 测量GC暂停时间的最佳方法是什么? 7 年前 |
![]() |
Venki WAR · 需要解释G1的并行完整GC 7 年前 |
![]() |
Stephan_Berlin · 为什么CMS系列中的初始标记阶段 7 年前 |
![]() |
Bonsaisteak · 为什么年轻一代需要三个区域来收集垃圾? 7 年前 |
![]() |
goks · 如何清除熊猫的数据帧内存? 7 年前 |