【问题标题】:What is effect of "System.gc()" in J2ME?J2ME 中“System.gc()”的作用是什么?
【发布时间】:2011-10-02 11:28:28
【问题描述】:

我正在用 J2ME 开发一个移动应用程序。在这里,我面临内存问题。我正面临内存不足错误。所以请给出它如何摆脱这种错误/异常、垃圾收集、J2ME 中的内存管理的想法。

我怀疑System.gc() 在 J2ME 中的作用是什么。 J2ME/Java中System.gc()Runtime.getRuntime().gc()有什么区别。

感谢和问候,

【问题讨论】:

标签: java memory-management java-me out-of-memory


【解决方案1】:

调用System.gc() 不会修复“OutOfMemoryError”。 OOME 仅在系统“尽最大努力”尝试通过垃圾收集(和其他方式)释放内存之后发生......并且未能释放足够的内存以继续。

修复 OOME 错误的方法是找出正在使用所有内存的内容并尝试对其进行处理。

可能导致 OOME 的问题包括:

  • 内存泄漏;即,您的应用中的某些内容导致许多对象在不再需要后仍保持“可访问性”。

  • 需要大量内存的数据结构或算法。

  • 内存不足,无法使用该输入数据运行应用程序。

解决此问题的第一步应该是使用分析器查看是否存在任何重大泄漏,并更一般地找出哪些数据结构正在使用所有内存。

【讨论】:

    【解决方案2】:

    运行垃圾收集器。

    调用 gc 方法提示 Java 虚拟机扩展 努力回收未使用的对象以使内存 它们目前占用可用于快​​速重复使用。当控制权返回 从方法调用来看,Java虚拟机已经尽了最大的努力 从所有丢弃的对象中回收空间。

    调用 System.gc() 实际上等同于调用:

     Runtime.getRuntime().gc()
    

    ->http://download.oracle.com/javase/6/docs/api/java/lang/System.html#gc%28%29

    【讨论】:

      【解决方案3】:

      System.gc()Runtime.getRuntime().gc() 是等价的。他们建议进行垃圾回收,但不能保证这真的会发生。

      所以,不要依赖它,事实上,你想调用它是非常罕见的。

      【讨论】:

        猜你喜欢
        • 2012-07-24
        • 1970-01-01
        • 2010-09-09
        • 1970-01-01
        • 2012-06-21
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多