JVM从编译到执行
JAVA程序执行过程:
一个Java程序, 首先经过编译成class文件, 然后JVM将其加载到方法区. 执行引擎会执行这些字节码文件. 执行时,会翻译成操作系统相关的函数. JVM作为翻译 .class 文件的存在. 输入字节码, 调用操作系统函数.
过程:JAVA文件==>编译器==>字节码==>机器码.
JVM全程JAVA Virtual Machine, 也就是我们常说的Java虚拟机. 虚拟机只识别class文件,.并且可以把class文件解析成机器阅读的机器码, 从而完成我们想要的操作.(最近在健身房, 大家总是聊最近吃蛋白粉. 实际上, 如果把我们的身体内部比作运行时数据区, 那么我们常说的鸡蛋, 牛肉,鸡胸肉等等就好比我们的各种语言. 蛋白粉就相当于这些食物最终同一翻译成 .class文件(蛋白质)被我们人体吸收. 当我们直接吃蛋白粉时, 也就节约了.Java文件编译成为 .class文件的过程, 能更好更迅速的被人体所吸收! 然而更多的食物种类始终被大家所喜爱, 就好比现在的Java一样.)
JRE,JDK,JVM的关系
JVM是翻译官, 把class文件翻译成机器读得懂的机器码. JVM不会自己生成代码, 需要手动编写, 并且在编译过程中需要依赖很多类库, 这就需要JRE.
JRE是除开JVM外, 还为我们提供了相当多的类库jar包. 它提供了许多已经封装好的功能, 包括IO流,SOCKET等等. 至此, 已经构成了Java的运行环境.
但是对于程序员来说. 仅仅只是运行环境任然不够, 我们需要一个开发环境去编写代码. 此时JDK提供了许多工具, 包括运行, 发布, 调试以及反汇编工具.
总结: JVM的核心作用, 从软件的角度排除了不同软件与不同系统之间的不兼容问题
从跨平台到跨语言
跨平台性
可以通过JDK的不同工具翻译成统一的class语言, 对于JVM来说读取的东西是一样的. 因此体现了语音的无关性
语音无关性
不同的操作系统需要下载不同版本的JDK. 因为可以将字节码文件翻译成对应系统的机器语言, 因此体现了语言无关性.
JVM的发展历史
了解一下即可.
JVM整体知识模块
JVM涉及到非常庞大的知识体系, 如内存结构, 垃圾回收, 类加载, 心梗调优, JVM自身优化技术, 执行引擎, 类文件结构, 监控工具等, 但是所有只是体系都一定与内存结构有关系.
垃圾回收时针对内存, 类加载也是加载到内存中, 新能优化涉及到内存优化, 执行引擎与内存密不可分, 类文件结构与内存的涉及有关, 监控工具也会监控内存, 所以内存结构处于JVM的C位, 因此第一个拉出来学.
JVM的本质其实就是一个虚拟的操作系统. 出了虚拟化指令之外, 还有一个重点就是虚拟化内存. 虚拟化内存就是即将讲到的JVM内存区域.