测试程序:
class test
{
    public static void main(String[] args)throws Exception{
        while(true){
            Thread.sleep(1000);
        }
    }
}第二部分为下面程序的打印结果:
public class mem {
     public static void main(String[] args) throws Exception{
         Runtime r = Runtime.getRuntime();
        while(true){
            System.out.println("free : "+(r.freeMemory()/1024)+"k");
            System.out.println("max  : "+(r.maxMemory()/1024)+"k");
            System.out.println("total: "+(r.totalMemory()/1024)+"k");
            Thread.sleep(1000);
        }
    }
}下面是使用不同的参数启动后的结果:
1、java test
 VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP CODE DATA COMMAND
1211m  10m 6380 S  0.0  0.1   0:00.13 1.2g   68 1.2g javafree : 127847k = 124m
max  : 1009792k = 986m
total: 128064k = 125m2、java -Xmx32m test
 VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP CODE DATA COMMAND
 216m 9.8m 6384 S  0.0  0.1   0:00.13 206m   68 216m javafree : 4334k  = 4m
max  : 31616k = 31m
total: 4544k  = 4m3、java -Xms256m -Xmx512m test
 VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP CODE DATA COMMAND
 697m  10m 6384 S  0.0  0.1   0:00.14 687m   68 697m javafree : 258120k = 252m
max  : 504896k = 493m
total: 258560k = 252m4、java -Xmx1536m test
 VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP CODE DATA COMMAND
1726m 9.8m 6384 S  0.0  0.1   0:00.13 1.7g   68 1.7g javafree : 4775k   = 4m
max  : 1514624k= 1479m
total: 4992k   = 4m5、java -Xms512m -Xmx1024m -Xss128k -Xmn256m -XX:PermSize=16M -XX:MaxPermSize=32M test
 VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP CODE DATA COMMAND
1176m  11m 6388 S  0.0  0.1   0:00.14 1.1g   68 1.1g javafree : 487587k = 476m
max  : 961216k = 938m
total: 491520k = 480mSuse系统资源使用情况(相当空闲):
top - 16:04:54 up 2 days,  7:08,  4 users,  load average: 1.02, 1.08, 1.13
Tasks: 111 total,   1 running, 109 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   8309244k total,  1541816k used,  6767428k free,   343452k buffers
Swap:  2097128k total,        0k used,  2097128k free,   817160k cached========================================================在网上查了一些资料,不过至今也无法解决的问题就是(如1中的结果),程序占用内存非常小,可为什么SWAP却有1.1G?

解决方案 »

  1.   

    SWAP?那个是虚拟内存,等你提交的。不是你耗费的。
      

  2.   

    麻烦详细说明一下,谢谢我对内存管理只是略知一二,不是很深入,“等我提交的SWAP”是什么意思?
      

  3.   

    -Xmx1024m 这个就是1G哦,拟分配给他用的,单他不一定马上用啊!linux就是这样,看上去内存都没了,可是还能运行大程序!呵呵呵! 内存管理的算法不同!
      

  4.   

    那为什么在第2个结果中,-Xmx32m,但是swap确是206M
    这个又怎么解释?
      

  5.   

    Java的内存管理是不是真的有问题,郁闷死我了,一个Applet在IE下开始占60M左右,跑着跑着可以达到占内存200M,调用GC也不好使,一直没明白怎么回事。
      

  6.   

    -Xmx32M?
    不可能的,我记着JVM最小就分配64M,至于206M,不知是不是原来的程序没有回收完毕呢?
      

  7.   

    难道你没发现?SWAP约等于r.maxMemory()/1024+300max     :   1009792k   =   986m    ---------   1.2g
    max     :   504896k   =   493m   ---------  687m
    。。