V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ipchy
V2EX  ›  程序员

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

  •  
  •   ipchy · 2017-07-20 10:25:51 +08:00 · 1888 次点击
    这是一个创建于 2465 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:现在公司想让一部分 jetty 应用上容器,然而我们启动限制了堆内存大小,同时限制了容器可用内存大小,在实际使用中发现

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

    也就是说除了堆内存占用,还有某些未知的内存占用很多,我想找出来,先谢谢 dalao 提供思路,已经好几天没有进展了
    6 条回复    2017-07-20 22:52:51 +08:00
    wangdu2012
        1
    wangdu2012  
       2017-07-20 10:31:03 +08:00 via iPhone
    你要搞清楚 heap 是 java 虚拟机的,是有回收的。
    容器不是虚拟机级别的。容器跑 java 虚拟机有不是只有堆要用。
    sagaxu
        2
    sagaxu  
       2017-07-20 10:31:38 +08:00
    besto
        3
    besto  
       2017-07-20 10:32:29 +08:00
    DirectByteBuffer 不管啦?
    doggg
        4
    doggg  
       2017-07-20 10:52:00 +08:00
    看不太懂题意。如果使用 Java8 的话请考虑 MetaSpace。Java8 的永久代更换为本地内存 MetaSpace。有参数可以限制。
    ipchy
        5
    ipchy  
    OP
       2017-07-20 11:11:37 +08:00
    @besto 谢谢,确实是这个引起的
    9percent
        6
    9percent  
       2017-07-20 22:52:51 +08:00
    Jetty 的 buffer pool 是依 block size 倍数分配的, 极端情况下 buffer 的数目可能很大
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2806 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:17 · PVG 10:17 · LAX 19:17 · JFK 22:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.