JVM

Java和JVM的一些名词

2021-07-12  本文已影响0人  三也视界

1.机器码和字节码

机器码

机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。
通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。

机器码是电脑CPU直接读取运行的机器指令,运行速度最快,由0,1组成的二进制代码,但是非常晦涩难懂,也比较难编写

字节码

字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。
字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。

在Java中,编写好的程序即通常的.java文件需要经过编译器编译成.class文件,这段.class文件是一段包含着虚拟机指令、程序和数据片段的二进制文件,即字节码,为什么叫字节码?因为这种类型的代码以一个字节8bit为最小单位储存。

2.编译器和解释器

编译器

编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。

解释器

将相对高级的程序代码解释成电脑可以直接运行的机器码。

以Java为例:

电脑是不能直接执行Java程序的,一个.java程序要想被执行,首先需要编译器将高级的.java程序文件编译成.class字节码片段,字节码经过JVM(解释器)的处理后生成电脑可以直接执行的机器码,至此java程序才能得以正确运行。

image.png

3.原生线程

这里所说的线程指程序执行过程中的一个线程实体。JVM 允许一个应用并发执行多个线程。
Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。
Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。当线程结束时,会释放原生线程和 Java 线程的所有资源

虚拟机线程(VM thread)

这个线程等待 JVM 到达安全点操作出现。这些操作必须要在独立的线程里执行,因为当
堆修改无法进行时,线程都需要 JVM 位于安全点。这些操作的类型有:stop-the�world 垃圾回收、线程栈 dump、线程暂停、线程偏向锁(biased locking)解除。

周期性任务线程

这线程负责定时器事件(也就是中断),用来调度周期性操作的执行。

GC 线程

这些线程支持 JVM 中不同的垃圾回收活动。

编译器线程

这些线程在运行时将字节码动态编译成本地平台相关的机器码。

信号分发线程

这个线程接收发送到 JVM 的信号并调用适当的 JVM 方法处理。

上一篇下一篇

猜你喜欢

热点阅读