当前位置: 首页 > 知识库问答 >
问题:

Java:一个完整的GC当UnicastRemteObject.exportObject()被调用?

姜华翰
2023-03-14

在研究这个问题时:Java:RMI目标对象的垃圾收集?我第一次打这个电话时看到一个完整的GC被触发:

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

我运行了一个包含上述调用的非常简单的程序,设置了-verbose:gc,并始终看到触发了完整的gc,例如[full gc 1070K]-

我通过Eclipse、命令行、虚拟机和物理机运行了它。我正在使用Sun jdk和hotspot 1.6。

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


共有2个答案

茅高卓
2023-03-14

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

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

另请参阅以下链接,了解默认GC间隔长度为一小时(620091)部分

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

葛胡媚
2023-03-14

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

如果在任何GC运行之前启用此功能,我怀疑它会认为自上次GC以来的这一次太长,并触发完整GC。

做这件事的班级是孙。其他。GC

 类似资料:
  • 问题内容: 我试图避免Full GC(来自下面的gc.log示例)在生产中的Tomcat中运行Grails应用程序。关于如何更好地配置GC的任何建议? 14359.317:[完整GC 14359.317:[CMS:3453285K- > 3099828K(4194304K),13.1778420秒] 4506618K-> 3099828K(6081792K),[CMS彼尔姆:261951K-> 1

  • 问题内容: 我已经注意到,在Java中播放音频时,gc中的MarkSweepCompact阶段太长,导致短暂的静音期,这是不可接受的。所以我需要使用低暂停时间的gc。我尝试了Parallel和CMS,它们似乎工作得更好,因为我想暂停时间较短,而且它们不像默认的那样进行完整收集。 到目前为止,我已经使用ParallelGC的以下选项测试了我的程序: 我也尝试过G1GC,但仍在Java 6中处于实验状

  • 我在java应用程序中使用cms gc。当我在gc日志中看到下面一行时,我感到很困惑 null 谢谢(如有语法错误,请原谅)

  • 5.6 一个完整的流程 到之前为止,我们了解了URL和抽取相关API,一个爬虫已经基本编写完成了。 @TargetUrl("https://github.com/\\w+/\\w+") @HelpUrl("https://github.com/\\w+") public class GithubRepo { @ExtractBy(value = "//h1[@class='entry-t

  • 我想要一个完整的未来,只发出完成的信号(例如,我没有返回值)。 我可以将CompletableFuture实例化为: 但是我应该向完整的方法提供什么呢?例如,我不能做

  • 问题内容: 与默认参数相比,我需要Oracle Hotspot 更快地引发异常。 默认情况下,当超过98%的时间用于GC并且少于2%的堆被恢复时,就会发生OOME(描述为http://www.oracle.com/technetwork/java/javase/gc- tuning-6 -140523.html#par_gc.oom )。 例如,当20%以上的时间用于GC时,我需要JVM抛出OOM