4

我有一个我构建的实用程序,作为一个如此小的专用实用程序,当我在测试期间注意到它使用 150mb 内存时,我感到非常惊讶。我以 1MB 的堆设置运行它,但它仍然占用了超过 50MB。

在分析并花了一天时间试图找出我错在哪里之后,我决定测试一个理论。我的实用程序连接到专有应用程序。该连接需要应用程序供应商提供的外部库。

我使用该库编写了一个小型 Hello World 并注意到以下内容:

1) 从供应商库中声明一个新对象会立即将内存使用量增加到 50MB(主要是 permgen 空间)

2) 实际尝试连接到应用服务器会将内存使用量增加到 150MB。

就我而言,这简直是愚蠢的。

我想知道是否有任何驯服野兽的潜在方法。也许以某种方式卸载我知道不必要或永远不会被引用的类。供应商不会很快改变事情。

或者仅在必要时加载供应商的库怎么样?这样,它在与应用服务器通信时只会消耗这么多内存。

4

1 回答 1

4

JVM 只加载您实际使用的类。事实上,它只加载您实际使用的方法。例如,如果您在不使用的方法中有字节码错误,您将不知道。;)

减少供应商库大小的最佳方法是要求他们改进它,或者自己编写。

不幸的是,分配适当的应用程序对资源不是很友好。他们的首要任务是正确性。:j

顺便说一句:150 MB 内存的成本约为 6 美元,所以我不会花太多时间来修复它。

于 2013-02-04T15:37:42.830 回答