JVM 当限制了堆内存,请问在堆内存未溢出的情况下还有哪些内存可以占用内存 2 倍甚至更多的内存

2017-07-20 10:25:51 +08:00
 ipchy
背景:现在公司想让一部分 jetty 应用上容器,然而我们启动限制了堆内存大小,同时限制了容器可用内存大小,在实际使用中发现

容器限制内存>2 倍堆内存,并且使用过程中堆内存未溢出,会出现容器内存使用完毕而此时堆内存仍然剩余

也就是说除了堆内存占用,还有某些未知的内存占用很多,我想找出来,先谢谢 dalao 提供思路,已经好几天没有进展了
1992 次点击
所在节点    程序员
6 条回复
wangdu2012
2017-07-20 10:31:03 +08:00
你要搞清楚 heap 是 java 虚拟机的,是有回收的。
容器不是虚拟机级别的。容器跑 java 虚拟机有不是只有堆要用。
sagaxu
2017-07-20 10:31:38 +08:00
besto
2017-07-20 10:32:29 +08:00
DirectByteBuffer 不管啦?
doggg
2017-07-20 10:52:00 +08:00
看不太懂题意。如果使用 Java8 的话请考虑 MetaSpace。Java8 的永久代更换为本地内存 MetaSpace。有参数可以限制。
ipchy
2017-07-20 11:11:37 +08:00
@besto 谢谢,确实是这个引起的
9percent
2017-07-20 22:52:51 +08:00
Jetty 的 buffer pool 是依 block size 倍数分配的, 极端情况下 buffer 的数目可能很大

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/376604

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX