jvm类加载机制有哪些,描述一下jvm加载
如何解决写爬虫IP受阻的问题?立即使用。
jvm类加载的过程:
1.加载
加载时,jvm做这三件事:
1)通过类的完全限定名获得类的二进制字节流。
2)将这个字节流的静态存储结构转换成方法区的运行时数据结构。
3)在内存堆中生成一个代表这个类的java.lang.Class对象,作为这类数据的访问入口。
2.验证
验证、准备和解析这三个步骤可以看作是一个连接过程,将类的字节码与JVM的运行状态连接起来。
验证是为了保证类文件的字节流中包含的信息符合当前虚拟机的要求,不会威胁到jvm的安全。
验证主要包括以下几个方面:
1)文件格式验证,验证字节流是否符合类文件的规范,是否可以被当前版本的虚拟机处理。
2)元数据验证:对字节码描述的信息进行语义分析,确保其符合java语言规范。
3)字节码验证。通过对数据流和控制流的分析,确定语义合法且符合逻辑。
4)符号引用验证这种验证发生在解析阶段。
3.准备,为类的静态变量分配内存,并初始化为系统的初始值。对于由最终静态修改的变量,
直接分配给用户定义的值。例如,在这里,在准备阶段之后,初始值是0而不是7。
公共静态int a=7
4.解析
解析就是把常量池中的符号引用转换成直接引用(比如物理内存地址指针)。
5.初始化
在初始化阶段,jvm真正开始执行类中定义的java代码。
1)初始化阶段是执行类构造函数的clinit()方法的过程。类构造函数clinit()方法由编译器自动收集。
类中所有类变量的赋值操作与静态语句块中的语句相结合。
2)在初始化一个类的时候,如果发现其父类还没有初始化,就需要先触发其父类的初始化。
3)虚拟机会确保一个类的clinit()方法在多线程环境中被正确锁定和同步。
这就是jvm类加载过程的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。