gpt4 book ai didi

java - BigInteger 占用大量内存

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:26 34 4
gpt4 key购买 nike

我有以下代码要测试:

import java.math.BigInteger;
import java.util.Random;

public class TestBigInteger {

public static void main(String[] args) {
BigInteger bigInteger = BigInteger.probablePrime(32, new Random())
.multiply(BigInteger.probablePrime(32, new Random()));
BigInteger n = BigInteger.probablePrime(20, new Random());
while (!Thread.interrupted()) {
bigInteger.mod(n);
}

}
}

我从 jconsole 得到了以下图:

enter image description here

为什么会这样?如果我的 bigInteger 只有 64 位长度,为什么 mod 操作真的需要很多内存?

最佳答案

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

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

此循环会尽可能快地产生垃圾(也需要一些 CPU 工作)因此您应该会看到内存使用非常活跃。

Why mod operation takes really a lot of memory, if my bigInteger is only 64 bit length?

这使得内存使用率更高,因为实际花费在计算上的 CPU 量相对较小。如果你有一个更大的数字,与创建对象相比,它会花更多的时间使用 CPU。事实上,与它使用的 CPU 相比,它花费更多的时间来制造垃圾。

顺便说一句,我建议您使用 Java 6 中的 VisualVM 和 Java 7 中的 Java Mission Control,而不是 jconsole。

关于java - BigInteger 占用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592916/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com