Codenameone code name One中的System.gc()

Codenameone code name One中的System.gc(),codenameone,Codenameone,System.gc()()是否在Codename One中执行某些操作 在XCode中评测Ram时,我在Codename One应用程序中尝试了它,但似乎忽略了System.gc()。System.gc()已实现,但它是异步的,因为gc是一个单独的线程。您不应该正常调用它,因为它会严重影响性能。我们不支持的是测量可用RAM的数量。这在多任务操作系统中有点难做到。Java通过使用Xmx标志来实现这一点,但这很愚蠢,因为我们希望继续占用操作系统为我们提供的RAM。如果操作系统发送RAM低事件,我们将

System.gc()
()是否在Codename One中执行某些操作


在XCode中评测Ram时,我在Codename One应用程序中尝试了它,但似乎忽略了
System.gc()

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

系统.GC()的行为

  • 它可以同步执行垃圾收集
  • 它可能触发异步垃圾回收
  • 它可能被完全忽略
实际发生的情况取决于平台,并且取决于JVM选项。例如,有一个JVM选项指示JVM完全忽略对
System.gc()
的调用


然而,这应该是没有实际意义的

在大多数情况下,调用
System.gc()
是个坏主意:

  • 这是低效的。事实上,在最坏的情况下,它的效率极低
  • 如果您这样做是因为您的应用程序空间不足,那么它不会有帮助
  • 如果你这样做是因为你有一个内存泄漏,它不会有帮助
  • 如果你这样做是因为你有一个资源泄漏,它可能没有帮助
  • 如果您试图鼓励JVM将内存“返还”给操作系统,那么它可能不会有帮助。(JVM返回内存通常需要几个完整的GC周期。如果应用程序的堆要求是循环的,JVM可能会再次向操作系统请求内存。)
在大多数情况下,以上问题都有更好(更有效、更有效)的解决方案。例如,获取更多物理内存,增加堆大小,或者查找并修复内存和资源泄漏

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