因此,對於作業任務,我應該使用幾個線程機制,使用一個應該導致pi的函數的簡單集成。該實施應該處理超過500億美元的時間間隔。我目前的實現處理2GB堆大小約5000萬的for循環。現在我的問題是爲什麼實現使用這麼多的內存? (我認爲這是因爲範圍必須提前制定,這是真的嗎?)我該如何改善記憶體的使用?是否有可能使用並行集合,或者我是否被迫使用線程池來處理這樣的事情?斯卡拉並行用盡RAM
注意:以下實現將得到充分的評價。這是爲了我的智力好奇心和我在Scala中變得更流利的夢想。
import scala.Math
object Pi {
def calculate_pi(interval: Int): Double = {
val start: Long = System.currentTimeMillis;
var duration: Long = 0
var x: Double = 2.0/interval
var y: Double = 0.0
var mypi: Double = 0.0
(x until 1.0 by 1.0/interval).par.foreach(i => {
y = 4.0/(1.0+x*x)
mypi += (1.0/interval)*y
})
duration = (System.currentTimeMillis - start)
println("scala calculate_pi\t" + interval + "\t" + duration + "ms\t" + mypi)
return mypi
}
object Main extends App {
println("Please input the interval for the calculation")
if(args.length < 1) { sys.exit }
val interval = args(0).toInt
Pi.calculate_pi_seq(interval)
Pi.calculate_pi(interval)
}
它甚至工作嗎?看起來你正在同時修改mypi。而且,更平凡但更重要的是,你不使用你的循環變量我(你正在使用你的常量x) – 2012-02-09 08:23:14
你可以發佈你得到的OutOfMemoryError嗎? – axel22 2012-02-09 09:20:50
java.lang.OutOfMemoryError:Java堆空間 – Bbatha 2012-02-10 00:15:24