JVM 了解

  1. 对于jvm虚拟机的基本理解
    跨语言:只要编译器生成的字节码文件符合jvm的股份就支持
    分多种虚拟机:各家基于jvm规范的实现,目前主流的是HotSpot、JRockit
  2. jvm的架构模型
    基于栈指令集机构(jvm使用)
            设计简单、零地址指令、指令集少,但是相同操作指令多、不需要硬件支持、可移植性好,更好的实现跨平台
    基于寄存器指令集加工
             指令集依赖于硬件、性能优秀、可移植性差、指令集往往是一指令、二指令、三指令
  3. jvm的生命周期
    jvm的启动:通过引导类加载器创建一个初始类来启动,这个类是由虚拟机的具体实现指定的
    jvm的执行:程序开始执行时才执行,查询结束时结束。执行java程序实际执行的是jvm虚拟机
    jvm的退出:
              正常执行结束
              程序因为异常而中止
              操作系统错误导致jvm退出
              主动调用Runtime或System类的exit()方法,或Runtime的halt方法
              JNT

    jvm的发展历程

    现在的jvm虚拟机都是由解释器和JIT(即时编译器)协同工作

    JIT对于多次执行的代码(热点代码)缓存,提高执行效率

    jvm虚拟机种类

    Oracle:HotSpost、JRockit

    IBM:J9

    HotSpost:解释器和编译器协调工作,取平衡

    JRockit:完全使用即时编译器,号称最快的虚拟机

    J9:在IBM自己的产品上使用快

    所有虚拟机的原则:一次编译,到处运行

### Java JVM 的基本概念及工作原理 #### 什么是 JVMJava 虚拟机 (JVM, Java Virtual Machine) 是一种抽象计算模型,它提供了一种运行环境来执行编译后的字节码文件 (.class 文件)[^1]。JVM 将字节码解释成底层硬件可识别的机器指令并执行。 #### JVM 的组成结构 JVM 主要由以下几个部分构成: 1. **类加载器(Class Loader)** 类加载器负责动态加载 .class 文件到 JVM 中,并将其转换为对应的 Class 对象实例[^2]。整个过程分为三个阶段:加载、链接和初始化。 2. **运行时数据区(Runtime Data Areas)** 运行时数据区是 JVM 在运行程序期间用来存储各类数据的地方,主要包括以下几部分: - **方法区(Method Area)**: 存储已被虚拟机加载的类信息、常量池、静态变量以及即时编译器编译后的代码等[^3]。 - **堆(Heap)**: 所有的对象实例都分配在此区域中,它是垃圾收集的主要目标之一。 - **栈(Stack)**: 每当启动一个新的线程时都会创建一个栈,用于保存局部变量表、操作数栈、返回地址等信息。 - **PC 寄存器(Program Counter Register)**: 记录当前线程所执行的字节码指令的位置。 - **本地方法栈(Native Method Stack)**: 和 Java 方法栈类似,但是服务于 Native 方法。 3. **执行引擎(Execution Engine)** 执行引擎的作用是对字节码进行解析并最终完成实际的操作。其核心功能包括解释执行与 JIT 编译两种方式。 4. **本机接口(Native Interface)** 提供与其他语言开发的功能模块交互的能力,允许调用 C/C++ 等其他语言实现的方法。 5. **垃圾回收机制(Garbage Collection Mechanism)** 自动管理内存分配与释放的过程称为垃圾回收(GC),这是 JVM 的一大特色。GC 可以有效防止程序员手动处理内存泄漏等问题。 #### 工作流程概述 - 当用户运行某个 `.java` 文件时,源代码会被编译成独立于平台的中间形式——`.class` 字节码文件。 - 接下来,JVM 加载该字节码并通过验证确保安全性之后进入准备阶段;随后按照顺序依次经历解析和初始化这两个重要环节。 - 初始化完成后便进入了真正的执行期,在此期间所有的业务逻辑都将被执行完毕直至结束或异常终止为止。 ```python # 示例 Python 伪代码展示如何模拟简单的 JVM 流程控制 def jvm_process(class_file_path): byte_code = load_class(class_file_path) if validate(byte_code): initialize_runtime_data_areas() while not end_of_execution(): instruction = fetch_next_instruction() execute(instruction) jvm_process('example.class') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值