网站首页 > java教程 正文
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程序所需要的完整环境。
猜你喜欢
- 2024-12-18 厉害,GitHub上标星90.7K「Java学习+面试指南」
- 2024-12-18 深入理解Java类加载机制,再也不用死记硬背了
- 2024-12-18 基于Springboot的权限管理系统 springboot权限管理框架
- 2024-12-18 Java面试篇基础部分-Java创建线程详解
- 2024-12-18 Git 分支设计规范 git查看所有分支
- 2024-12-18 JAVA缓存规范——虽迟但到的JCache API与天生不俗的Spring Cache
- 2024-12-18 教你用Java开发一个简单的JVM 用java做一个简单的项目
- 2024-12-18 关于研发规范化的一些实践和思考 关于研发规范化的一些实践和思考怎么写
- 2024-12-18 JAVA代码规范与编写高质量代码的建议(1)
- 2024-12-18 JAVA 编码规范 java编码规范有哪些
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)