请教关于JVM设置的问题

tank212 2014-09-26 12:00:58
我在一个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启动后还可以动态的修改最大堆内存设置么?
...全文
166 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tank212 2014-09-28
  • 打赏
  • 举报
回复
引用 4 楼 shui878412 的回复:
修改成-Xmx512m可以暂时解决问题,但是如果后续数据量更大的话也可能会报内存错误。
我想你可以看下是否是java程序有问题,JVM是可以自动管理内存的,256/512M对于很多中小型软件来说是足够的,即使不够的话,也不一定会抛内存溢出异常,最多是就是卡一点,慢一点而已. 猜想你的java程序中可能是有处理大数据的功能,并且是将其一次全部加载到内存中的,一次将256M的数据加载到内存中,个人认为不太合适.
恩,是的,先开始已经优化了一部分了,没想到剩下的数据也会变这么大,看来还要继续分析下
tank212 2014-09-28
  • 打赏
  • 举报
回复
引用 3 楼 dollyn 的回复:
1. 没什么好分析的,跟电脑无关,跟你的业务相关,你的业务需要多少内存就得设多大。 电脑内存不足? 升级。。。 2. 是的,实际上,剩余可用内存即使大于512,也未必会成功,所以你设置的值实际上要小很多才行 3. 据我所知不能
悲剧,真是这样啊,那看来只有提供用户自己根据电脑手动配置这一个方法了
蜗牛_snail 2014-09-28
  • 打赏
  • 举报
回复
修改成-Xmx512m可以暂时解决问题,但是如果后续数据量更大的话也可能会报内存错误。
我想你可以看下是否是java程序有问题,JVM是可以自动管理内存的,256/512M对于很多中小型软件来说是足够的,即使不够的话,也不一定会抛内存溢出异常,最多是就是卡一点,慢一点而已. 猜想你的java程序中可能是有处理大数据的功能,并且是将其一次全部加载到内存中的,一次将256M的数据加载到内存中,个人认为不太合适.
霜之哀伤 2014-09-26
  • 打赏
  • 举报
回复
1. 没什么好分析的,跟电脑无关,跟你的业务相关,你的业务需要多少内存就得设多大。 电脑内存不足? 升级。。。 2. 是的,实际上,剩余可用内存即使大于512,也未必会成功,所以你设置的值实际上要小很多才行 3. 据我所知不能
tank212 2014-09-26
  • 打赏
  • 举报
回复
顶一下,求指导
tank212 2014-09-26
  • 打赏
  • 举报
回复
请高手解答下啊

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧