JVM篇1 —《启动流程、基本结构、类加载器》

本文详细探讨了JVM的启动流程、基本结构和类加载器的工作原理。介绍了类加载的五个阶段,包括加载、验证、准备、解析和初始化,并详细讲解了双亲委派机制。此外,还涵盖了类的生命周期及其不同阶段,以及获取类对象的不同方式。
摘要由CSDN通过智能技术生成

一、JVM启动流程

image-20210325113529550
在这里插入图片描述
image-20210325172825147

1、执行命令,java -jar 启动
2、装载配置,根据当前路径和系统版本寻找jvm.cmg
3、根据配置寻找JVM.dll
4、初始化JVM获得JNIEnv接口,JNIEnv为JVM接口,findClass等操作通过它实现
5、找到main方法并运行

二、JVM基本结构

image-20210325114304780

1、通过类加载器加载子系统(双亲委托机制)
2、加载进内存空间
	内存空间有方法区、java heap、java stack、native method stack
	垃圾收集器
3、其他
	通过PC寄存器 地址 给方法区
	执行引擎 与 内存 交互 数据和指令
	本地方法接口 本地方方法栈 本地方法库
	
	
PC寄存器:
	每个线程拥有一个PC寄存器
	在线程创建时 创建
	指向下一条指令的地址
	执行本地方法时,PC的值为undefined
方法区:
	保存装载的类信息
		类型的常量池
		字段,方法信息
		方法字节码
	通常和永久区(Perm)关联在一起
	JDK6时,String等常量信息置于方法,JDK7时,已经移动到了堆
Java堆
	和程序开发密切相关
	应用系统对象都保存在Java堆中
	所有线程共享Java堆
	对分代GC来说,堆也是分代的
	GC的主要工作区间
Java栈
    线程私有
    栈由一系列帧组成(因此Java栈也叫做帧栈)
    帧保存一个方法的局部变量、操作数栈、常量池指针
    每一次方法调用创建一个帧,并压栈

三、类加载器

1、描述下jvm加载class

	JVM中类的装载是由类加载器(ClassLoader)和它的子类完成的,java中类加载器是一个重要的java运行时的组件,他负责在运行时查找和装入类文件中的类。
	由于java的跨平台性,经过编译的java源程序并不是一个可执行程序,而是一个或多个类文件。
	当java程序需要使用某个类时,jvm会确保这个类已经被加载、连接(验证、准备和解析)和初始化。
	类的加载是指把类的.class文件中的数据读入到内存中。
	通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的class对象。
	加载完成后,class对象还不完整。所以此时的类还不可用。
	当类被加载后就进入连接阶段,这一阶段包括验证、准备和解析三个步骤。最后jvm对类进行初始化,包括:
		如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类
		如果类中存在初始化语句,就依次执行这些初始化语句。
		类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Ext)、系统加载器和自定义加载器。

在连接阶段一般是无法干预的,大部分干预 类加载阶段对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,类加载时候重要三个方法:

1public Class<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值