System.gc() 代号一
System.gc() in Codename One
System.gc()
(https://www.codenameone.com/javadoc/java/lang/System.html#gc--) 是否在代号一中做了什么?
我在 XCode 中分析 Ram 时在 Codename One 应用程序中尝试过它,但 System.gc()
似乎被忽略了。
System.gc()
已实现,但它是异步的,因为 GC 是一个单独的线程。您不应该正常调用它,因为它确实会严重影响性能。我们不支持测量可用 RAM 的数量。这在 multi-tasking OS 中有点难做到。 Java 通过使用 Xmx
标志来解决这个问题,但这很愚蠢,因为我们想继续占用 OS 为我们提供的 RAM。如果 OS 发送 RAM 低事件,我们 运行 GC 隐式。
System.gc()
的行为。
- 它可能会同步执行垃圾回收。
- 它可能会触发异步垃圾回收。
- 可以完全忽略。
实际发生的情况取决于平台,并且取决于 JVM 选项。例如,有一个 JVM 选项指示 JVM 完全忽略 对 System.gc()
.
的调用
但是,这应该没有实际意义。
在大多数情况下调用 System.gc()
是个坏主意:
- 效率低下。事实上,在最坏的情况下,它的效率低得可怕。
- 如果您这样做是因为您的应用程序在 space 中是 运行,那将无济于事。
- 如果你这样做是因为内存泄漏,那将无济于事。
- 如果你这样做是因为你有资源泄漏,它可能无济于事。
- 如果您试图鼓励 JVM "give memory back" 到 OS,它可能无济于事。 (在 JVM 返回内存之前通常需要几个完整的 GC 周期。如果您的应用程序的堆要求是循环的,JVM 可能会再次向 OS 请求内存。)
在大多数情况下,以上问题都有更好(更有效,更有效)的解决方案。例如,获取更多物理内存、增加堆大小或查找并修复内存和资源泄漏。
一般来说,最好让JVM自己来管理垃圾回收。在大多数情况下,它可以比您的应用程序做得更好。
System.gc()
(https://www.codenameone.com/javadoc/java/lang/System.html#gc--) 是否在代号一中做了什么?
我在 XCode 中分析 Ram 时在 Codename One 应用程序中尝试过它,但 System.gc()
似乎被忽略了。
System.gc()
已实现,但它是异步的,因为 GC 是一个单独的线程。您不应该正常调用它,因为它确实会严重影响性能。我们不支持测量可用 RAM 的数量。这在 multi-tasking OS 中有点难做到。 Java 通过使用 Xmx
标志来解决这个问题,但这很愚蠢,因为我们想继续占用 OS 为我们提供的 RAM。如果 OS 发送 RAM 低事件,我们 运行 GC 隐式。
System.gc()
的行为。
- 它可能会同步执行垃圾回收。
- 它可能会触发异步垃圾回收。
- 可以完全忽略。
实际发生的情况取决于平台,并且取决于 JVM 选项。例如,有一个 JVM 选项指示 JVM 完全忽略 对 System.gc()
.
但是,这应该没有实际意义。
在大多数情况下调用 System.gc()
是个坏主意:
- 效率低下。事实上,在最坏的情况下,它的效率低得可怕。
- 如果您这样做是因为您的应用程序在 space 中是 运行,那将无济于事。
- 如果你这样做是因为内存泄漏,那将无济于事。
- 如果你这样做是因为你有资源泄漏,它可能无济于事。
- 如果您试图鼓励 JVM "give memory back" 到 OS,它可能无济于事。 (在 JVM 返回内存之前通常需要几个完整的 GC 周期。如果您的应用程序的堆要求是循环的,JVM 可能会再次向 OS 请求内存。)
在大多数情况下,以上问题都有更好(更有效,更有效)的解决方案。例如,获取更多物理内存、增加堆大小或查找并修复内存和资源泄漏。
一般来说,最好让JVM自己来管理垃圾回收。在大多数情况下,它可以比您的应用程序做得更好。