我们应该在应用程序类onLowMemory()
的方法中使用Runtime.gc()
或System.gc()
来清除生产代码中的内存(手动垃圾收集)吗?
这是一个不好的做法,使用System.gc()
并不意味着您手动使用 gc,它只是提示 jvm 清除垃圾。最好不要像Object
中的finalize()
那样使用此方法,两者都不提供任何保证。在javadoc中Application
说系统将在从此方法返回后执行gc,并以正确的方式执行
您应该实现此方法以释放任何缓存或其他 您可能持有的不必要的资源。系统将 从此方法返回后,为您执行垃圾回收。
Application javadoc
因此,当您从此方法返回后onLowMemory()
方法中使用System.gc()
时,将是另一项垃圾回收工作。从javadoc中的提示来看,最好丢失示例中的缓存链接List<Object> bigCache = null;
方法结束后将是垃圾收集,以获取该缓存列表并释放内存。
No.来自Javadoc:
您应该实现此方法以释放您可能持有的任何缓存或其他不必要的资源。从此方法返回后,系统将为您执行垃圾回收。
为了清除内存,您可以在内部调用onLowMemory()
两者都是一样的。System.gc()
实际上等同于Runtime.gc()
。System.gc()
内部调用Runtime.gc()
。
唯一的区别是System.gc()
是一个类方法,而Runtime.gc()
是一个实例方法。因此,System.gc()
更方便。
希望你明白了。