日期:2014-05-20  浏览次数:20622 次

Java的GC机制到底怎么回事
小弟最近在搞一个JavaSwing的项目,程序运行久了,内存使用也越来愈高,从开始的200M一直飙到1G多。小弟甚为不解!JVM的GC到底有没有起作用,程序里我已经把不需要的对象滞空了,而且也监控到程序运行时GC的调用频率还是蛮高的,可是就是内存下不去。。。求高手指教

------解决方案--------------------
有些资源存在引用,无法释放吧
对象在不用的时候,设为null,各种对象的应用也设置为null,对于各种资源的操作,如流,记得要关闭
------解决方案--------------------
你用什么监控的内存,如果只是用自带的,比如windows的任务管理器,Linux的top命令,
你看到的内存肯定是一直涨的,因为GC在内存不够的时候会继续申请内存,就算GC完了,你用这两个工具看到的内存还是扩大以后的,虽然有很多并没有用到
要看实际用到的内存需要用System的totalMemory()-freeMemory(),
这个才是当前用到的内存,
好像有个参数可以设置在多少比例内存没有被使用的时候把内存归还给系统,
我没用过,你可以google下
不过看你说的,内存很高的时候GC都还是很频繁,那多半是有内存泄漏
并不是没用的对象赋值null就能解决的,
很肯能是有存活的对象引用到了没用的对象
一样会造成没有释放掉,
具体你可以dump下来用工具查一下就知道了