[求助]java的内存问题

lingyunzhiyu 2013-03-19 03:07:04
用java写的一个服务,其中内存部分采用了DirectByteBuffer和常规的jvm对象。
想象:内部不断增大。
jvm的内存设置700M DirectByteBuffer设置为300M。

不断增加 直到将机器的4个g内存全部吃掉,然后就崩溃。

根据jmap等内存分析,没有任何问题。

有没有人遇到过同类的事情。
...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2013-03-20
  • 打赏
  • 举报
回复
内存用完了没问题? http://www.udpwork.com/item/3092.html
冰思雨 2013-03-20
  • 打赏
  • 举报
回复
DirectByteBuffer 我记得API中说过,这个对象的使用场景,是不频繁创建和销毁的场景中的。 也就是说,这个对象,一般都用在,程序开始初始化一个这样的缓冲区,之后,就基本不会销毁,或者调整缓冲区的容量了。 据说是因为,这个缓冲区,直接使用操作系统底层的内存空间,分配和释放操作比较耗费操作系统的资源,但是,使用起来(写入数据,读取数据)的效率会比较高。 我估计,楼主爆掉内存的原因,肯定是在程序里面频繁的创建这类缓冲区对象(DirectByteBuffer 对象),因为JVM对已创建的对象的垃圾回收,不是实时的, 并且,这类对象的回收过程很费时费力,所以,这类对象的回收会被滞后和缓慢, 你的程序如果频繁创建这类缓冲区,造成操作系统没有及时回收这类资源,最终内存爆了。 建议楼主,先换成普通的ByteBuffer试试,我们创建缓冲区,一般也不会玩300M这么大,一般上百K就算大的了。
zoeg 2013-03-19
  • 打赏
  • 举报
回复
DirectByteBuffer的内存不在heap范围之内
七神之光 2013-03-19
  • 打赏
  • 举报
回复
内存吃完肯定拒绝服务啊

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧