我有几个问题。
1.当JAVA垃圾收集器运行时,是否需要大量的CPU资源?
2.什么触发垃圾收集,如果我从不手动执行GC.collect()
3.如果我监视内存使用量,我会看到物理内存使用率突然下降吗?
4.收藏家是否会阻止其他线程。例如GUI
5.如何避免这种情况
这也是C#中的一个问题吗?
感谢您的回答。
答案 0 :(得分:2)
当GC运行时,它受CPU限制,因此它会消耗尽可能多的CPU,直到它完成。
当你用完或内存不足时(取决于你使用的GC)
你可以监控空闲内存,你会看到空闲内存突然跳跃。
有些收藏家总是阻止所有主题。但是,Concurrent集合器有一些并发的pahses。
避免使用GC的最佳方法是创建更少的对象。创建一个足够低的对象,你可以在没有GC的情况下整整一天。 http://vanillajava.blogspot.com/2011/06/how-to-avoid-garbage-collection.html
我想是的。
答案 1 :(得分:1)
我不能说Java,但也看到了你想知道的C#:
定义“很多”。不,一般来说它不会使用大量的CPU。实际上,垃圾收集通常会等到认为它可以运行而不会给系统带来负担。
垃圾收集在任何时候运行。即使您致电GC.Collect()
,也不能指望GC立即发生。
如果有收集的内容,您只会看到内存使用量下降。只收集可以收集的东西,这实际上取决于你的程序。
不,它不会阻止其他线程(我会在一秒钟内通过C#检查CLR以确保)。
N / A
这是C#的答案。 :)
答案 2 :(得分:1)
而不是试图得到关于可以在两个或三个段落中阅读的过多问题的简明回答,why don't you take a look at the documentation?它比任何可以提供的答案都要多,并且会告诉你“它取决于”背后的原因。