如果我给了两个Jar格式的Java库,1个没有花里胡哨的东西,另一个有很多它们将大部分未使用....我的问题是:
较大的,大多数未使用的库如何影响应用程序的性能? JVM是否延迟加载类,是否拥有更大的类库必然意味着更大的内存占用量?
答案 0 :(得分:7)
简短的回答是,只要首次需要,就会加载类。请注意,“needed”也表示“由正在加载的任何其他类引用”。
因此,如果您有一堆从未被任何活动代码触及的类,则不会加载它。
如果您想确切了解JVM正在加载哪些类以及何时加载,您可以使用-verbose:class
选项调用java命令/进程。
答案 1 :(得分:5)
来自here的引用:
何时加载类型?
这是一个令人惊讶的棘手问题 回答。这在很大程度上是由于 具有显着的灵活性 由JVM规范提供给JVM 的实施方式。
必须先执行加载 必须执行链接和链接 在初始化之前VM规范 确实规定了时间 初始化。它严格要求 一个类型在其上初始化 首次有效使用(参见附录A) 什么构成“活跃的 使用“)。这意味着加载(和 必须执行一种类型的链接) 在该类型的第一个活动时或之前 使用