在我们的网络应用程序中,由于类加载,一些页面的第一次加载需要一些小但明显的时间.有没有人有任何聪明的方法在启动时在JVM中预加载Web应用程序类?
更新:我们现在所做的是在db表中存储一堆完整的类名(700).我们在启动时读取表并执行Class.forName().它工作正常,但我认为可能有一个更聪明的方法.我们通过使用分析器确定了在启动时引用的700个类.
解决方法:
好吧,它不是很聪明,因为它是规范的一部分,但是你可以通过在web.xml中将load-on-startup元素添加到servlet定义来启动Web App时启动servlet:
....
....
....
....t
1
如果您为一组有代表性的服务执行此操作 – 或者可能只是一个可以预加载所需内容的servlet – 那么您将实现目标.
如果这还不够,如果你想从JAR文件加载类,例如,没有以有意义的方式实际初始化它们,并且如果你知道你的JAR文件在哪里或者可以找出你的JAR文件在哪里,那么你可以使用类似于this JCP forum post “List classes in package”的代码或该线程中的某些后续帖子.从类列表中,您可以获取Class对象,这将有助于加载类而无需实际实例化实例.
标签:java,web-applications,jvm,classloader,performance
来源: https://codeday.me/bug/20190607/1193043.html