JVM(一)

本文介绍了JVM的基础知识,包括JVM的功能、常见JVM类型,以及字节码文件的组成。详细阐述了字节码文件的结构,如魔数、主副版本号、常量池、方法等。讲解了类的生命周期,包括加载、连接(验证、准备、解析)、初始化阶段。此外,还详细讨论了类加载器的分类和双亲委派机制,以及如何打破这一机制。
摘要由CSDN通过智能技术生成

一、初始JVM

1.1 初始JVM

JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。

机器码是由二进制编码表示的计算机指令。每个机器码通常对应一个特定的操作,如加法、乘法、跳转等。机器码是计算机能够直接执行的代码,它可以在计算机的内存中存储和执行。

计算机通过将机器码加载到CPU中执行,进行各种操作和运算。机器码是计算机的最底层指令,它由一系列的二进制位组成,每个位表示不同的含义,如操作码、寄存器地址、内存地址等。

 1.2 JVM的功能

字节码需要在JVM中解释执行,相比直接翻译成机器码会有一定的性能损失,但是优点所带来的好处使得Java在跨平台开发和安全编程中得到广泛应用。

以下是Java采用字节码的优点:

  1. 可移植性:字节码是一种与平台无关的中间代码,它可以在任何支持Java虚拟机(JVM)的操作系统上运行。只要目标平台上有JVM,就可以将字节码加载并执行,无需修改源代码。这种可移植性使得Java成为一种跨平台的编程语言。

  2. 安全性:字节码在执行之前需要经过JVM的安全检查。JVM可以对字节码进行类加载、字节码验证、安全检查等操作,确保字节码不会直接对底层系统造成损害。这种安全性机制可以防止恶意代码对计算机系统造成破坏。

  3. 高级开发环境:Java的编译器将源代码翻译成字节码后,开发人员可以利用丰富的开发工具和环境进行调试、测试和优化。开发人员可以进行实时的代码修改和调试,提高开发效率。

  4. 跨语言互操作性:由于字节码是一种中间代码,它可以与其他语言的中间代码相互转换、调用和交互。这意味着可以在Java程序中使用其他语言编写的模块和库,或者将Java程序的字节码转换成其他语言的可执行形式。

1.3 常见jvm

 常见的JVM有HotSpot、GraalVM、OpenJ9等,另外DragonWell龙井JDK也 提供了一款功能增强版的JVM。其中使用最广泛的是HotSpot虚拟机

二、字节码文件详解

 2.1 字节码文件的组成

2.1.1 字节码文件打开方式

字节码文件中保存了源代码编译之后的内容,以二进制的方式存储,无法直接用记事本打开阅读。

使用jclasslib插件可以打开

 2.1.2 字节码文件的组成

 2.1.2.1 魔数
  1. 文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。
  2. 软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。
  3. Java字节码文件中,将文件头称为magic魔数

 

  2.1.2.2 主副版本号
  1. 主副版本号指的是编译字节码文件的JDK版本号,主版本号用来标识大版本号;副版本号是当主版本号相同时作为区分不同 版本的标识,一般只需要关心主版本号。
  2. 版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容。

 

上述问题就是当前jdk版本为1.6,但是字节码文件为1.8.因此编译错误

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值