为什么我在这里得到“java.lang.OutOfMemoryError:GC开销限制超出”?

时间:2012-08-29 15:55:16

标签: scala garbage-collection out-of-memory

我想破解一个简单的快速脚本,只需将一个核苷酸序列(像“ATGAAGAAC ......”这样的字符串)分成一个三元组列表即密码子(字符串:“ATG”,“AAG”,“AAC”,. ..)用其他东西做。

这个单线程有什么问题,为什么我会得到“java.lang.OutOfMemoryError:超出GC开销限制”?

def tripletize(s:String, accu:List[String] = List.empty[String]):List[String] = tripletize(s.drop(3), s.take(3) :: accu)

我不是在问这是什么,而是为什么我得到它以及如何避免。 顺便说一句,我知道这会给我相反的顺序,但我不知道如何避免scala将String视为集合本身。即:

scala> List.empty ++ "hello"
res6: List[Char] = List(h, e, l, l, o)

1 个答案:

答案 0 :(得分:4)

你什么时候停止? drop因为没有什么可以放弃而不会终止递归。另外,你回来了什么?你永远不会说。你需要做一些像

这样的事情
= if (s.length==0) accu else tripletize(s.drop(3), s.take(3) :: accu)