BigInteger耗费了大量的记忆

时间:2016-04-13 08:38:01

标签: java memory garbage-collection biginteger jconsole

我已经测试了以下代码:

bigInteger

我从jconsole获得了以下情节:

enter image description here

为什么会这样?如果我的csv只有64位长度,为什么mod操作会占用大量内存?

2 个答案:

答案 0 :(得分:7)

这不会留下很多内存,而是会产生大量垃圾。

    while (!Thread.interrupted()) {
        bigInteger.mod(n); // create a new objects each time.
    }

这个循环尽可能快地创建垃圾(也有一点CPU工作)因此你应该期望看到内存使用非常活跃。

  

如果我的bigInteger只有64位长度,为什么mod操作会占用大量内存?

这使得内存使用率更高,因为执行计算的实际CPU花费相对较少。如果你有一个更大的数字,与创建对象相比,它将花费更多的时间来使用CPU。因为与使用的CPU相比,它花费更多的时间来创建垃圾。

BTW我建议您使用Java 6中的VisualVM和Java 7中的Java Mission Control,而不是使用jconsole。

答案 1 :(得分:3)

函数msxml6.dll正在使用BigInteger.remainder函数,该函数创建了少量BigInteger.mod个对象。

你通过调用来创建很多对象:

MutableBigInteger