多少个jar文件被加载到内存中

时间:2018-12-28 11:46:15

标签: scala memory-management jar sbt sbt-assembly

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

1 个答案:

答案 0 :(得分:5)

此行为不取决于应用程序的打包方式,但取决于类加载器(顾名思义)是从内存中加载和卸载类。

默认类加载器的标准行为是在运行时首次调用该类时将其加载到内存中,并且仅在对类加载器进行垃圾回收时才将其卸载。

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

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