java 内存不断增加_具有16GB虚拟内存并不断增长的Java程序:这有问题吗?

在Mac OSX 5.8上,我有一个Java程序可以在100%CPU上运行很长时间-

几天或更长时间(这是一个分析并发程序的模型检查器,因此或多或少会出现这种情况)。但是,如OSX的“活动监视器”中所示,其虚拟内存大小在一天左右的时间后变得巨大:现在,它已达到16GB,并且还在不断增长。物理内存使用率大致稳定在1.1GB左右。

我想知道:16 GB(并且正在增长)是否是可能会减慢我的程序速度的问题的征兆?

I start the program with "java -Xmx1024m -ea"

java version "1.6.0_24"

Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-9M3326)

Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode)

感谢大家的建议。我将尝试一些答案中给出的概要分析建议,然后再返回(由于运行时间较长,可能要花一些时间)。

为了回答以下几点,模型检查器几乎不执行I /

O(仅打印语句,具体取决于调试设置)。在我使用的模式下,它没有GUI。我不是模型检查器的主要作者(尽管我已经研究了模型检查器的一些内部结构),但是我不认为它使用了JNI。[

/ Sun的JVM创建很多线程(请参阅下面的说明)。

额外的虚拟内存并没有导致模型检查器死亡,但是根据打印输出的频率,随着虚拟内存使用率的增加,它逐渐越来越慢地运行。(不过,这可能是由于垃圾收集越来越多所致。)我计划星期一在Windows计算机上尝试该操作,以查看是否发生相同的问题。

一些额外的解释:我正在运行的模型检查器(JPF)本身是在Oracle /

Sun的JVM下运行的几乎完整的JVM(完全用Java编写)。当然,作为虚拟机,JPF高度专业化以支持模型检查。

这有点违反直觉,但这意味着即使我要进行模型检查的程序被设计为多线程的,就Sun的JVM而言,也只有一个线程:一个正在运行的JPF。JPF仿真程序在模型检查过程中需要的线程。

我相信斯蒂芬·C(Stephen C)指出了问题所在。Roland

Illig给了我验证的工具。我对使用JNI错了。JPF本身不使用JNI,但是它允许插件,并且JNI已被配置的插件之一使用。幸运的是,我可以使用等效的纯Java插件。初步使用其中之一表明在最近几个小时内虚拟内存没有增长。感谢大家的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值