{"record":{"id":"2b5b0a5a4361c88f","repo":"pinpoint-apm/pinpoint","slug":"target-class-is-lambda-class-causes-noclassdeffo","errorCode":null,"errorMessage":"Target class  is lambda class, Causes NoClassDefFound error in java 8.","messagePattern":"Target class  is lambda class, Causes NoClassDefFound error in java 8\\.","errorType":"exception","errorClass":"ProfilerException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/transformer/DynamicTransformService.java","lineNumber":89,"sourceCode":"    public void addClassFileTransformer(ClassLoader classLoader, String targetClassName, ClassFileTransformer transformer) {\n        if (this.logger.isDebugEnabled()) {\n            logger.debug(\"Add dynamic transform. classLoader={}, class={}\", classLoader, targetClassName);\n        }\n\n        this.dynamicTransformRequestListener.onTransformRequest(classLoader, targetClassName, transformer);\n    }\n\n    private void assertClass(Class<?> target) {\n        if (!instrumentation.isModifiableClass(target)) {\n            throw new ProfilerException(\"Target class \" + target + \" is not modifiable\");\n        }\n        final JvmVersion version = JvmUtils.getVersion();\n        if (JAVA_8.compareTo(version) == 0) {\n            // If the version is java 8\n            // Java 8 bug - NoClassDefFound error in transforming lambdas(https://bugs.openjdk.java.net/browse/JDK-8145964)\n            final String className = target.getName();\n            if (className != null && className.contains(\"$$Lambda$\")) {\n                throw new ProfilerException(\"Target class \" + target + \" is lambda class, Causes NoClassDefFound error in java 8.\");\n            }\n        }\n    }\n\n    private void triggerRetransform(Class<?> target) {\n        try {\n            instrumentation.retransformClasses(target);\n        } catch (UnmodifiableClassException e) {\n            throw new ProfilerException(e);\n        }\n    }\n\n    public void setTransformRequestEventListener(DynamicTransformRequestListener dynamicTransformRequestListener) {\n        this.dynamicTransformRequestListener = Objects.requireNonNull(dynamicTransformRequestListener, \"dynamicTransformRequestListener\");\n    }\n\n}\n","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/transformer/DynamicTransformService.java#L71-L107","documentation":"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.","triggerScenarios":"Calling retransform() on a Class object whose getName() contains \"$$Lambda$\" while JvmUtils.getVersion() equals Java 8.","commonSituations":"Dynamic transformer scripts or plugins targeting functional interfaces/lambda classes on a Java 8 application; applying transform rules to classes resolved via lambda metafactory.","solutions":["Exclude lambda classes ($$Lambda$ in name) from dynamic transform targets on Java 8","Target the functional interface or enclosing class instead of the lambda class","Upgrade the application to Java 9+ where the JDK-8145964 bug is fixed"],"exampleFix":"// before\ntransformService.retransform(lambdaClass); // throws on Java 8\n// after\nif (!lambdaClass.getName().contains(\"$$Lambda$\")) {\n    transformService.retransform(lambdaClass);\n}","handlingStrategy":"validation","validationCode":"if (System.getProperty(\"java.version\").startsWith(\"1.8\") && target.getName().contains(\"$$Lambda$\")) { skipRetransform(target); return; }","typeGuard":"boolean isLambdaClass(Class<?> c) { return c.getName().contains(\"$$Lambda$\"); }","tryCatchPattern":"try { transformService.retransform(clazz); } catch (ProfilerException e) { logger.warn(\"Lambda retransform rejected on Java 8: {}\", clazz.getName()); }","preventionTips":["Filter lambda classes out of dynamic transform rule targets","Target enclosing classes or functional interfaces instead of lambdas","Pin this check to any code path running on Java 8"],"tags":["java","java8","lambda","retransform"],"backgroundTag":"unsupported-platform","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}