现在有这么个情况,需要导出数据,但是数据量很大,多的是时候上百万,问题是比如,导出50w的数据需要2g的内存,但是导出完成后,我发现这个2g内存并没有马上释放,我不懂了,改关闭的流我都close了,请问大神,这个情况正常吗,这个2g内存不能马上释放吗。

解决方案 »

  1.   

    没有立即释放是正常的,一般都是在GC的时候,才回收的。
    这还要看你JVM的参数设定,如果新生代的可用小于2G的话,那么这写数据很可能就直接进入老年代了,而老年代只有Full Gc才会回收。
      

  2.   

    对象用完之后赋值null,可以让GC及时回收
      

  3.   

    你可以用jvisualvm.exe,看下2G的内存在什么地方,是什么对象占用了这么大的内存。
      

  4.   

    看你设置的虚拟机新生代内存大小了,想要立即执行gc的话,你可以把所有对象置为null