Java 为什么我在processing 3中的素数分解代码使用了这么多内存,我如何使它使用更少的内存?

Java 为什么我在processing 3中的素数分解代码使用了这么多内存,我如何使它使用更少的内存?,java,memory,processing,prime-factoring,Java,Memory,Processing,Prime Factoring,我写了一些代码来创建每个数字的素数分解列表。该代码在生成1000000个或更少元素的列表时可以正常工作,但当我尝试生成更大的列表时,内存不足。我能够在大约100秒内以处理的默认内存限制256MB列出1000000个元素。将内存限制增加到1024MB,代码运行约45分钟,然后在尝试创建2000000个元素的列表时,内存不足。我相信这个问题与内存管理有关 这是密码 int listLength=1000; 布尔失败=错误; 无效设置(){ int time=millis();//记录做事情需要多长时

我写了一些代码来创建每个数字的素数分解列表。该代码在生成1000000个或更少元素的列表时可以正常工作,但当我尝试生成更大的列表时,内存不足。我能够在大约100秒内以处理的默认内存限制256MB列出1000000个元素。将内存限制增加到1024MB,代码运行约45分钟,然后在尝试创建2000000个元素的列表时,内存不足。我相信这个问题与内存管理有关

这是密码

int listLength=1000;
布尔失败=错误;
无效设置(){
int time=millis();//记录做事情需要多长时间
//获取基本数据
String[]primesString=loadStrings(“primes.txt”);
int[]素数=新的int[primesString.length];

对于(int i=0;i而言,主要问题是,将整个输出生成内存中的字符串列表(
list
),并将其写入最后的文件中。 逐行写入文件。无需将字符串保留在内存中。使用
.println()
将每行写入文件(请参阅)。
此外,无需将
素数字符串列表保留在内存中。在您的算法中,只需要整数素数。将读取源数据的代码移动到函数中,则字符串列表仅为函数范围内的局部字符串:

int listLength=1000;
布尔失败=错误;
int[]GetPrimeData()
{
String[]primesString=loadStrings(“primes.txt”);
int[]素数=新的int[primesString.length];

对于(int i=0;iFantastic),这修复了问题。您发布的已编辑代码缺少子字符串(0,length-1)部分,该部分将额外的星号从末尾切掉。