Java JVM或Eclipse启动开销

Java JVM或Eclipse启动开销,java,eclipse,performance,profiling,Java,Eclipse,Performance,Profiling,我有一个在EclipseIndigo和JAVD1.7x下运行的网络线程应用程序。很长一段时间以来,我已经注意到应用程序的第一次运行会导致前端和端部加载的性能下降,例如,如果我加载应用程序,然后使用测试线束(比如100个网络数据包)点击它,那么前几个响应将非常不稳定,最后几个响应将非常不稳定。[编辑]无需卸载应用程序,只需再次运行测试线束,应用程序即可正常运行。[结束编辑] 我决定尝试深入了解它,并加载VisualVM 1.3.5来分析其行为。CPU使用率在运行开始时有一个明显的峰值,从10%上升

我有一个在EclipseIndigo和JAVD1.7x下运行的网络线程应用程序。很长一段时间以来,我已经注意到应用程序的第一次运行会导致前端和端部加载的性能下降,例如,如果我加载应用程序,然后使用测试线束(比如100个网络数据包)点击它,那么前几个响应将非常不稳定,最后几个响应将非常不稳定。[编辑]无需卸载应用程序,只需再次运行测试线束,应用程序即可正常运行。[结束编辑]

我决定尝试深入了解它,并加载VisualVM 1.3.5来分析其行为。CPU使用率在运行开始时有一个明显的峰值,从10%上升到50%以上。峰值出现后,一切正常,如上所述,后续运行的CPU利用率没有领先峰值,后续运行的配置文件与第一次运行峰值之间的配置文件相同。似乎没有任何证据表明线程的数量是造成这种情况的原因,但有一个小幅度的上升。堆空间从100MB增加到200MB,但除此之外,一切正常

任何想法都欢迎


谢谢

第一次运行测试时,系统性能不稳定是非常典型的。这是因为操作系统从磁盘读取库、JAR文件和其他数据,并将其存储在缓存中。一旦这样做了,第一次所有后续运行都将更快、更一致


另外,请记住,JVM在启动后也会变得更慢。由于其热点分析和即时编译,在JVM为您的特定工作负载优化字节码之前,代码需要运行一段时间。

这是OSGi环境的典型情况,在OSGi环境中,捆绑包可能会在首次访问捆绑包类或服务时延迟初始化

您可以通过使用-console-consolelog参数启动eclipse来确定场景中是否存在这种情况


当控制台打开并加载应用程序时,发出ss命令并注意哪些包被标记为惰性。然后,运行您的测试,再次发出ss,并查看是否有一个惰性捆绑包现在变为活动状态。如果是这样,您可以通过configuration/config.ini文件强制启动捆绑包。这也可以通过扩展点来实现。

我不认为您会得到任何有用的回复,除非您发布代码并提出具体问题,先生!!我怀疑这是正确的,但是添加osgi.compatibility.angerestart.LazyActivation并没有帮助,而且有太多的类标记为as,这使它变得很困难。我注意到,实际的CPU峰值似乎是一个导致GC循环的加载类。我认为,正是这种循环导致了不稳定的首次运行性能。