内存只增不减 虚拟机不能及时释放 改怎么办

来源:百度知道 编辑:UC知道 时间:2024/06/03 02:26:18
当有一个用户请求访问服务器时 服务器会给用户创建一个会话 并针对用户请求创建对象 假如用户的请求要创建很多对象时 会很消耗内存 当用户关闭这次会话之后 服务器并不会马上去释放内存 而是当内存不够用的时候才去释放内存 因此内存在多用户并发请求的时候 内存只增不减 当内存达到剩下两三百M的时候 虚拟机开始释放内存 可当这时候用户突然增加的时候两三百M的内存很显然是不够的 也就导致了内存溢出
在这样的情况下我试图用gc去回收内存
可是发现没有用 gc只能回收少部分的内存 还有大部分的内存没有能被释放
请高手指点!!!!

不知道楼主所谓的服务器是指什么,

这个应用是WEB应用,还是application

以前做WEB的时候,做了两点:
1.扩大JVM
2.做一个线程任务,定时调用System.gc()

清除的很干净,

但应用程序就做不到这一点,

我考虑的结果是gc这个方法也是sun提供的一个需要系统来重写的方法

System指的是系统,

应用程序的System指的是操作系统

而WEB应用指的是WEB服务器,服务器厂商都做了内存回收机制,因为WEB应用中,在tomcat和weblogic中system.gc()方法都是很快见效的,

以上只是我根据结果的一个推测,没有其它的有力支持

System.gc()?
RunTime.getRunTime.gc()??
开发人员不能保证每次回收会成功,本来是系统自动回收的。

加点内存就完了呗