gpt4 book ai didi

java - Java中如何持续分配内存直到分配完3GB?

转载 作者:行者123 更新时间:2023-12-01 16:56:38 25 4
gpt4 key购买 nike

我真的希望我的标题是正确的,但让我准确解释一下标题的含义。我需要编写一个程序来创建 byte Array大小为 1MB 并将其添加到 ArrayList<byte[]> 中.

我需要这样做,直到添加了 3GB 的容量。另外,每次分配后我应该使用 Thread.sleep(20) .

我想我明白实现应该是什么样子,但我在计算确切的 1MB 和变量时遇到了困难。

这是我的代码的样子:

import java.util.ArrayList;

public class MemLeak
{

public static void main(String[] args)
{
int maxSize = 3221225472; // 3GB in bytes
int startSize = 0;

byte[] byteArray = new byte[1048576]; // 1MB in bytes
ArrayList<byte[]> list = new ArrayList<byte[]>();

while (startSize != maxSize) {
list.add(byteArray);
Thread.sleep(20);
startSize = startSize + 1048576;

}

}
}

就我而言,我认为字节数组中的元素数量等于字节大小,但情况似乎并非如此。变量 int maxSize = 3221225472也超出了 int 范围。

有人能给我一些指点吗?谢谢,非常感谢!

最佳答案

如果字节数组声明移动到循环内部,则每次迭代分配 1MB。执行此操作 3072 次即可分配 3GB 的总空间。无需跟踪 maxSize。

如果目标是 ArrayList + 它的数据正好消耗 3GB 内存,那会更困难,因为 ArrayList 类消耗数据之外的自己的空间,并且它还进行自己的内部内存管理,所以当需要创建更多内部空间时,它可能会从小于 3GB 变为大于 3GB。看一下 ArrayList.add() 的源代码就明白我的意思了。

关于java - Java中如何持续分配内存直到分配完3GB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61578444/

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