u011856283
你好杰米
2018-06-22 05:59
采纳率: 95%
浏览 655
已采纳

【JAVA】关于一个jvm内存的问题?

请问我机器有40G内存

有两个jar程序要跑

给a程序分配Xmx30g
给b程序分配Xmx20g

请问我分配的总额超过了总量,但是比如b程序只是运行起来了,但是没有占用很多内存,a程序却需要占用20多g的内存

那么这样会出现问题么

实际情况是线上服务器已经有一个项目了,但是没有客户使用所以不消耗内存,目前有个新项目需要上服务器,但是运行的时候很耗内存,但是机器内存总共只有40g,我想能不能把目前的40g全分配给新项目,因为旧项目没有人用,这样会有问题么?(旧项目启动的时候设置了30g的内存)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • qq_26126071
    qq_26126071 2018-06-22 06:22
    已采纳

    Xmx只是设置了允许的最大内存,如果程序实际运行不需要这么多,永远到达不了你设置的数量。所以,如果旧的设置30g,新的设置40g,那么这样当新旧都到达最大数量时候可能会有问题,当然也可能都到达不了最大数。
    所以,我的建议是将旧的程序设置内存下调,是的两个程序设置的最大内存不超过机器总量。

    点赞 评论
  • weixin_38691999
    枫叶落林 2018-06-22 06:28

    能,但不推荐。
    原因:1.如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常
    2.根据Java 虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。
    3.当常量池无法再申请到内存时会抛出OutOfMemoryError 异常

    点赞 评论

相关推荐