gpt4 book ai didi

java -详细 :class shows that the servlet is loaded but a static content is initialized only when the servlet is accessed

转载 作者:搜寻专家 更新时间:2023-11-01 02:45:32 25 4
gpt4 key购买 nike

我认为我在这里弄错了。

我有一个简单的 servlet,它带有一个打印一些消息的静态 block 。据我所知,静态 block 应该在 servlet 类首次加载到 jvm 中时处理。

我正在使用嵌入式 jetty 并使用 -verbose:class jvm 选项启动 jetty 服务器。

我可以在输出中看到 Servlet 类在我第一次访问此 servlet 并查看消息之前很久就已加载。

但据我所知,静态 block 应该在类加载后立即初始化。我哪里错了?

最佳答案

Java Language Specification

The Java Virtual Machine dynamically loads, links and initializes classes and interfaces. Loading is the process of finding the binary representation of a class or interface type with a particular name and creating a class or interface from that binary representation. Linking is the process of taking a class or interface and combining it into the run-time state of the Java Virtual Machine so that it can be executed. Initialization of a class or interface consists of executing the class or interface initialization method <clinit> (§2.9).

最后一部分,<clinit> , 是你的 static初始化程序运行。

java launcher option你用过

-verbose:class

简单

Displays information about each class loaded.

因此,您的类作为加载类路径条目的 Web 应用程序的一部分加载,但在 Jetty 实例化它以便它可以使用该对象处理请求之前它不会被初始化。

关于java -详细 :class shows that the servlet is loaded but a static content is initialized only when the servlet is accessed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com