繁体   English   中英

Java:调用UnicastRemoteObject.exportObject()时的完整GC?

[英]Java: a full GC when UnicastRemoteObject.exportObject() is called?

在研究此问题时: Java:RMI目标对象的垃圾回收? 我看到第一次调用此函数会触发完整的GC:

UnicastRemoteObject.exportObject(new Remote(){}, 0);

我运行了一个非常简单的程序,其中包含设置了-verbose:gc的上述调用,并始终看到触发了完整的GC,例如[Full GC 1070K->184K(47552K), 0.0070096 secs]

我在命令行,虚拟机和物理机上都通过Eclipse运行了它。 我正在使用Sun JDK和Hotspot 1.6。

有没有人观察到类似的行为? 可能是什么原因造成的?

有一个后台线程可以检查GC是否已在java.rmi.dgc.leaseValue中运行,默认情况下为一小时。

如果在运行任何GC之前启用了此功能,那么我怀疑自上次GC以来此时间将过长并触发完整的gc。

执行此操作的类是sun.misc.GC

是的,我认为,它会触发Full GC。

RMI系统使用的分布式垃圾收集算法是引用计数算法。 当客户端首先收到对远程对象的引用时,“引用”消息将发送到正在导出对象的服务器。 客户端本地计算机中的每个后续引用都会导致引用计数器增加。 最终确定本地引用后,引用计数将减少,并且一旦计数变为零,就会向服务器发送“未引用”消息。 一旦服务器不再有对对象的实时引用并且没有本地引用,就可以自由地对其进行终结和垃圾回收。

另请参见下面的链接, 以获取长达一小时的默认GC间隔(6200091)部分

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/relnotes.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM