+ -
当前位置:首页 → 问答吧 → 进行垃圾回收的时候我们的应用会暂停吗

进行垃圾回收的时候我们的应用会暂停吗

时间:2011-09-08

来源:互联网

正在看sun的内存管理白皮书,发现这一句:It is also desirable that a garbage collector operate efficiently, without introducing long pauses during which the application is not running.

是不是说在gc的时候application会稍微停止一下?是啥意思?

作者: dreamhunter_lan   发布时间: 2011-09-08

不会 垃圾回收是在守护线程中进行的

作者: perfe_ct   发布时间: 2011-09-08

会有这问题的,越早的jvm应该越明显

作者: ticmy   发布时间: 2011-09-08

会停止该JVM所有运行

作者: soli11722984   发布时间: 2011-09-08

引用 2 楼 ticmy 的回复:

会有这问题的,越早的jvm应该越明显

看到后面的时候发现有一条是在并发和stop-the-world之间做选择,在进行并发回收的时候有时也需要stop-the-world,请问下为啥需要停止应用程序,也就是冻结内存~~~那些是垃圾的对象不是已经存在在那个地址,然后回收那块地址就好了?冻结内存的理由是不是为了拷贝活对象的时候保证数据一致性?

作者: dreamhunter_lan   发布时间: 2011-09-08

不是,這個是為了優化內存,防止溢出的動作,把存活的對象都緊挨的排在一起,可以最大化的使內存使用率達到最高

作者: soli11722984   发布时间: 2011-09-08

举个例子说:在new对象的时候都需要一片连续的内存,假设要4M,经过几次回收之后,内存没有连续的4M内存了,虽然总的空闲空间大于4M,这就需要移动对象吧?移动对象必然涉及指针地址的变化吧,如果不让使用这些引用的程序暂停一下,怎么改变了他们的引用岂不是出问题了,只有暂停一下,把移动的那些对象的引用地址都更新掉,再回复程序执行

引用 4 楼 dreamhunter_lan 的回复:

引用 2 楼 ticmy 的回复:

会有这问题的,越早的jvm应该越明显

看到后面的时候发现有一条是在并发和stop-the-world之间做选择,在进行并发回收的时候有时也需要stop-the-world,请问下为啥需要停止应用程序,也就是冻结内存~~~那些是垃圾的对象不是已经存在在那个地址,然后回收那块地址就好了?冻结内存的理由是不是为了拷贝活对象的时候保证数据一致性?

作者: ticmy   发布时间: 2011-09-08

热门下载

更多