Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MetaMember not found for X #282

Closed
aryairani opened this issue Mar 29, 2018 · 10 comments
Closed

MetaMember not found for X #282

aryairani opened this issue Mar 29, 2018 · 10 comments

Comments

@aryairani
Copy link

I am getting hundreds of errors like
MetaMember not found for org.mypkg.benchmark.Compilation2Benchmarks$ fib$1,
corresponding to the classes that I specifically want to analyze. 😄
I believe I've set the sources and classes correctly in config. The class and method do exist:

$ javap -p org.mypkg.benchmark.Compilation2Benchmarks$ | grep fib$1
  private static final int fib$1(int);

Where should I go from here?

@aryairani
Copy link
Author

aryairani commented Mar 29, 2018

A weirder one:

Could not parse line 1148 : org.u.Lib2$$$Lambda$30.1002191352 apply (DD)D : 
MetaMember not found for org.u.Lib2$$$Lambda$30.1002191352 apply (DD)D

the corresponding line is

<task_queued compile_id='500' method='org.u.Lib2$$$Lambda$30/1002191352 apply (DD)D'
  bytes='6' count='3968' iicount='3968' level='3' stamp='1.236' comment='tiered' hot_count='3968'/>

and I'm not sure how to interpret that one at all. I do have an org.u.Lib2$.class$ but nothing with both Lib2andLambda` in the class file name.

@chriswhocodes
Copy link
Member

Hi,

For the first one, if you've set up the config then that could be a bug. Is there any more detail in a file called jitwatch.out in your jitwatch directory?

For the second one, those look like autogenerated classes if you are using functional programming in JDK8+ (lambdas) but this could be related to the first problem.

Thanks,

Chris

@aryairani
Copy link
Author

Thanks Chris. Will JDK8 lambdas be problematic? I am using them.

@chriswhocodes
Copy link
Member

Hi, I've not tested much (any?) lambda code in JITWatch yet. Do you have a short example program you could share and I'll see if I can get JITWatch to analyse it correctly?

Thanks

@stevenschlansker
Copy link

I similarly was attempting to use jitwatch specifically to dive into the performance of lambdas (and LambdaMetafactory) but also ran into this limitation:

Could not parse line 169708 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$71.0x00000008400f9c40 get ()Ljava.lang.Object; : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$71.0x00000008400f9c40 get ()Ljava.lang.Object;
Could not parse line 169711 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$54.0x00000008400dc040 accept (Ljava.lang.Object;Ljava.lang.Object;)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$54.0x00000008400dc040 accept (Ljava.lang.Object;Ljava.lang.Object;)V
Could not parse line 170960 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$51.0x00000008400dd040 accept (Ljava.lang.Object;I)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$51.0x00000008400dd040 accept (Ljava.lang.Object;I)V
Could not parse line 170961 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$52.0x00000008400dd440 accept (Ljava.lang.Object;Ljava.lang.Object;)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$52.0x00000008400dd440 accept (Ljava.lang.Object;Ljava.lang.Object;)V
Could not parse line 172129 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$54.0x00000008400dc040 accept (Ljava.lang.Object;Ljava.lang.Object;)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$54.0x00000008400dc040 accept (Ljava.lang.Object;Ljava.lang.Object;)V
Could not parse line 173207 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$55.0x00000008400dc440 accept (Ljava.lang.Object;Ljava.lang.Object;)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$55.0x00000008400dc440 accept (Ljava.lang.Object;Ljava.lang.Object;)V
Could not parse line 218766 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$55.0x00000008400dc440 accept (Ljava.lang.Object;Ljava.lang.Object;)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$55.0x00000008400dc440 accept (Ljava.lang.Object;Ljava.lang.Object;)V
Could not parse line 219447 : com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$51.0x00000008400dd040 accept (Ljava.lang.Object;I)V : MetaMember not found for com.fasterxml.jackson.module.blackbird.BaseBenchmark$SomeBean$$Lambda$51.0x00000008400dd040 accept (Ljava.lang.Object;I)V
Could not parse line 227589 : java.util.regex.Pattern$$Lambda$6.0x0000000840066040 is (I)Z : MetaMember not found for java.util.regex.Pattern$$Lambda$6.0x0000000840066040 is (I)Z
Could not parse line 227592 : java.util.regex.Pattern$$Lambda$6.0x0000000840066040 is (I)Z : MetaMember not found for java.util.regex.Pattern$$Lambda$6.0x0000000840066040 is (I)Z
Could not parse line 237526 : java.util.regex.CharPredicates$$Lambda$31.0x000000084007a440 is (I)Z : MetaMember not found for java.util.regex.CharPredicates$$Lambda$31.0x000000084007a440 is (I)Z
Could not parse line 238304 : java.util.regex.CharPredicates$$Lambda$31.0x000000084007a440 is (I)Z : MetaMember not found for java.util.regex.CharPredicates$$Lambda$31.0x000000084007a440 is (I)Z
Could not parse line 240373 : java.util.regex.Pattern$$Lambda$33.0x000000084007ac40 is (I)Z : MetaMember not found for java.util.regex.Pattern$$Lambda$33.0x000000084007ac40 is (I)Z
Could not parse line 240376 : java.util.regex.Pattern$$Lambda$33.0x000000084007ac40 is (I)Z : MetaMember not found for java.util.regex.Pattern$$Lambda$33.0x000000084007ac40 is (I)Z
Could not parse line 240762 : java.util.regex.Pattern$BmpCharPredicate$$Lambda$35.0x000000084007b440 is (I)Z : MetaMember not found for java.util.regex.Pattern$BmpCharPredicate$$Lambda$35.0x000000084007b440 is (I)Z
Could not parse line 240767 : java.util.regex.Pattern$BmpCharPredicate$$Lambda$35.0x000000084007b440 is (I)Z : MetaMember not found for java.util.regex.Pattern$BmpCharPredicate$$Lambda$35.0x000000084007b440 is (I)Z
Could not parse line 254447 : java.util.regex.Pattern$$Lambda$34.0x000000084007b040 is (I)Z : MetaMember not found for java.util.regex.Pattern$$Lambda$34.0x000000084007b040 is (I)Z
Could not parse line 254451 : java.util.regex.Pattern$$Lambda$34.0x000000084007b040 is (I)Z : MetaMember not found for java.util.regex.Pattern$$Lambda$34.0x000000084007b040 is (I)Z

It is not trivial, but I am running:
https://github.com/stevenschlansker/jackson-blackbird
as
java -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation -XX:+PrintAssembly -XX:+TraceClassLoading -jar benchmarks/target/benchmarks.jar -f 0 -wi 50 -i 50 Blackbird.beanDeser

Hoping that jitwatch can understand lambdas soon, this feature will not be going away :)

@chriswhocodes
Copy link
Member

Hi @stevenschlansker thanks for providing a reproducer for this issue.
A lot of JITWatch functionality relies on the bytecode for a method being available (this was one of the design assumptions) but I don't think this is available after the program exits in the case of lambdas so I need to find a way to build the class model as best I can from method signatures found in the logs etc.
Will give it some thought.
Kind regards,
Chris

@JohnTortugo
Copy link

@chriswhocodes - is there any plan for supporting this?

@YujiSoftware
Copy link

YujiSoftware commented Dec 13, 2021

@chriswhocodes

A lot of JITWatch functionality relies on the bytecode for a method being available (this was one of the design assumptions) but I don't think this is available after the program exits in the case of lambdas so I need to find a way to build the class model as best I can from method signatures found in the logs etc.

Anonymous classes for lambdas can be exported to the path specified by the system property "jdk.internal.lambda.dumpProxyClasses"

Example: java -Djdk.internal.lambda.dumpProxyClasses=. Main.java
https://github.com/openjdk/jdk/blob/c6339cb8a255d387bb182ad20dd69f3d460cf1ed/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java#L100-L102

Maybe, you can get the method signature.

@chriswhocodes
Copy link
Member

Hi, I'm closing all the issues except for the ones I'm actively working on.

@alexei-osipov
Copy link

Maybe it's worth to add to JITWatch description or documentation info that lambdas are not supported and there are no plans to support them?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants