JVM概念
我认为一般开发人员乃至架构师只需要弄懂JVM基本原理,不必过分深究,学无止境,但要认清并规划好自身目标,把效率最大化。所以我这里把他分为容易理解4个部分,JVM的每个部分只用简单的话概括。
1、JVM(Java虚拟机)是什么
一句话:把Java语言编译成机器语言的工具
JVM是Java程序能够实现跨平台运行的关键,在程序的开发过程中能够帮助我们忽略不同操作系统的底层细节区别。运行原理见3。
2、JVM处于Java的哪部分?
在你给自己电脑上安装完JDK时,JRE(Java运行时环境)和JVM(Java虚拟机)也就同时安装在了操作系统上。JVM不可以单独安装,JRE可以。
3、JVM是如何开始运行?
第1步:主线程(比如main方法)执行后,.java文件被javac编译成字节码文件.class
第2步:.class文件被编译成机器码来调用系统硬件资源。机器码类型由安装的jdk类型决定(windows或linux)。
4、JVM里面都有些什么?
可以理解为包括2个功能性工具(类装载子系统、字节码执行引擎),和1大块物理区(运行时数据区)。
1)类装载子系统:把本地的.class字节码文件的类信息,加载到内存中保存。
2)字节码执行引擎:物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而JVM的执行引擎建立在软件上,再由软件翻译成机器语言。不同的操作系统JDK中,字节码执行引擎也不一样。
3)运行时数据区:一大块内存物理区。包括堆、栈、本地方法栈、元空间、程序计数器5个小区域。
接下来关于JVM内存模型的学习,深度和难度开始提高了。我认为这一块是否熟练,薪资差可能在3K以上。
之前说到JVM内存实际上就是把Java代码转换为操作系统的指令,从而调配硬件资源。其中最主要的,就是对内存的操作。这里只重点关注Java1.8之后的JVM内存模型。
JVM内存模型
·先上概念图
由此图可看出,JVM包括2个功能性工具(类装载子系统、字节码执行引擎),和1大块物理区(运行时数据区)。下面着重分析“运行时数据区”,也一边研究他们3大块之间的关系。