multithreading - 如何保持在内存的范围内

标签 multithreading scala out-of-memory

我正在尝试运行一个程序来计算方程式中缺少的第4个值,并且我一直用光内存。有没有办法保留在内存中,或者我需要以不同的方式设置代码格式?

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列表的链接列表性质而变慢,我建议使用BitSet或HashSet(因为常量和eC时间复杂度)。

TLDR;您可以通过以不同的方式存储它们(以执行速度为代价)而无需改变代码来代表难以想象的大数字。

关于multithreading - 如何保持在内存的范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681233/

相关文章:

java - 当 Tomcat 运行 OutOfMemory 时获取堆转储

scala - 为什么 Scalas 要么不是 monad?

java - JVM 同步 Finally block

java - Android 可运行线程卡在某处

c++ - Qt SQL 线程数据库查询

scala - 是否可以推迟宏扩展,直到抽象类型绑定(bind)到特定类型

scala - 创建通用更新计数器方法

scala - SBT 子项目内存不足

google-app-engine - Google App Engine 内存不足错误 - 内存配额?

multithreading - "Holding"内存中的数据映射