如何在scala中找到对象的大小?

时间:2018-01-02 16:37:57

标签: scala scala-collections scalaz

有没有办法找出scala中对象占用的内存/大小? 提前谢谢你的回复。

3 个答案:

答案 0 :(得分:1)

查看 java.lang.instrumentation

您可以执行以下操作:

import java.lang.instrument.Instrumentation;

object ObjectSize {
  def fetchObjectSize(Object obj) = instrumentation.getObjectSize(obj)
}

答案 1 :(得分:1)

Scala在JVM上运行,JVM是支持Java的运行时系统。 Scala对象在运行时被编译为JVM对象,并且在运行时与Java对象无法区分。例如,请参阅https://www.scala-lang.org/上的“坚果壳中的Scala”简介:

  

SEAMLESS JAVA INTEROP

     

Scala在JVM上运行,因此Java和Scala堆栈可以自由混合以实现完全无缝集成。

     

...

     

Scala类最终是JVM类。您可以从Scala透明地创建Java对象,调用其方法并从Java类继承。同样,Java代码可以引用Scala类和对象。

因此,就本问题而言,任何Java答案都同样适用于Scala。

请参阅

(除非您指的是像Scala.js这样的非标准Scala运行时?在这种情况下,您应该寻找适用于底层运行时的答案,例如How to get the size of a JavaScript object?

答案 2 :(得分:1)

我还找到了Scala / Java的内存消耗估算器。该库是从Spark项目移植的。更多信息herehere

添加sbt:

libraryDependencies += "com.madhukaraphatak" %% "java-sizeof" % "0.1"

对于任何对象,请通过调用以下方法估算对象大小:

SizeEstimator.estimate(obj)