使用 Nashorn 时大量未加载的 LambdaForm 类

Huge amount of unloaded LambdaForm classes when using Nashorn

我正在构建一个调用自定义 Nashorn 脚本的框架,该脚本又会注册谓词、比较器等。

function init (context)
{
  context.registerFilter("name", function(item) {
    ... Do some filter of item
  });
}

然后在 Java 方面,我使用已注册的过滤器。当长时间对很多项目执行此操作时,我看到 java.lang.invoke.LambdaForm$DMH/BMH 类型的大量卸载 类 这正常吗,我应该担心将其投入生产吗?

我尝试过不同的 JVM(1.8 u152、u161、u162),它们的行为都相同。

Nashorn 为每个方法调用生成 invokedynamic 指令,属性 set/get 来自 JS。 LambdaForms 由 JDK 生成以处理那些 invokedynamic 指令。您提到那些 类 已卸载。除非您发现严重的性能问题,否则您无需担心。