从jvm_defineclass中生成的MethodAccessor加载了10k次

uinbv5nw  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(334)


在jvm参数器中添加“-verbose:class”,并获得10000次日志,如下所示,“从jvm_defineclass加载了sun.reflect.generatedmethodaccessor10004”
我有没有办法找到origin类?我的应用程序的根方法是什么导致了这种情况?
我知道“generatedmethodaccessor####是反射实现在运行时生成的类,用于调用方法和构造函数”,但我不知道加载的具体方法或类是什么?

ve7v8dk2

ve7v8dk21#

异步探查器可以帮助找到这些MethodAccessor的生成位置。

./profiler.sh -d 120 -e sun.reflect.MethodAccessorGenerator.generate -f report.html <javaPID>

这将开始录制120秒。用于调用的所有生成的MethodAccessor Method.invokeConstructor.newInstance 将被捕获并保存为下的火焰图报告 report.html .
flame图显示了生成的访问器的数量及其来源的堆栈跟踪:

除了在运行时附加探查器之外,您还可以从一开始就启用探查器来启动java:

java -agentpath:/path/to/libasyncProfiler.so=start,event=sun.reflect.MethodAccessorGenerator.generate,file=report.html -jar <your application>

相关问题