免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1743 | 回复: 6
打印 上一主题 下一主题

关于JAVA内存问题的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-08 00:46 |只看该作者 |倒序浏览
搜了一下贴子,好像以前也有人问过,不过没人回答.现在再提出来,看看是否有合理的说法

我的一个JAVA程序,初始运行时,堆大小为10M,JAVA整个线程的大小为20M,好像比较合理.
运行了大约一个小时之后,堆大小有上涨,大约是15M左右,但整个线程的内存大小却有180M.

疑问: 除了堆之外,JAVA进程中的内存都分配到哪里去了?如何来避免或者减少这种消耗?
为何堆的增长仅为5M左右,而整个进程占用的内存却如此瀑涨?
(查过,程序本身并不存在内存泄漏)

论坛徽章:
0
2 [报告]
发表于 2006-11-08 10:56 |只看该作者
用WINDOWS的吧你是

论坛徽章:
0
3 [报告]
发表于 2006-11-08 15:05 |只看该作者
应该是jvm 的机制吧,,,它看你还有 "很多" 内存放着 "没用" ,
所以就不进行 垃圾收集了....  

哈哈,猜的..

论坛徽章:
0
4 [报告]
发表于 2006-11-08 19:29 |只看该作者
你能确保每个线程关闭的时候都把应该释放的资源释放掉了?如果你有数据库、Socket,文件等方面的连接,确保你的代码都将其关闭了?如果你使用IO很频繁,内存占用多是不可避免的,不过如果你的资源都很好得清理掉了,应该不会出错的,否则会出现OutOfMemoryError

论坛徽章:
0
5 [报告]
发表于 2006-11-10 22:10 |只看该作者
IO多怎么会造成内存占用多呢?
应该是BUFFER增加了才对啊

论坛徽章:
0
6 [报告]
发表于 2006-11-11 12:24 |只看该作者
原帖由 mandm 于 2006-11-10 22:10 发表
IO多怎么会造成内存占用多呢?
应该是BUFFER增加了才对啊

有一定道理,IO频繁的应用应该考虑尽可能重用Buffer,而不要动不动就new一个新的Buffer,内存使用会减下来,性能会有所以高的。

论坛徽章:
0
7 [报告]
发表于 2006-11-11 17:19 |只看该作者
堆是存储对象的

java程序消耗掉的内存除了堆还有存储类数据的方法区和运行时数据区(pc寄存器,java栈,本地方法栈)

其中堆和方法区是所有线程共有的,运行时数据区是每个线程专有的

有没有可能是线程比较多?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP