快捷搜索:  汽车  科技

java虚拟机内存回收机制(架构师强推学习Java虚拟机和垃圾回收基础知识)

java虚拟机内存回收机制(架构师强推学习Java虚拟机和垃圾回收基础知识)执行可执行文件,如在Windows中双击EXE文件(文件格式为PE格式),操作系统会创建新的进程/线程执行代码。程序的执行过程涉及程序的加载、链接、执行等工作。链接器对目标机器文件进行链接,链接包括动态链接和静态链接。链接后形成可执行文件,不同系统有不同的可执行文件格式,如在Windows中使用PE(Portable Executable)格式、在Linux中使用ELF(Executable andLinkable Format)等格式。Java代码的执行过程更为复杂。Java代码在执行之前首先编译成字节码(ByteCode,简称BC,是一种中间语言表示),然后由JVM执行字节码。字节码的执行是一个非常复杂的过程,涉及字节码的解释、编译,以及解释/编译代码的执行,这些工作均由JVM来完成。为了能够更好地了解JVM的工作原理,首先需要了解一下C、C 语言的编译执行过程。本节主要介绍程序的执

Java代码执行过程介绍

正如大家所熟知的,在Windows系统上执行一个应用非常简单,直接双击应用就可以执行。然而从源代码到可执行程序(也称为应用)的过程相当漫长,以C/C 语言为例,首先程序员需要根据功能开发相应的代码,待开发完成后需要将代码编译成目标文件,目标文件经过链接形成可执行文件(或应用)。可执行文件是指操作系统(Operation System,OS)可以识别的文件格式,OS加载文件后就可以运行相应的程序。

而Java语言的执行过程和C/C 语言有所不同,主要原因是Java代码的执行依赖JVM。在Java程序执行时,JVM相当于OS,会负责Java程序的加载、链接、编译、执行等工作。

虽然Java语言的执行过程不同于C 的执行过程,但是在执行层面两者还是有一些共同点的,主要原因是C 和Java都是面向对象语言,都支持封装、继承和多态。本章首先介绍C语言是如何执行的,然后介绍编译器在执行层面是如何支持C 语言特性的,最后介绍JVM是如何执行Java代码的。

代码执行过程概述

Java代码是如何被执行的?要回答这个问题并不容易。一般来说,代码的执行有两种模式:解释执行和编译执行。解释执行指的是解释器读取源代码,逐行解释代码,生成目标机器代码并执行;编译执行指的是编译器首先把源代码编译成目标机器代码,然后链接成可执行文件,最后由OS负责执行可执行文件。

Java代码的执行过程更为复杂。Java代码在执行之前首先编译成字节码(ByteCode,简称BC,是一种中间语言表示),然后由JVM执行字节码。字节码的执行是一个非常复杂的过程,涉及字节码的解释、编译,以及解释/编译代码的执行,这些工作均由JVM来完成。为了能够更好地了解JVM的工作原理,首先需要了解一下C、C 语言的编译执行过程。

本节主要介绍程序的执行方式,后文再详细介绍不同语言的执行过程。

编译执行

编译执行最典型的代表是C/C 语言。C/C 源代码首先由编译器进行编译,不同系统/平台的编译器不同,编译器根据代码执行的目标平台产生目标机器文件。

链接器对目标机器文件进行链接,链接包括动态链接和静态链接。链接后形成可执行文件,不同系统有不同的可执行文件格式,如在Windows中使用PE(Portable Executable)格式、在Linux中使用ELF(Executable andLinkable Format)等格式。

执行可执行文件,如在Windows中双击EXE文件(文件格式为PE格式),操作系统会创建新的进程/线程执行代码。程序的执行过程涉及程序的加载、链接、执行等工作。

18C/C 程序执行流程如图1-1所示。

java虚拟机内存回收机制(架构师强推学习Java虚拟机和垃圾回收基础知识)(1)

图1-1 编译执行流程

解释执行

采用解释执行的语言也非常多,一些常用的脚本语言(如Python)就是解释执行。Python代码被编译成字节码,然后由解释器针对字节码进行解释执行。解释执行和编译执行最大的区别在于是否存在目标机器文件,显然,解释执行中并没有产生目标机器文件。

混合执行

解释执行实现简单,通常启动也比较快,但是性能低下;编译执行需要强大的编译器支持,编译实现复杂,但性能较高。混合执行融合解释执行和编译执行的优点(实际上混合执行还可以引入新的编译优化方式,即大家所熟知的Just-In-Time优化),程序在执行过程中既存在解释执行也存在编译执行,最典型的代表就是Java语言的执行。Java的执行过程可以概括为:

1)Java源代码首先由编译工具javac编译成字节码,字节码有固定的文件格式,称为Class文件,该类型的文件可以跨操作系统执行。

2)启动JVM(不同的系统JVM不同),JVM加载字节码,解释执行字节码。在解释执行的过程中如果发现字节码(更准确地说是字节码片段,如一个函数或者一个循环代码)执行频次高,会尝试将字节码直接编译成目标机器代码,待编译完成后使用编译优化后的机器代码替代解释执行。

Java程序的执行过程如图1-2所示。

java虚拟机内存回收机制(架构师强推学习Java虚拟机和垃圾回收基础知识)(2)

图1-2 混合执行流程

比较图1-1和图1-2,可以看到JVM做了链接器的工作,还因为JVM也做了编译工作,所以实质上它也包含了编译器。另外,JVM还做了操作系统的部分工作,例如对资源的管理等。

本文给大家讲解的内容是Java虚拟机和垃圾回收基础知识:Java代码执行过程介绍,代码执行过程概述
  1. 下篇文章给大家讲解的内容是Java虚拟机和垃圾回收基础知识:Java代码执行过程介绍, 从C代码执行过程看编译器和操作系统协同工作
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持

猜您喜欢: