跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
JVM
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{NoteTA |G1=IT |G2=Programming }} '''JVM'''(Java Virtual Machine,Java虚拟机)是[[Java]]平台的核心组件,它是一个能够执行Java字节码的虚拟计算机。JVM的主要特点是"一次编写,到处运行"(Write Once, Run Anywhere),这使得Java程序能够在任何安装了JVM的设备上运行,而无需重新编译。 == 概述 == JVM是Java技术的基石,它负责: * 加载和验证Java字节码 * 将字节码解释或编译为机器码 * 管理内存和垃圾回收 * 提供运行时环境 JVM规范由Oracle公司发布,但具体实现可以由不同厂商提供,如[[HotSpot]](Oracle官方实现)、[[OpenJ9]](IBM/Eclipse实现)等。 == 架构 == JVM的主要组件包括: === 类加载器子系统 === 负责加载.class文件,包含三个主要类加载器: * 引导类加载器(Bootstrap ClassLoader) * 扩展类加载器(Extension ClassLoader) * 应用程序类加载器(Application ClassLoader) === 运行时数据区 === * 方法区(存储类结构) * 堆(存储对象实例) * Java栈(存储方法调用和局部变量) * 程序计数器 * 本地方法栈 === 执行引擎 === 负责执行字节码,可能包含: * 解释器 * 即时编译器(JIT) * 垃圾回收器 <mermaid> graph TD A[源代码.java] -->|javac编译| B[字节码.class] B --> C[JVM] C --> D[类加载器] D --> E[运行时数据区] E --> F[执行引擎] F --> G[本地机器码] </mermaid> == 工作原理 == 1. Java源代码被编译为平台无关的字节码(.class文件) 2. JVM加载这些字节码 3. 字节码被验证以确保安全性 4. 执行引擎将字节码转换为机器码执行 == 内存管理 == JVM使用自动垃圾回收机制管理内存,主要算法包括: * 标记-清除算法 * 复制算法 * 标记-整理算法 * 分代收集算法 垃圾回收器类型: * 串行收集器(Serial GC) * 并行收集器(Parallel GC) * CMS收集器(Concurrent Mark-Sweep) * G1收集器(Garbage-First) == 性能优化 == JVM性能调优常用参数: * -Xms:初始堆大小 * -Xmx:最大堆大小 * -XX:NewRatio:新生代与老年代比例 * -XX:SurvivorRatio:Eden与Survivor区比例 示例配置: <syntaxhighlight lang="bash"> java -Xms512m -Xmx1024m -XX:NewRatio=3 -jar application.jar </syntaxhighlight> == 跨平台实现 == 虽然JVM本身是平台相关的,但通过在不同操作系统上实现JVM,Java实现了跨平台能力。Android平台使用类似的机制,但有自己的虚拟机实现([[Dalvik]]/[[ART]])。 == 实际应用 == JVM不仅用于运行Java程序,还支持其他JVM语言如: * [[Kotlin]] * [[Scala]] * [[Groovy]] * [[Clojure]] == 示例代码 == 简单的Java程序执行过程: <syntaxhighlight lang="java"> // HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, JVM!"); } } </syntaxhighlight> 编译和执行: <syntaxhighlight lang="bash"> javac HelloWorld.java # 生成HelloWorld.class java HelloWorld # JVM执行 </syntaxhighlight> == 参见 == * [[Java]] * [[字节码]] * [[垃圾回收]] * [[HotSpot]] * [[Android Runtime]] [[Category:Java平台]] [[Category:虚拟机]] [[Category:编程语言实现]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:NoteTA
(
编辑
)
模块:Crc32lua
(
编辑
)
模块:NoteTA
(
编辑
)
模块:WikitextLC
(
编辑
)