請教一個java程式記憶體釋放的問題

yanghengli發表於2006-04-21
我的程式使用以下方式啟動:

nohup java -Xms4m -Xmx16m -cp $HOME/lib/ 。。。

使用以上方式啟動後,使用ps列出了多個執行緒,
我在啟動程式中又啟過幾個執行緒

之後,我想檢視我的程式當前所使用記憶體空間的情況
根據pid,開啟 /proc/$pid/status檔案
發現這裡面顯示的記憶體使用情況和我分配的有很大的差值
檔案內容如下:

Name: java
State: S (sleeping)
Tgid: 30085
Pid: 30085
PPid: 1
TracerPid: 0
Uid: 1009 1009 1009 1009
Gid: 100 100 100 100
FDSize: 256 /FD的最大值?
Groups: 100
VmSize: 210520 kB //該程式總共所佔的虛擬空間的總數
VmLck: 0 kB //鎖定的程式虛擬空間數
VmRSS: 19836 kB //RSS空間
VmData: 155944 kB //DATA空間
VmStk: 2032 kB //棧空間
VmExe: 56 kB //TEXT空間
VmLib: 7040 kB //動態連結庫空間
SigPnd: 0000000000000000//下邊三項是pend, block, ignore的訊號量的對應位
SigBlk: 0000000000000004
SigIgn: 8000000000000003
SigCgt: 1000000380005ccc
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000

因為單獨有很多appliction啟動,都有這種情況,所以佔用了大量的記憶體,使用free命令發現cache怎麼也不能釋放
free
total used free shared buffers cached
Mem: 4011076 3601104 409972 0 320044 2351272
-/+ buffers/cache: 929788 3081288
Swap: 8251336 4964 8246372

請教一下這裡的高手,已經檢查了程式,資源釋放這些問題都沒有,就是不知道程式為什麼佔用這麼多的記憶體

相關文章