Skip to content

wuyupengwoaini/class-load-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

1.背景说明

类的生命周期一般要经历一下几个过程:加载->验证->准备->解析->初始化->使用->卸载。

这几个步骤正常情况下都会按部就班地开始(除了[解析]这个阶段,可能会发送在初始化之后)。具体可以参考周志明大大的那本书《深入理解Java虚拟机:JVM高级特性与最佳实践》

正常情况下,对一个类进行主动(总共5中情况,请参考书籍)使用的时候,一定会导致类的初始化,且是”有且只有“

那是不是就可以认为类的加载和类的初始化是同时发生的呢?

那本书里面只是简单提了一下:类的加载时机在JVM规范中并没有作严格的规定,具体是交给JVM虚拟机自己去实现的。

那到底什么时候一个类只会被加载但是没有初始化呢?

2.不主动使用类也会加载类的情况

在校验类的时候,如果发生了类型转换的话,则会导致类的提前加载。

3.关于JVM参数

本demo中涉及的JVM参数

  1. 关闭类的校验: -Xverify:none 或者 -noverify
  2. 追踪类的加载: -verbose:class 或者 -XX:+TraceClassLoading

4.注意点

本demo中引入的fastjson的scope是provided。这意味着本demo可以正常编译,但是在运行期实际是加载不到fastjson的所有类的。

About

magic class load demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages