Nokia 的文档Known Issues In The Nokia 6600 MIDP 2.0 Implementation v1.7说:
2.15.1 Garbage collecting
Description
Calling the System.gc() method results in extreme slowness and jamming. In Monty 1.0 VM, garbage
collection is different and every time System.gc is called, the entire memory is really cleared.
This is an extremely slow process!
Solution
Do not call the System.gc method at all, or call the System.gc() garbage collecting method only
in non-time-critical situations, such as screen transitions, state transitions, pause states,
etc. If the System.gc() method is used, it is recommended to add a short delay (~20-50 ms) after
the method call to ensure the sufficient time for the garbage collection, as in the following
example
System.gc();
Thread.sleep(delay);
delay = 20-50 ms
调用 System.gc()将会真正的清除内存条目,而这是一个极慢的过程。
解决:1.不调用 System.gc()
2.在屏幕切换,状态转换,暂停状态等情况下调用,并且在调用 System.gc() 时加上个短暂的延时
如:
System.gc();
Thread.sleep(delay);
delay = 20-50 ms
分享到:
相关推荐
- 避免显式调用`System.gc()`,因为这可能会增加主GC的频率。 - 尽量减少临时对象的使用,避免无谓的对象创建和销毁。 - 不再使用对象时,将其显式设置为`null`,帮助GC判断对象是否可回收,提高效率。 - 使用`...
6. **ListView与内存管理**:面试中可能会讨论如何节约内存,如使用弱引用避免内存泄漏,合理使用Bitmap的配置以减小内存占用,以及何时调用System.gc()或Activity的finish()方法进行内存回收。 7. **Intent的作用*...
垃圾回收算法(JVM)..........63 7、垃圾回收机制和调用 System.gc()的区别? .64 8. 类加载过程90 9. 反射..........101 10. 多线程和线程池........112 11.HTTP、HTTPS、TCP/IP、Socket 通信、三次握手四次挥手...
在描述中的例子中,尽管每次调用`System.gc()`时并未立刻看到垃圾回收的发生,但随后出现了垃圾回收信息的输出,这可能是因为JVM内部的工作机制。JVM通常会维护多个垃圾回收线程,这些线程与程序的执行线程交替运行...
3. 显式调用System.gc():虽然不推荐,但手动调用会请求进行Full GC。 4. G1垃圾收集器的混合收集(Mixed GC)失败:G1在尝试进行混合收集时,如果无法满足目标空间需求,会退化为Full GC。 5. CMS(Concurrent Mark...
1. **手动调用System.gc()**: 尽管可以尝试通过调用`System.gc()`来触发垃圾回收,但这并不总是最佳实践。调用此方法会导致当前线程暂停,等待GC完成,这可能会影响用户体验。而且,GC的工作方式是分批回收,可能...
在必要时调用system.gc()可以请求系统进行垃圾回收,但不保证立即执行,因为GC的工作取决于当前系统的状态。通常,过度依赖system.gc()可能导致性能下降,应该避免频繁使用。 此外,BroadcastReceiver(广播接收者...
- **紧急情况**:当程序遇到内存不足的情况时,可以尝试调用`System.gc()`来尝试释放一些内存。 - **测试目的**:在开发阶段,为了模拟特定的运行环境,可能会手动触发垃圾回收以观察程序的行为。 **3.3 注意事项**...
调用System.gc(), 传入对象的引用作为参数。 D. 调用Runtime.gc(). E. 将所有对象引用设置为新值(比如null)。 正确答案是A。B和D选项虽然可以调用,但并不保证垃圾收集器会立即执行,因为可能有更高优先级的线程...
首先,我们怀疑是代码中是否调用了 System.gc(),从而导致 Full GC。使用反射去监控 direct memory,发现 direct memory 的使用率始终在 10% 左右,不可能去调用 System.gc()。而且,此时去查看 JVM 参数已经禁止...
调用`System.gc()`会建议JVM执行全局的垃圾回收,包括新生代和老年代。然而,这并不意味着垃圾回收一定会立即进行,因为JVM可能有自己的垃圾回收策略。频繁使用`System.gc()`可能导致应用程序性能下降,因为它会中断...
- 开发者可以重写此方法来释放资源,但无法保证JVM何时调用它。 2. **`System.gc()`方法:** - 这是一个提示JVM执行垃圾回收的方法,但JVM不一定会立即执行。 - 使用`System.gc()`通常会导致性能下降,因此建议...
虽然GC提供了一定程度的资源管理保障,但在某些情况下,如大型模块退出时,主动调用`GC.Collect()`可以帮助确保及时释放资源,提高系统效率。不过,频繁地调用`GC.Collect()`可能会降低性能,因此一般只在确实需要时...
6. **System.gc()的使用**:尽管可以调用`System.gc()`建议JVM进行垃圾收集,但不应过度依赖这个方法,因为垃圾收集器何时执行、是否执行是不确定的,过度调用可能会增加系统开销,影响性能。 7. **内存泄漏与内存...
实际上调用 System.gc() 就相当于调用 Runtime.getRuntime().gc() 方法。 3. Error 和 Exception 的区别: Error 是表示由 JVM 进行处理,是 JVM 出错。Exception 是可以由程序进行处理的,使用 try..catch 进行...
- **强制垃圾回收**:在计时前后的`System.gc()`调用虽然可以减少垃圾回收的影响,但也会增加额外的时间消耗。 - **系统时间精度**:`System.currentTimeMillis()`返回的是当前系统时间,其精度取决于操作系统的时钟...
2. `gc()`:虽然在`System`类中也有这个方法,但它实际是调用了`Runtime.getRuntime().gc()`。 3. `currentTimeMillis()`:返回当前时间的毫秒数,常用于计算时间差。 4. `getProperties()`:返回系统属性的属性列表...