JVM(java虚拟机)的运行机制

本文详细介绍了JVM(Java虚拟机)的工作原理,包括JVM的启动过程、类加载子系统、方法区、Java堆、Java栈、本地方法栈、程序计数器、JVM执行引擎、本地方法接口(JNI)以及垃圾回收机制。JVM的跨平台能力使得Java程序能在多种操作系统上运行。文章还讨论了不同类型的线程、类加载器和内存区域的细节,如常量池、堆和栈的作用,以及如何通过JNI与其他语言交互。此外,JVM的垃圾回收机制确保了内存的有效管理。
摘要由CSDN通过智能技术生成

JVM原理

1.JVM是由软件技术模拟出的Java编译器与os平台之间的虚拟计算机,我们编写出的Java程序不能直接被操作系统直接识别,此时就需要JVM出来翻译,java程序经编译器编译产生.class文件(即字节码文件),而字节码文件又通过ava虚拟机中的解释器(字节码指令集)编译成特定机器上的机器码;

2.JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,每一种平台的解释器是不同的,但是实现的虚拟机是相同的,因此Java能一次编译,到处运行,可跨平台;

3.当一个程序开始运行,虚拟机就开始实例化,一个Java程序会开启一个JVM进程,如果一台机器上运行多个程序,那么就会有多个运行中的JVM进程;程序停止或结束,虚拟机实例化 也结束;多个虚拟机实例之间数据不能共享;

4.java中线程有两种:守护线程,普通线程

守护线程是JVM自己使用的线程,比如垃圾回收(GC)。

普通线程是java程序的线程,只要JV吗中有普通线程在执行JVM就不会停止。

 

此题的简单回答:

java源文件由jre编译成为字节码文件,jvm会根据编译的字节码文件(.class)调用类装载器进行装载ClassLoader,并验证文件的属性(方法,修饰符,属性等)信息和错误信息,最后使用反射机制初始化类对象。

 

详细答案:

JVM的运行机制主要包括以下三个部分:

1.类装载子系统:装载具有适合名称的类或接口

Java执行原文件的过程:

Java源文件—->编译器—->字节码文件—->JVM—->机器码。

装载:类装载器class loader负责加载.class文件:JVM通过类名、类所在的包名通过ClassLoader来完成类的加载,同样,也采用以上三个元素来标识一个被加载了的类:类名+包名+ClassLoader实例ID

连接:链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接口、类;在完成了校验后,JVM初始化类中的静态变量,并将其值赋为默认值。最后一步为对类中的所有属性、方法进行验证,以确保其需要调用的属性、方法存在,以及具备应的权限(例如public、private域权限等),会造成NoSuchMethodError、NoSuchFieldError等错误信息。

初始化:初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化,在四种情况下初始化过程会被触发执行:调用了new;反射调用了类中的方法;子类调用了初始化;JVM启动过程中指定的初始化类。

2.执行引擎:负责执行包含在已装载的类或接口中的指令

每个线程在创建后,都会产生一个程序计数器(pc)和栈(Stack),其中程序计数器中存放了下一条将要执行的指令,Stack中存放Stack Frame,栈帧,表示的为当前正在执行的方法,每个方法的执行都会产生Stack Frame,Stack Frame中存放了传递给方法的参数、方法内的局部变量以及操作数栈,操作数栈用于存放指令运算的中间结果,指令负责从操作数栈中弹出参与运算的操作数,指令执行完毕后再将计算结果压回到操作数栈,当方法执行完毕后则从Stack中弹出,继续其他方法的执行。

在执行方法时JVM提供了invokestatic、invokevirtual、invokeinterface和invokespecial四种指令来执行:

(1)invokestatic:调用类的static方法

(2) invokevirtual: 调用对象实例的方法

(3) invokeinterface:将属性定义为接口来进行调用

(4) invokespecial: JVM对于初始化对象(Java构造器的方法为:<init>)以及调用对象实例中的私有方法时。

3.运行时数据区:方法区,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值