JVM初启(一)
一、java虚拟机
官网:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-1.html#jvms-1.2
什么是JVM:
- Java虚拟机是Java平台的基石,其负责其硬件和操作系统的独立性,其编译的代码很小以及保护用户免受恶意程序攻击的能力。
- Java虚拟机是一种抽象计算机,像真正的计算机一样,它有一个指令集并在运行时操作各种内存区域。
- Java虚拟机不承担任何特定的实现技术、主机硬件或主机操作系统,它本身并没有被解释。
- Java虚拟机不知道Java编程语言,只知道特定的二进制格式,即 class 文件格式, class 文件包含Java虚拟机指令(或字节码)和符号表,以及其他辅助信息。
- 出于安全考虑,Java虚拟机对 class 文件中的代码施加了强大的语法和结构约束,但是,任何具有可以用有效 class 文件表示的功能的语言都可以由Java虚拟机托管,由通用的、与机器无关的平台吸引,其他语言的实现者可以将Java虚拟机作为其语言的交付工具。
- 如果你在线上遇到了OOM,你是否会束手无策。
- 线上卡顿是否可能是因为频繁Full GC造成的。
- 新项目上线,服务器数量以及配置不足,对于性能的扩展只能靠服务器的增加,而不能通过JVM的调优达到实现服务器性能的突破。
- 面试经常会问到JVM的一些问题,但是当面试官问到你实际的落地点时,你就会茫然不知所措,没有条理性,或者答非所问。
二、编程语言
三、计算机能懂的语言
3.1、计算机的发展史
3.2、计算机体系结构
体系结构
3.3、计算机处理数据过程
3.4、机器语言
3.5、编译型和解释型
3.5.1、编译型
- 执行速度快、效率高;依靠编译器、跨平台性差些。
- 把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
3.5.2、解释型
- 执行速度慢、效率低;依靠解释器、跨平台性好。
- 把做好的源程序翻译一句,然后执行一句,直至结束。
3.5.3、编译型+解释型
四、JVM是什么
五、JDK JRE JVM
5.1、什么是JRE
Java运行时环境(JRE)
是一个软件包,它捆绑了libraries
(jar)和JVM
,以及用Java编写的应用程序的其他组件。JVM
只是JRE
发行版的一部分。执行任何Java
程序,需要在机器上安装JRE
,这是最低要求。
JRE
捆绑的组件如下:
- DDL文件:由Java客户端虚拟机使用.
- 代码库,属性设置,资源文件也都包含,比如rt.jar和charsets.jar
- Java扩展文件,如localedata.jar
- 包含用于安全管理的文件,这些文件包括安全策略(security policy)和安全属性(security properties)
- 包含applets支持类的jar文件
- 包含平台使用的TrueType字体文件
JRE
可以作为JDK
的一部分下载或者也可以单独下载,JRE
依赖于平台,这意味着根据机器类型(操作系统和体系结构),必须选择要导入和安装的JRE
包
例如:你不能安装64位的JRE
到32位的机器上,同样,针对windows
的发行版无法在Linux
平台中工作.
5.2、什么是JDK
JDK
是JRE
的超集,JDK
包含了JRE
的所有开发,调试和监视应用程序的工具。当要开发Java
应用程序时,需要安装JDK
.
下面是JDK
附带的一些重要组件:
- apt 注解处理工具
- javadoc 文档生成器,可以自动从源代码生成说明文档
- jar 归档器,将相关的类库打包到一个JAR文件中。还可以帮助管理JAR文件
- jConsole Java监控和管理平台
- jhat Java堆分析工具
- jstack 打印Java线程的堆栈信息
- keytool 策略创建和管理工具
- jarsigner Java签名和验证工具
同JRE
,JDK
也依赖于平台,所以要下载与机器相对应的JDK
包
5.3、JDK,JRE,JVM之间的差异
基于上面的简述,我们可以得出这样的差异:
JRE = JVM + libraries to run Java Application
JDK = JRE + tools to develop Java Application
简单来说,如果你是编写代码的Java
应用开发人员,你将需要发安装JDK
,如果只是想运行使用Java
构建的应用程序,你只需要安装JRE
即可。
5.4、JDK,JRE,JVM相关的面试题
- Java中的类加载有几种类型
三种,分别是:Bootstrap,extendsion,application
- 类加载器是如何工作的
类加载器扫描它们预定义的jar文件和类的位置。它们扫描路径中的所有类文件并寻找所需的类。如果发现类则加载,链接并初始化类文件。
- JRE和JVM的不同
JVM是运行时环境的规范,它执行Java应用程序。Hotspot JVM就是这种规范的一种实现。它加载类文件,使用interpreter和JIT Compiler将字节码转换成机器码并执行它。
- interpreter和JIT compiler的不同
interpreter逐行解释字节码并按顺序执行。这会导致性能低下。JIT compiler通过在块中分析代码并在这个过程添加优化,然后准备(编译)为更优化的机器码。