在Java 8中,是否可以使用JVM参数来控制何时(或在什么条件下)卸载class?

In Java 8, is it possible to use JVM parameter to control when(or in what condition) to unload class?

在我的 JMeter 测试中,我发现 JMeter 不断加载 classes javascript_gen_cmd__xxx,这使得测试无法达到我设置的吞吐量。

当我在 JVisualVM 中单击 "Perform GC" 按钮时,classes 被卸载并达到吞吐量。

所以我认为如果我能指出 GC 应该发生的时间会有所帮助, 例如当加载总数class达到一定数量时。

我尝试了 -XX:MetaspaceSize=120M,但当元空间使用量达到 120MB 时它没有触发 class 卸载。

类似 -XX:MaxMetaspaceFreeRatio=30 -XX:MinMetaspaceFreeRatio=10 的东西应该会导致它快速填满,从而触发 class-卸载 GC。

或者 -XX:+ExplicitGCInvokesConcurrent -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses 并使用 CMS 或 G1 并通过计时器触发 System.gc() 也可能有效。