关于java吃内存的问题

    
wljun1024
04-04-20 7 1120

我用java做了一个多线程的程序,然后在linux下运行。在启动后使用ps -ef可以看到好多我运行的程序,再使用top -p pid 可以看到每个进程的所耗的内存大概为14M左右,但是我在程序中用Runtime.getRuntime().totalMemory() 仅为2031616,而且Runtime.getRuntime().freeMemory()看到的也是在不停的释放内存,但是我通过top看到我机子的内存时不停的增长,而且将程序中止,机子内存也不会下降很多。
请教各位大虾这是什么原因,我先谢谢大家了。

banq
2004-04-22 11:48

你没有理解Java的资源回收基础知识,JVM回收内存只是在内存吃紧的情况下才启动,所以机子内存大概降低到只有一点点时,JVM才可以回收资源,也只是回收一点点。

wljun1024
2004-04-22 16:26

那以bang的意思是不是,如果用java开发程序将会出现因为jvm回收内存不及时而导致系统崩溃的危险。可是这种情况该如何避免啊。我如何才能让jvm消耗内存到最小啊

fiddle
2004-05-26 11:16

应该用的是linux9以下的系统吧?嘿嘿

凤舞凰扬
2004-05-28 22:24

banq兄对JVM释放内存理解有误啊!JVM释放内存不是在内存吃紧的时候才释放(当然内存吃紧的时候会强制要求释放),从JDK1.2后,内存的释放是分散的,甚至随机的(只所以说随机是它有自己的算法,而不是严格的某种简单约束),这样,才可以让用户忽略内存回收所带来的系统代销。
至于楼主,我觉得完全没有必要担心内存,从来没有说用java开发一个内存小的系统(因为java的系统对内存的要求是动态的,而不是固定的),并且java开发的系统并不会对系统使用其他软件带来灾难(java的内存严格控制在虚拟机范畴之内)

2Go 1 2 下一页