我正在开发J2ME中的移动应用程序。在这里,我面临记忆问题。我面临内存不足的错误。所以请提出如何摆脱J2ME中的这种错误/异常,垃圾收集,内存管理的想法。
我怀疑J2ME中的效果System.gc()
是什么。
J2ME / Java中System.gc()
和Runtime.getRuntime().gc()
之间有什么区别。
谢谢&的问候,
答案 0 :(得分:3)
调用System.gc()
不会修复“OutOfMemoryError”。 OOME只发生在系统通过垃圾收集(和其他方式)尝试释放内存之后“尽力而为”...并且无法释放足够的内存来继续。
解决OOME错误的方法是找出正在使用所有内存的内容并尝试对其进行一些操作。
可能导致OOME的问题包括:
内存泄漏;即,你的应用程序中的某些内容导致许多对象在不再需要后仍然“可以访问”。
内存饥渴的数据结构或算法。
没有足够的内存来运行带有输入数据的应用程序。
解决此问题的第一步应该是使用分析器来查看是否存在任何重大泄漏,并更一般地了解使用所有内存的数据结构。
答案 1 :(得分:1)
运行垃圾收集器。
调用gc方法表明Java虚拟机耗费 努力回收未使用的物体以制造记忆 它们目前可用于快速重复使用。当控制返回时 从方法调用中,Java虚拟机已尽最大努力 从所有丢弃的物体中回收空间。
调用System.gc()实际上等同于调用:
Runtime.getRuntime().gc()
- > http://download.oracle.com/javase/6/docs/api/java/lang/System.html#gc%28%29
答案 2 :(得分:0)
System.gc()和 Runtime.getRuntime()。gc()是等效的。他们建议垃圾收集,但不能保证这实际上会发生。
所以,不要依赖它,事实上,你根本不想这样做。