代号为One的System.gc()

时间:2019-07-05 14:03:35

标签: codenameone

System.gc()https://www.codenameone.com/javadoc/java/lang/System.html#gc--)是否以代号One做某事?

我在XCode中对Ram进行性能分析时在Codename One应用程序中进行了尝试,但是System.gc()似乎被忽略了。

2 个答案:

答案 0 :(得分:1)

System.gc()已实现,但是它是异步的,因为GC是一个单独的线程。您不应该正常调用它,因为它确实会严重影响性能。我们不支持的是测量可用RAM的数量。在多任务操作系统中很难做到这一点。 Java通过使用Xmx标志来欺骗这个问题,但这很愚蠢,因为我们想继续占用操作系统为我们提供的RAM。如果操作系统发送RAM低事件,我们将隐式运行GC。

答案 1 :(得分:1)

System.gc()的行为。

  • 它可以同步执行垃圾收集。
  • 它可能会触发异步垃圾回收。
  • 它可能会被完全忽略。

实际发生的情况取决于平台,并且取决于JVM选项。例如,有一个JVM选项可以指示JVM 完全忽略System.gc()的调用。


但是,这应该没有意义。

在大多数情况下,致电System.gc()是一个坏主意:

  • 效率低下。确实,在最坏的情况下,它效率极低。
  • 如果您是由于应用程序空间不足而这样做的话,它将无济于事。
  • 如果因为内存泄漏而这样做,将无济于事。
  • 如果因为资源泄漏而这样做,可能无济于事。
  • 如果您试图鼓励JVM将内存“返还”给操作系统,那么它可能无济于事。 (通常,JVM将需要几个完整的GC周期才能将内存还给内存。而且,如果您的应用程序的堆需求是周期性的,则JVM可能会再次向操作系统请求内存。)

在大多数情况下,都有针对上述问题的更好(更有效,更有效)的解决方案。例如,获得更多的物理内存,增加堆大小或查找并修复内存和资源泄漏。

通常,最好让JVM本身管理垃圾回收。在大多数情况下,它可以比您的应用程序做得更好。