apm-agent-java icon indicating copy to clipboard operation
apm-agent-java copied to clipboard

Optimize the IndyBootstrap#getClassNamesFromBundledPlugin method to reduce memory usage caused by package scanning

Open fidoooooowang opened this issue 1 year ago • 1 comments

Is your feature request related to a problem?

image

image

Describe the solution you'd like

When the program starts executing the IndyBootstrap#bootstrap method, there will be logic to obtain the class name list of the specified plug-in. However, in this logic, I think some optimizations can be made. As shown in the figure, in the original method, multiple threads may concurrently request the data of the same pluginPackage. At this time, multiple jar packages will be scanned, and there will also be a PackageScanner global lock in it; suppose we advance this lock and based on pluginPackage distinguishes different locks, which can improve application startup performance and reduce memory usage caused by package scanning. I tested it locally and it works.

Describe alternatives you've considered

image image

fidoooooowang avatar Jul 23 '24 09:07 fidoooooowang

Thanks for the input here. We won't have time to advance this proposal in the near future, but will definitely keep the issue open for when time comes available!

jackshirazi avatar Aug 02 '24 14:08 jackshirazi