网站首页 > 精选教程 正文
Java虚拟机(Java Virtual Machine,简称JVM)是一个能够执行Java字节码的虚拟计算机。
当您编译 Java 源代码时,会得到一个中间 Java 文件,称为 Java 类(.class文件)。 该类文件由表示抽象指令代码的字节码组成。 这些代码不可由任何计算机处理器直接执行。
要运行 Java 程序,需启动 JVM 并将类文件传递给 JVM。 JVM 提供许多服务,包括装入类文件和解释(执行)字节码。JVM 是提供运行 Java 应用程序的运行时环境的核心技术。保证Java程序能够在不同的操作系统和硬件架构上无缝执行。
JVM的主要功能
- 加载代码(Class Loader):JVM负责从硬盘或网络中加载Java类(.class文件),并将它们加载到内存中。加载的过程包括验证、解析、初始化等步骤。
- 字节码验证:JVM对加载的字节码进行验证,确保字节码文件没有受到破坏,并且符合Java的语言规范,以避免安全问题。
- 执行字节码:JVM通过解释执行或即时编译(JIT,Just-in-Time Compilation)将字节码转换为平台特定的机器码,执行Java程序。
- 内存管理(垃圾回收):JVM负责管理堆内存和栈内存,并进行垃圾回收。它通过自动回收不再使用的内存,减少内存泄漏和溢出的风险。
JVM的组成
类加载器(Class Loader):负责加载字节码文件并将其转换为类实例。类加载器是Java运行时的一个关键组件,它会根据不同的加载路径(如文件系统、网络等)加载类,并将其组织成类的层次结构。
运行时数据区: JVM的内存区域主要包括:
- 方法区(Method Area):存储类的元数据(如类信息、常量池、静态变量等)。
- 堆区(Heap):用于存放对象的内存区域,所有的对象实例和数组都在堆上分配。
- 栈区(Stack):每个线程都有自己的栈,栈中存放方法的局部变量和操作数栈。每当一个方法被调用时,JVM会为其分配一个栈帧。
- 程序计数器(PC Register):指示当前线程所执行的字节码的行号。
执行引擎(Execution Engine):负责执行字节码指令,包含:解释器(Interpreter):逐条解释执行字节码。即时编译器(JIT Compiler):将字节码编译为机器码,提升性能。
垃圾回收器(Garbage Collector):负责回收堆内存中不再使用的对象,自动管理内存,避免内存泄漏。
JVM的优点
- 跨平台:JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
- 自动内存管理:JVM提供垃圾回收机制,自动管理内存分配和回收,减少了程序员的内存管理负担。
- 安全性:JVM对字节码进行验证,能够有效避免恶意代码的执行,并且通过沙箱机制提供隔离环境。
JVM与JRE、JDK的关系
- JVM(Java Virtual Machine):是Java虚拟机,负责执行Java程序的字节码。
- JRE(Java Runtime Environment):是Java运行时环境,包含JVM和运行Java程序所需的库和其他组件。JRE是开发者运行Java程序所需的环境。
- JDK(Java Development Kit):是Java开发工具包,包含JRE和用于开发Java应用的工具(如编译器javac)。JDK是开发者开发Java程序所需要的完整环境。
- 上一篇: 浅谈Java多线程与并发原理
- 下一篇: 深入理解Java虚拟机——JMM(Java内存模型)
猜你喜欢
- 2024-12-13 北上广深杭30K试题:JVM内存模型如何分配的?
- 2024-12-13 经典技术干货分享:JVM内存模型和垃圾回收机制
- 2024-12-13 面试题:JVM 面试题:结婚当天领导安排工作
- 2024-12-13 听说你还不知道Java代码是怎么运行的?
- 2024-12-13 JVM 基础面试题总结,面试必备 jvm原理面试
- 2024-12-13 浅谈java虚拟机 java虚拟机运行机制
- 2024-12-13 Java-GC总结 java的总结
- 2024-12-13 jvm之java类加载机制和类加载器(ClassLoader)的详解
- 2024-12-13 Java 虚拟机 深入理解java虚拟机
- 2024-12-13 JVM优化:虚拟机栈&本地方法栈
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)