pinpoint-apm/pinpoint · error · ProfilerException

Target class is lambda class, Causes NoClassDefFound error…

Error message

Target class  is lambda class, Causes NoClassDefFound error in java 8.

What it means

On Java 8, retransforming lambda classes ($$Lambda$) triggers a JDK bug (JDK-8145964) that causes NoClassDefFoundError at runtime. Pinpoint proactively rejects retransformation of any class whose name contains '$$Lambda$' on Java 8 by throwing ProfilerException.

Solutions

  1. Exclude lambda classes ($$Lambda$ in name) from dynamic transform targets on Java 8
  2. Target the functional interface or enclosing class instead of the lambda class
  3. Upgrade the application to Java 9+ where the JDK-8145964 bug is fixed

Example fix

// before
transformService.retransform(lambdaClass); // throws on Java 8
// after
if (!lambdaClass.getName().contains("$$Lambda$")) {
    transformService.retransform(lambdaClass);
}
Defensive patterns

Strategy: validation

Validate before calling

if (System.getProperty("java.version").startsWith("1.8") && target.getName().contains("$$Lambda$")) { skipRetransform(target); return; }

Type guard

boolean isLambdaClass(Class<?> c) { return c.getName().contains("$$Lambda$"); }

Try / catch

try { transformService.retransform(clazz); } catch (ProfilerException e) { logger.warn("Lambda retransform rejected on Java 8: {}", clazz.getName()); }

Prevention

When it happens

Trigger: Calling retransform() on a Class object whose getName() contains "$$Lambda$" while JvmUtils.getVersion() equals Java 8.

Common situations: Dynamic transformer scripts or plugins targeting functional interfaces/lambda classes on a Java 8 application; applying transform rules to classes resolved via lambda metafactory.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/2b5b0a5a4361c88f. Report an issue: GitHub.

Appendix: source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/transformer/DynamicTransformService.java:89

    public void addClassFileTransformer(ClassLoader classLoader, String targetClassName, ClassFileTransformer transformer) {
        if (this.logger.isDebugEnabled()) {
            logger.debug("Add dynamic transform. classLoader={}, class={}", classLoader, targetClassName);
        }

        this.dynamicTransformRequestListener.onTransformRequest(classLoader, targetClassName, transformer);
    }

    private void assertClass(Class<?> target) {
        if (!instrumentation.isModifiableClass(target)) {
            throw new ProfilerException("Target class " + target + " is not modifiable");
        }
        final JvmVersion version = JvmUtils.getVersion();
        if (JAVA_8.compareTo(version) == 0) {
            // If the version is java 8
            // Java 8 bug - NoClassDefFound error in transforming lambdas(https://bugs.openjdk.java.net/browse/JDK-8145964)
            final String className = target.getName();
            if (className != null && className.contains("$$Lambda$")) {
                throw new ProfilerException("Target class " + target + " is lambda class, Causes NoClassDefFound error in java 8.");
            }
        }
    }

    private void triggerRetransform(Class<?> target) {
        try {
            instrumentation.retransformClasses(target);
        } catch (UnmodifiableClassException e) {
            throw new ProfilerException(e);
        }
    }

    public void setTransformRequestEventListener(DynamicTransformRequestListener dynamicTransformRequestListener) {
        this.dynamicTransformRequestListener = Objects.requireNonNull(dynamicTransformRequestListener, "dynamicTransformRequestListener");
    }

}

View on GitHub (pinned to 744c3d3075)