java8 虚拟机结构,(八)java虚拟机结构详解(JVM)

本文详细介绍了JVM的整体结构,包括类文件生成、类加载器子系统、内存空间模块和垃圾回收。重点阐述了类加载的过程,从Loading到Initializing的各个阶段,以及内存空间的划分。此外,还提及了Android和Eclipse中的动态加载技术,预示后续将探讨内存管理和垃圾回收。
摘要由CSDN通过智能技术生成

本文主要涉及三方面内容

1.jvm整体结构;

2.java代码的编译和执行过程;

3.内存管理和垃圾回收;

(一)废话不多说,直接上图

8e0a07a42c1d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

JVM结构.jpeg

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

1.class文件生成模块:通过jdk自带的javac编译命令生成(之前文章有详细介绍)

8e0a07a42c1d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

编译流程.jpeg

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

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

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

8e0a07a42c1d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

类加载器.jpeg

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

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

3.内存空间模块:分为四个部分,分别存储class字节码不同的部分。过程如下图:

8e0a07a42c1d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

class字节码加载到jvm对应的内存过程.jpeg

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

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

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

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

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

4.垃圾回收模块

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

下一章节:内存管理和垃圾回收:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值