Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >启动时如何在JVM中预加载web应用程序类?

启动时如何在JVM中预加载web应用程序类?
EN

Stack Overflow用户
提问于 2009-03-19 13:30:49
回答 6查看 4.6K关注 0票数 4

在我们的web应用程序中,一些页面的第一次加载会占用少量但明显的额外时间,这是由于类加载造成的。在JVM启动时,是否有人有任何聪明的方法来预装web应用程序类?

更新:我们现在要做的是在db表中存储一堆(700)完整的类名。我们在启动时读取表并执行Class.forName()。它很好,但我想可能有一个更聪明的方法。我们使用分析器确定了在启动时引用的700个类。

EN

回答 6

Stack Overflow用户

发布于 2009-03-19 13:37:55

因为它是规范的一部分,所以它不是很聪明,但是当Web启动时,可以通过将load-on-startup元素添加到web.xml中的servlet定义来启动servlet

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<servlet>
  <description>....</description>
  <display-name>....</display-name>
  <servlet-name>....</servlet-name>
  <servlet-class>....t</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

如果您这样做是为了一组有代表性的服务--或者仅仅是一个可以预加载所需一切的servlet --那么您将实现您的目标。

如果这还不够,例如,如果您想从JAR文件加载类,而不实际以一种有意义的方式初始化它们,如果您知道JAR文件在哪里或可以确定JAR文件在哪里,那么您可以使用类似于这个JCP论坛贴出了“包中的类”的代码或线程中的后面的一些帖子。从类列表中,您可以获得Class对象,这将帮助加载类,而不必实例化实例。

票数 2
EN

Stack Overflow用户

发布于 2009-05-21 05:48:46

您可以尝试在单个虚拟类中编写静态初始化程序代码,然后在启动时加载该类。它的静态初始化程序将创建一些导致加载其他类的关键对象(您可以递归地这样做以改进代码模块化)。我敢打赌这会更短、更简单(而且您没有DB问题需要担心)。

一种更好的方法可能是编写一个servlet,它在启动时会碰到一些缓慢加载的页面,并丢弃结果。这会迫使类加载。加载这些页面--多次--每一次都会增加所完成的即时编译量(既加快了代码的速度,又减少了JIT编译的成本)。还有其他的好处:这是一种“自我测试的动力”,它会导致一次性启动任务,而且它还可能在某种程度上使各种缓存处于初始状态。

票数 2
EN

Stack Overflow用户

发布于 2009-03-19 13:35:50

Class.forName()是我唯一能想到的东西。我当然有兴趣听到更聪明的替代方案。

另一种选择是选择一组URL,并在启动时运行一个脚本来访问这些URL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/664161

复制
相关文章
jvm怎么加载类_jvm类加载器
原因: 1、存放在自定义路径上的类,需要通过自定义类加载器去加载。【注意:AppClassLoader加载classpath下的类】 2、类不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载器去实现加密解密。 3、可以定义类的实现机制,实现类的热部署, 如OSGi中的bundle模块就是通过实现自己的ClassLoader实现的, 如tomcat实现的自定义类加载模型。
全栈程序员站长
2022/10/29
4670
JVM中类加载的时机
  本文主要记录下类的加载过程,一个类从加载到内存中开始到被卸载的整个生命周期作为java程序员来说应该还是要清楚的。
用户4919348
2019/04/02
4880
JVM中类加载的时机
JVM中类加载的过程
  前面看了类加载的时机,本文来记录下类加载的过程,也就是加载的每个阶段都做了哪些事情
用户4919348
2019/04/02
5230
JVM中类加载的过程
JVM中的类加载器
  把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码模块称为类加载器。
用户4919348
2019/04/02
4750
JVM中的类加载器
【Jvm】Jvm类加载机制
PS: NoClassDeFoundError:发生在类生命周期中解析阶段找不到相应的类 ClassNotFoundException发生在类生命周期的加载阶段,找不到相应的类。
石臻臻的杂货铺[同名公众号]
2021/07/14
6510
JVM 《五 JVM 类加载机制&Tomcat 类加载方式解析》
所谓类加载机制也就是Java 虚拟机从磁盘装载 .class 文件或者网络中二进制字节流并且加载Java类的方式或者过程。
邹志全
2020/02/25
7430
JVM 《五 JVM 类加载机制&Tomcat 类加载方式解析》
JVM:类加载器
Java虚拟机设计团队有意把类加载阶段中的"通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何获取所需的类。实现这个动作的代码被称为"类加载器"(ClassLoader)。
HLee
2021/02/24
8680
JVM:类加载器
JVM类加载机制
3、在内存中生成一个代表这个类的Class对象,作为方法区这个类的各种数据的访问入口。
Java编程指南
2019/08/02
5882
JVM类加载机制
jvm类加载机制
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。
Leetcode名企之路
2018/11/29
4970
jvm类加载机制
JVM类加载机制
正常运行Java程序可以通过.java编译成class文件,然后交由JVM执行。编译器虽然本身可以检测Java的安全问题。但是除了编译产生字节码文件之外,还可以通过其他途径产生,比如直接编写字节码文件或者通过第三方无编译检查的编译器生成。
Noneplus
2019/09/24
3340
JVM类加载机制
JVM--类加载
Java虚拟机没有强制约束什么情况下需要开始类加载的第一个阶段--加载,但Java虚拟机强制约束了类的初始化的开始时间(而加载、验证、准备自然在初始化之前进行)。
SuperHeroes
2019/03/12
3790
JVM--类加载
jvm类加载机制
验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。验证阶段大致会完成4个阶段的检验动作:
wayn
2023/02/01
2860
JVM学习-类加载
验证:验证类是否符合JVM规范,安全性检查。用UE等支持二进制的编辑器修改HelloWord.class的魔数(CA FE BA BE),在控制台运行
sgr997
2022/11/10
2690
JVM学习-类加载
JVM类加载机制-JVM(一)
1、我们运行一个.class文件,windows下的java.exe调用底层jvm.dll文件创建java虚拟机(c++实现)。
用户9919783
2023/09/05
1700
JVM类加载机制-JVM(一)
JVM类加载过程
加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后在开始,因为java支持运行时绑定。
全栈程序员站长
2022/07/21
6660
JVM类加载过程
JVM类加载机制
虚拟机把描述类的数据从CLass文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制(懒加载)。
周三不加班
2019/09/03
5530
JVM - 类加载过程
当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。
用户2987604
2020/06/15
4810
JVM - 类加载过程
JVM:类加载过程
Java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。
HLee
2021/02/18
8350
JVM:类加载过程
JVM 类加载机制
其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
Java架构师必看
2021/05/14
4910
JVM 类加载机制
JVM系列(二):JVM中类加载器相关知识笔记
JVM虚拟机运行的文件是class文件,它是由我们的Java程序编译后产生的文件。
小明互联网技术分享社区
2022/05/24
2270
JVM系列(二):JVM中类加载器相关知识笔记

相似问题

如何在JVM启动时预加载已使用的类?

15

如何在JVM启动时加载类(直接加载)?

12

在应用程序启动时预加载类

21

SpringBootWebXmlServlet无法在Web应用程序中启动时预加载:"/“

10

Java -在JVM启动时加载附加类

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文