scala - 有多少 jar 文件被加载到内存中

标签 scala memory-management jar sbt sbt-assembly

我正在使用 Scala 进行编程,当我编写一个简单的“println(“hello world”)”程序并使用“sbt 包”将其发布到 jar 文件中时,该文件的大小仅为 4kb,但这对我没有帮助,因为如果没有 scala 库,jar 文件将无法运行。
因此,在网上搜索后,我发现 sbt-assembly 将包括 scala 库在内的所有内容打包到一个“fat jar”中,但生成的 jar 文件大小超过 13Mb
所以我的问题是,当 jar 文件被执行或访问时,整个 jar 文件会被加载到内存中,还是只需要将所需的数据和函数加载到内存中?

最佳答案

这种行为不依赖于应用程序的打包方式,而是由类加载器(顾名思义)从内存中加载和卸载类。

默认类加载器的标准行为是在运行时第一次调用类时立即将其加载到内存中,并且仅在类加载器被垃圾收集时才卸载。

当然,您可以定义自定义类加载器并执行您想要的操作:)

如果你想在运行时检查加载的类,你可以使用像 VisualVM 这样的工具。转储堆并检查内存中发生了什么

关于scala - 有多少 jar 文件被加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53958105/

相关文章:

scala - 写入 HDFS - hive 时如何控制 Spark 流中的行数和/或输出文件大小?

生命周期依赖于拥有对象的 C# (.NET) 对象

linux - 如何分配 4k 对齐的内存

java - 在用于 SVM 分类的 Java 代码中使用哪些 Weka 和 LibSVM .jar 文件

scala - 我可以在 Scala 中将两个以上的列表压缩在一起吗?

Scalaz ·克莱斯利问题

scala - 有人可以解释为什么在 Scala 中应用这样的 map 会抛出和 IllegalArgumentException 吗?

node.js - 消耗所有可用内存的 Node 脚本

java - Maven Jar 的未找到类异常

java - 执行不带 "java -jar"的 jar 文件(就像命令一样)