在jvm参数器中添加“-verbose:class”,并获得10000次日志,如下所示,“从jvm_defineclass加载了sun.reflect.generatedmethodaccessor10004”我有没有办法找到origin类?我的应用程序的根方法是什么导致了这种情况?我知道“generatedmethodaccessor####是反射实现在运行时生成的类,用于调用方法和构造函数”,但我不知道加载的具体方法或类是什么?
ve7v8dk21#
异步探查器可以帮助找到这些MethodAccessor的生成位置。跑
./profiler.sh -d 120 -e sun.reflect.MethodAccessorGenerator.generate -f report.html <javaPID>
这将开始录制120秒。用于调用的所有生成的MethodAccessor Method.invoke 及 Constructor.newInstance 将被捕获并保存为下的火焰图报告 report.html .flame图显示了生成的访问器的数量及其来源的堆栈跟踪:除了在运行时附加探查器之外,您还可以从一开始就启用探查器来启动java:
Method.invoke
Constructor.newInstance
report.html
java -agentpath:/path/to/libasyncProfiler.so=start,event=sun.reflect.MethodAccessorGenerator.generate,file=report.html -jar <your application>
1条答案
按热度按时间ve7v8dk21#
异步探查器可以帮助找到这些MethodAccessor的生成位置。
跑
这将开始录制120秒。用于调用的所有生成的MethodAccessor
Method.invoke
及Constructor.newInstance
将被捕获并保存为下的火焰图报告report.html
.flame图显示了生成的访问器的数量及其来源的堆栈跟踪:
除了在运行时附加探查器之外,您还可以从一开始就启用探查器来启动java: