废话不多说,先直接上个图:
java技术学习扣qun:59789,1510进群免费送java系统学习视频!上图为JVM整体组成结构,有几个模块组成:
1.class文件生成模块:
通过jdk自带的javac编译命令生成
java技术学习扣qun:59789,1510进群免费送java系统学习视频!中间过程就是javac编译程序内部处理的过程,核心就是针对源代码词法和语法的分析。
2.类加载器子系统模块:
JVM运行时自动创建,作用是将class字节码加载到jvm对应的内存中。类加载的核心就是classLoader,classLoader也是动态加载技术的核心。classLoader在此不作详细介绍下一章再总结。
classLoader将class字节码加载到jvm内存中如下图
java技术学习扣qun:59789,1510进群免费送java系统学习视频!上图为jvm提供的几种加载器
Eclipse中可以 动态加载一些jar可以拓展eclipse的功能,原理就是jvm提供了一个Custom ClassLoader的功能,让我们可以加载指定jar包中的字节码文件,拓展应用的功能,从而实现动态加载。android中继承了jvm的这一特性,所以android也可以实现动态加载功能(之后也会详细介绍android中基于此动态加载技术的热修复、热更新、组件化的内容)。
3.内存空间模块:
分为四个部分,分别存储class字节码不同的部分。过程如下图:
java技术学习扣qun:59789,1510进群免费送java系统学习视频!Loading:从文件中获取类的信息并且载入到JVM的内存中
Verifying:检查读入的结构是否符合JVM规范的描述
Preparing:分配一个结构用来存储类信息
Resolving:把这个类的常量池中的所有的符号引用改变成直接引用
Initializing:执行静态初始化程序,把静态变量初始化成指定的值。所以在源java代码中写的static修饰的属性不会把值立即赋值给这个属性,它会执行Loading、Verifying、Preparing、Resolving等步骤之后再进行初始化。
java技术学习扣qun:59789,1510进群免费送java系统学习视频!4.垃圾回收模块
这个暂时不做过多的叙述,以后的文章会提到。
5.其它模块:
如指令集、执行引擎、本地方法接口等等,都属于jvm底层与CPU打交道的暂时不用深入。
好了,本篇文章就分享到这里了。有兴趣的新手伙伴们可以关注收藏起来,以后需要的时候可以多看看。如果有正在学java的程序员,可来我们的java技术学习扣qun哦:59789,1510里面免费送java的视频系统教程!
网友评论