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
- 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
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
- 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
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
- Target class is not modifiable
- absolute start/end time is only supported for TRACE_V3 spans
- absolute start/end time is only supported for TRACE_V3 span…
- method not found.
- must return java.lang.Object.
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)