java虚拟机结构详解(JVM)

废话不多说,先直接上个图:

上图为JVM整体组成结构,有几个模块组成:

1.class文件生成模块:

通过jdk自带的javac编译命令生成

中间过程就是javac编译程序内部处理的过程,核心就是针对源代码词法和语法的分析。

2.类加载器子系统模块:

JVM运行时自动创建,作用是将class字节码加载到jvm对应的内存中。类加载的核心就是classLoader,classLoader也是动态加载技术的核心。classLoader在此不作详细介绍下一章再总结。

classLoader将class字节码加载到jvm内存中如下图

上图为jvm提供的几种加载器

Eclipse中可以 动态加载一些jar可以拓展eclipse的功能,原理就是jvm提供了一个Custom ClassLoader的功能,让我们可以加载指定jar包中的字节码文件,拓展应用的功能,从而实现动态加载。android中继承了jvm的这一特性,所以android也可以实现动态加载功能(之后也会详细介绍android中基于此动态加载技术的热修复、热更新、组件化的内容)。

3.内存空间模块:

分为四个部分,分别存储class字节码不同的部分。过程如下图:

Loading:从文件中获取类的信息并且载入到JVM的内存中

Verifying:检查读入的结构是否符合JVM规范的描述

Preparing:分配一个结构用来存储类信息

Resolving:把这个类的常量池中的所有的符号引用改变成直接引用

Initializing:执行静态初始化程序,把静态变量初始化成指定的值。所以在源java代码中写的static修饰的属性不会把值立即赋值给这个属性,它会执行Loading、Verifying、Preparing、Resolving等步骤之后再进行初始化。

4.垃圾回收模块

这个暂时不做过多的叙述,以后的文章会提到。

5.其它模块:

如指令集、执行引擎、本地方法接口等等,都属于jvm底层与CPU打交道的暂时不用深入。

好了,本篇文章就分享到这里了。有兴趣的新手伙伴们可以关注收藏起来,以后需要的时候可以多看看。如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59789,1510里面免费送java的视频系统教程!

猜你喜欢

转载自blog.csdn.net/weixin_43660525/article/details/85636951