GC处理的只是堆内存的资源吧,屏幕资源还是要你自己释放的,写在你自己的finalize方法里。所以object提供了finalize方法以供复写,类似于C++的析构吧。
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了江津免费建站欢迎大家使用!
gc()只不过会向JVM发出这样一个申请
虽然系统并不一定会调用垃圾收集,但在某些情况下还是有意义的。
比如即将开辟大量内存之前使用手动请求gc,可能会比等系统自动调用gc来说让用户的感觉更加流畅。
不用手动调,即使你是搞内存型程序,你在调用gc时jvm也会有它的调度规则,不是你一调用就开始回收垃圾,所以在编程时注意释放没用的资源,尤其是在线程中,因为线程没结束有些资源是无法释放的。
没听说过有命令行能让一个正在运行的程序 gc 的,但 jdk 自带了 jconsole 能连接到本地的 JVM 进程,然后从它的 JMX 方法中找 vm 的 gc 方法。都有界面的,你只需要先连接成功本地的 jvm 进程就可以了。
Java的公有API可以主动调用GC的有两种办法,一个是
System.gc();
// 或者下面,两者等价
Runtime.getRuntime().gc();
还有一个是JMX:
java.lang.management.MemoryMXBean.gc()
作用跟System.gc()也是类似的。
MemoryMXBean.gc()和System.gc()的内部实现都是Runtime.getRuntime().gc(),从效果上说两者一模一样没有区别。
程序员是无法让System.gc();按照规则调用的,你可以在程序启动过程中写上这段代码,不过至于什么时候调用就要看JVM了.
不过,觉得你的程序或许应该有地方资源泄漏了吧,假如你的机器是2G内存,一般运行WindowsXP,大概也就用1/4内存,再加上的JVM,1G应该搞定了,剩下的1G,你用来加载信息,个人觉得,如果启动就死是不太可能的,如果运行一段时间,程序写的不完善可能会死掉,个人建议你还是好好看看自己的程序吧,如果确认程序没问题,那就只有加内存了,没有别的办法,光靠JVM的垃圾回收,效果不是很多.