System.gc() 到底要不要显式调用啊? 
我写了几套电子商务系统,分开服务器:后台和图片服务器在一起;前台在另一台服务器上,下载的图片量大。
没有写System.gc() ,后台服务器老是崩溃,写了之后,崩溃少了,内存总算可以及时回收了,但是有时觉得一卡一卡。
有人说不需要显示调用,但是一旦取消,一会后台就崩溃了。
关于tomcat启动的参数,我也调节过,太小了马上就崩了,根本没有商量的余地;太大了,时间倒是长了,但是tomcat竟然假死!nnd。

解决方案 »

  1.   

    完全不需要jvm可以配置参数,禁止调用gc
      

  2.   

    垃圾回收策略,方式、回收方法都有关系。
    主要就是jvm参数调优
      

  3.   

    垃圾回收器,是由jvm去处理,我们无需手动调用。
    1,关于楼主下载图片出现服务器崩溃,可能是由于服务器的配置条件不好导致的,也有可能是有程序中的代码没有得到优化所引起的,lz可以从这两个方面去分析。
      

  4.   

    你调了gc,jvm也不一定执行垃圾回收。
      

  5.   

    jvm 看心情调用 gc 。。 
     你显示掉了也不好使。 
      

  6.   

    ??
    图片都是静态数据,不会执行Java代码的吧~~
      

  7.   

    首先你需要知道两个概念:JVM的gc有minor GC和major GC(也就是大家说的Full GC),JVM会很频繁的做minor GC,如果内存块占满的话,JVM会做Full GC,Full GC是对整个JVM内存堆做GC,所示耗时比minor GC要长很多。
    1,服务器老是崩溃是因为内存很快被占满,在允许的条件下你可以适当加大内存配置,用mx和ms控制内存堆大小
    -Xms
    -Xmx
    2,如果你的程序需要通过System.gc()来减少JVM崩溃的几率,那么你的程序10有8,9存在问题,需要从你程序本身去进行优化
    3,可以把GC配置为CMS回收方式,以提高回收效率
    -XX:+UseConcMarkSweepGC
    -XX:+UseParNewGC
    -XX:+UseParNewGC
    -XX:CMSFullGCsBeforeCompaction=0
    -XX:CMSInitiatingOccupancyFraction=75
    -XX:+CMSParallelReEnabled
    -XX:+CMSPermGenSweepingEnabled
    -XX:+CMSClassUnloadingEnabled
    4,-XX:+PrintGCTimeStamps  -XX:+PrintGCDetails -XX:+PrintHeapAtGC用这些参数输出GC日志,然后分析,如果你不会分析,可以把GC日志贴出来
      

  8.   

    5,System.gc()最终执行的是Full GC,这就是你出现一卡一卡的原因
      

  9.   

    是图片服务器!外加一个访问量超小的后台服务器.tomcat容器.