薄情先生|程序员进阶系列:多图教你掌握JVM
提及 JVM 这个词 , 估计大家都能简单说两句 , 但是根据身边朋友以及诸多粉丝提出的疑问 , 能系统讲出来 JVM 的 , 却真心很少 。
网上讲解 JVM 这块的文章非常多 , 不过鱼龙混杂 , 鉴于 JVM 也是最考验 Java 程序员的基础功底啦 , 今天静下来 , 一起画画图 , 一起梳理梳理 , 好好填补一下这块 , 争取无论走到哪里 , 大家在脑海中都能有文中提及的 JVM 内存模型图 。
JVM 初识在讲解 JVM 之前 , 先来揭秘一下 Java 程序是如何实现一次编译到处运行的?
步骤一:用文本编辑器或者 IDE , 快速编写 HelloWorld.java 的源代码文件;
步骤二:用 Java 编译器(javac)把源代码(*.java)编译成字节码文件(*.class);
步骤三:字节码文件(.class)便可以在任何安装了 JVM 的操作系统中运行 , JVM 会将字节码翻译成可以被机器执行的本地机器码 。
那么重点来了 , Java 是如何实现一次编译到处运行的呢?通过上图应该很清晰找到解 。
解一:Java 一次编译 , 到处运行 , 跨平台的特性是通过 JVM 来实现的 , 通过 JVM 来屏蔽底层操作系统的差异;
解二:Java 通过 JVM 来实现跨平台 , 但是 JVM 是不跨平台的 , 也就是说不同操作系统之上的 JVM 是不同的 , Linux 系统上的 JVM 不能用在 Windows 系统上 。
JVM 窥探既然已经知晓 Java 程序可以通过 JVM 来实现一次编译 , 到处运行的跨平台特性 , 那么 JVM 到底是什么呢?
JVM 是 Java Virtual Machine(Java虚拟机)的缩写 , JVM 是一种用于计算设备的规范 , 它是一个虚构出来的计算机 , 是通过在实际的计算机上仿真模拟各种计算机功能来实现的 —— 百度百科 。
上面是引了一段百度百科对 JVM 的解释 , 大意就是 Java 虚拟机是在计算机上虚构出来的一个计算机 , 既然是虚构的就意味着看不到 , 只在于内存之中 。
(图片来源于网络)
如上图所示 , 计算机主要有运算器、控制器、内外存储器、输入和输出设备组成 , 那么 JVM 结构长啥样子呢?
还是以开篇的 HelloWorld 为例 , 窥探一下 JVM 的运行流程 。
1. Java 源代码文件会被 Java 编译器编译为字节码文件(.class);
2. JVM 中的类加载器进行加载各个类的字节码文件 , 将所有类结构和方法变量放入运行时数据区;
3. 字节码文件加载完毕之后 , 交给 JVM 执行引擎进行执行 。
JVM = 类加载器 ClassLoader + 执行引擎 Execution Engine + 运行时数据区域 Runtime Data Area 。
在程序执行过程中 , 会分配内存空间来存储程序执行期间需要用到的数据相关信息 , 分配的内存空间被称作为 Runtime Data Area(运行时数据区) , 也就是常说的 JVM 内存 , 接下来就重点说一说 JVM 运行时数据区 。
(JDK 1.7 内存模型)
如上图所示 , JVM 运行时数据区主要分为程序计数器、虚拟机栈、本地方法栈、方法区、堆 。
推荐阅读
- 薄情娱乐咖|还能登上人生巅峰,贾诩简直就是张绣的“人生导师”,打一手烂牌
- 脑极体|百度之星正在出圈,用十六年打造程序员版“天才请就位”
- 方舟先生|称用作品说话,粉丝可以先看其他人,胡歌被侃失踪人口但无惧掉粉
- LOL嘴强老司机|老骥伏枥!卡萨六进世界赛首次闯入四强!从决胜局拉哥到关键先生
- 中国新闻网|马来西亚将“云纪念”陈嘉庚先生146周年诞辰
- 八卦先生|新版《粉红女郎》:殷桃不及陈好有风情,男配角比原版颜值降级
- 程序员|我国超重型火箭核心设备亮相,载重超“胖五”5倍,还用上了3D打印
- 小彩说娱乐|本以为会丑,却是被天使吻过的脸,有种基因叫“憨豆先生”的女儿
- 体育先生V|GOAT之争极其激烈的五大体育项目
- 体育先生V|现役只有他最有机会吗?,詹姆斯加入4冠+4MVP俱乐部第四人
