当前位置: 代码迷 >> J2SE >> 请问关于JVM设置的有关问题
  详细解决方案

请问关于JVM设置的有关问题

热度:63   发布时间:2016-04-23 20:15:02.0
请教关于JVM设置的问题
我在一个c++系统中使用jni调用java程序。先默认设置MaxHeapSize = -Xmx256m,但有时候由于数据量过大,导致jvm内存不足,java程序运行过程中会报outofmemary。修改成-Xmx512m可以暂时解决问题,但是如果后续数据量更大的话也可能会报内存错误。
看了好多jvm的帖子,都介绍理论上jvm内存可以达到的最大值,我在实际设置的时候,如何设置MaxHeapSize呢?
一个4G内存的机器,windows操作系统,jvm启动的时候是检查操作系统当前剩余内存(比如剩余1234M)是否满足MaxHeapSize设置,还是检查操作系统中用户进程可使用的内存(比如2G)是否满足MaxHeapSize设置?

我的问题是:
1. 如何能够分析出适合的最大堆大小设置呢?
2. 如果在我的程序运行过程中,操作系统当前剩余的内存不到512m,是不是会启动jvm失败啊?
3. jvm启动后还可以动态的修改最大堆内存设置么?
------解决思路----------------------
1. 没什么好分析的,跟电脑无关,跟你的业务相关,你的业务需要多少内存就得设多大。 电脑内存不足? 升级。。。
2. 是的,实际上,剩余可用内存即使大于512,也未必会成功,所以你设置的值实际上要小很多才行
3. 据我所知不能
------解决思路----------------------
修改成-Xmx512m可以暂时解决问题,但是如果后续数据量更大的话也可能会报内存错误。

我想你可以看下是否是java程序有问题,JVM是可以自动管理内存的,256/512M对于很多中小型软件来说是足够的,即使不够的话,也不一定会抛内存溢出异常,最多是就是卡一点,慢一点而已.
猜想你的java程序中可能是有处理大数据的功能,并且是将其一次全部加载到内存中的,一次将256M的数据加载到内存中,个人认为不太合适.
  相关解决方案