笔记均来自于尚硅谷官方视频,为了本人复习使用,无其他目的
尚硅谷官方视频
一、直接内存
1.不是虛拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的
内存区域。
2.直接内存是在Java堆外的、直接向系统申请的内存区间。
来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存,
3.访问直接内存的速度会优于Java堆。即读写性能高,适用于读写频繁以及大文件的场合。Java的NIO库(非阻塞)允许Java程序使用直接内存
4.由于直接内存在Java堆外,因此它的大小不会直接受限于-Xmx指定的最大
堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操
作系统能给出的最大内存。
二、执行引擎
1.执行引擎概述
(1)执行引擎是Java虛拟机核心的组成部分之一。
(2)JVM的主要任务是java程序编译后的字节码文件加载到内存中让其解释执行,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。那么,如果想要让一个Java程序运行起来,执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。
(3)字节码文件被执行引擎翻译成操作系统能识别的机器指令
2.执行引擎的工作过程
执行引擎从pc寄存器中取字节码指令的地址,用于局部变量表和操作数栈的执行
3.java代码编译和执行的过程
javac编译源程序属于前端编译,而JVM需要后端编译器,即执行引擎将字节码指令编译成机器指令
Java字节码的执行是由JVM执行引擎来完成的
4.解释器和JIT(及时)编译器
(1)解释与翻译的概念
解释是将字节码指令转换为机器指令并直接执行,执行完不保存,一行一行解释执行,包括了解析后的执行过程;
翻泽是也是将字节码翻译为机器指令,但是不立即执行,会保存下来,最终一块执行
(2)HotSpotVM是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构。在Java虚拟机运行时,解释器和即时编译器能够相互协作,各自取长补短。当程序启动后,解释器可以马上发挥作用,省去编译的时间,立即执行。编译器要想发挥作用,把代码编译成本地代码,需要一定的执行时间。 但编译为本地代码后,执行效率高。
(3)编译期
三、机器码、汇编语言、高级语言
1.机器码、汇编语言、高级语言概括
机器码
也叫机器指令:二进制编码方式的指令
汇编语言
高级语言
2.机器码、汇编语言、高级语言三者关系