Java虚拟机常写作JVM,它和电脑里运行完整操作系统的虚拟机不是一回事。JVM更像一套专门执行Java字节码的运行环境:程序先被编译成字节码,再由当前操作系统上的JVM装载和执行。
这种设计解释了Java程序为何能在不同平台运行。开发者面对的是相对统一的字节码规则,各平台的JVM负责把它落实为本机能够处理的指令。跨平台并不意味着任何程序都无需调整,文件路径、字符编码、图形界面和本地库仍可能带来差异。
程序进入JVM后会发生什么
类加载器先找到需要的类,校验过程检查字节码结构和访问规则。执行阶段可以解释字节码,也可以把频繁运行的部分编译成本机代码,以减少重复转换。对象主要存放在受管理的内存区域,垃圾回收器会处理不再被引用的对象。
垃圾回收不等于内存永远不会出问题。程序若一直保留不需要的对象,JVM仍无法释放它们;线程过多、递归过深或堆设置不合适,也会出现不同的资源错误。排查时应先看异常信息、运行参数和实际占用,不要一看到卡顿就盲目增加内存。
JDK用于开发,包含编译和调试工具;运行Java程序所需的组件则围绕JVM和标准类库组成。不同发行方式可能把这些组件打包在一起,因此安装时要按软件说明选择合适的架构和运行环境。
理解Java虚拟机,抓住字节码、类加载、执行和内存管理就够了。写普通程序时不用每天研究内部实现,但遇到启动失败、版本不兼容或内存异常,这几个环节能帮助快速缩小问题范围。