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

请问我机器有40G内存

有两个jar程序要跑

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

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

那么这样会出现问题么

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

2个回答

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!