Java Scala GC内存不足问题

Java Scala GC内存不足问题,java,scala,garbage-collection,Java,Scala,Garbage Collection,我得到以下例外情况: java.lang.OutOfMemoryError: GC overhead limit exceeded 使用此堆栈跟踪: at scala.collection.immutable.HashSet$HashTrieSet.updated0(HashSet.scala:230) at scala.collection.immutable.HashSet.$plus(HashSet.scala:56) at scala.collection.immutable.Has

我得到以下例外情况:

 java.lang.OutOfMemoryError: GC overhead limit exceeded
使用此堆栈跟踪:

at scala.collection.immutable.HashSet$HashTrieSet.updated0(HashSet.scala:230)
at scala.collection.immutable.HashSet.$plus(HashSet.scala:56)
at scala.collection.immutable.HashSet.$plus(HashSet.scala:33)
at scala.collection.SetLike$$anonfun$$plus$plus$1.apply(SetLike.scala:128)
at scala.collection.SetLike$$anonfun$$plus$plus$1.apply(SetLike.scala:128)
at scala.collection.TraversableOnce$$anonfun$foldLeft$1.apply(TraversableOnce.scala:144)
at scala.collection.TraversableOnce$$anonfun$foldLeft$1.apply(TraversableOnce.scala:144)
at scala.collection.immutable.HashSet$HashSet1.foreach(HashSet.scala:153)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.immutable.HashSet$HashTrieSet.foreach(HashSet.scala:306)
at scala.collection.TraversableOnce$class.foldLeft(TraversableOnce.scala:144)
at scala.collection.AbstractTraversable.foldLeft(Traversable.scala:105)
at scala.collection.TraversableOnce$class.$div$colon(TraversableOnce.scala:138)
at scala.collection.AbstractTraversable.$div$colon(Traversable.scala:105)
at scala.collection.SetLike$class.$plus$plus(SetLike.scala:128)
at scala.collection.AbstractSet.$plus$plus(Set.scala:47)
我将在这里绘制调用
++
的代码:

  val features = Array[(String, Double)]() ++
  featuresExtractor.map {
    case (// ...) =>
        (featureNameString, featureValueDouble)
      }
    case (// ...) =>
      Option(...)
      match {
        case None =>
          terms.map { term: String => (term, 0.0d) }
        case Some(...) =>
          terms.map { term: String =>                
            val value: Option[Double] = ...
            (featureName, value.getOrElse(0.0d)
          }
      }
  }.reduce(_ ++ _)
此代码基本上迭代
特性牵引器
(a
映射
)以生成
数组[(字符串,双精度)]


我的问题是:GC花费大量时间试图恢复的小对象的过度创建是因为我(我只是创建了其中的许多),还是因为Scala数据结构的问题


接下来的问题是:我是否应该放弃这里的
reduce
,尝试另一种方法来解决这个问题?

reduce
正在创建一个新的
不可变。HashSet
从每个实例传递给它进行连接。是你。谢谢Yuval-我正在修改,使这些集合成为数组,然后再进行缩减。实际上,我是从库调用中获取集合的,但我可以在将它们放入reduce之前将它们转换为代码中的数组。也许可以使用带有可变种子的
foldLeft
,它可以累积所有数据并保存所有这些分配。我喜欢这个建议,我会尝试一下。再次感谢!“我的问题是:由于我的原因,GC花费了大量时间试图恢复的小对象的过度创建。”。创建太多对象本身不会导致内存不足。这可能会导致大量垃圾收集。你的问题不是你创造了太多,而是太多的人仍然“活着”,无法收集。