作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在使用 VisualVM 监视 Java 程序时,我注意到垃圾收集器行为中的一个有趣模式。似乎很多时候,在执行“正常”垃圾收集运行之后,GC 会执行第二次更密集的 cpu 运行,这似乎没有额外的效果(更积极的运行后使用的堆与它是在打火机运行之后)。
我已经在 VisualVM 的输出中指出,您可以在其中看到垃圾收集器的运行和相应的堆使用变化。
我的问题基本上是垃圾收集器在这里做什么以及为什么?是什么导致它在有大量可用内存时尝试这些真正的 cpu 密集型运行,并且与较轻的运行相比没有明显的好处?还是我误解了图表?
程序的性能并没有真正受到影响,我只是好奇。
最佳答案
查看图表是了解 GC 运行概况的好方法,但如果您想研究 GC 在特定时刻运行的原因,您需要深入挖掘 GC 日志。
启用完整的 GC 日志记录,同时开始收集 jstat。关注那些你看到意外 GC 周期的时间,并在日志中追溯它们。你在那里看到了什么?试试看:
回答这些问题可能会将您引向 GC 为何运行的问题。
更新:您可以找到关于如何调整 GC 的技术细节,例如在:Is there a cookbook guide for GC problems?
关于java - 为什么 Java 垃圾收集器似乎在执行较不积极的运行后不久就进行了积极的运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752076/
谁能解释当应用程序通过 802.11 WiFi 网络发送 UDP 单播数据报时它是如何工作的?假设非阻塞 UDP 套接字。具体而言,假设 802.11n 或 802.11ac 以及相当新的 Linux
我是一名优秀的程序员,十分优秀!