Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何保持在记忆的范围内_Multithreading_Scala_Out Of Memory - Fatal编程技术网

Multithreading 如何保持在记忆的范围内

Multithreading 如何保持在记忆的范围内,multithreading,scala,out-of-memory,Multithreading,Scala,Out Of Memory,我正试图运行一个程序来计算方程式中缺失的第四个值,但我的内存一直不足。是否有一种方法可以保留在内存中,或者我是否需要以不同的格式格式化代码 import scala.util.control.Breaks._ val p1=1<<56 val p2=1<<52 val p3=0<<32 (1L to 100000000).par.foreach( (x: Long) =>{ if(((p1|p2)|(p3|x)).toLong==765611

我正试图运行一个程序来计算方程式中缺失的第四个值,但我的内存一直不足。是否有一种方法可以保留在内存中,或者我是否需要以不同的格式格式化代码

import scala.util.control.Breaks._

val p1=1<<56
val p2=1<<52 
val p3=0<<32
(1L to 100000000).par.foreach( (x: Long) =>{
    if(((p1|p2)|(p3|x)).toLong==76561198036298569L)
    {
        println("FOUND: "+x)
        break
    }
})
导入scala.util.control.Breaks_
val p1=1您有许多选择(类似的选择已经被建议);您不必在整数对象中存储整数;您可以将它们存储为位序列,甚至可以存储在一个容器中,例如列表(由于scala列表的链表性质,速度较慢,我建议使用位集或哈希集(对于常量和eC时间复杂性)


TLDR;您可以表示难以想象的大数字,只需以不同的方式存储它们,以降低执行速度,而不改变代码太多

如果您查看该数字的位,
x
的值将非常明显。这只是大循环的一个示例问题,还是您真的试图解这个方程?
7656119803629856L
是二进制的
0b100010000000000000000010000010100100000100101101001
。你所做的就是按位或对值进行运算,所以你可以通过删除第52位和第56位来找到
x的二进制值,这就剩下了
0b1000010001000010101101001001
。是的,这只是一个例子。
1我不明白这是如何回答这个问题的。Long似乎足够大,可以在这里存储数字。内存被消耗到其他地方。如果我以不同的方式存储这些值,这将如何解决我的内存问题?我可能可以存储更多的值,但我正在寻找一种在内存中存储尽可能多的值的方法然后在操作完成时停止并继续填充内存,