Java的运行机制概括

这次随笔主要记录一下我对Java的平台无关性一些新的理解,以前只知道是Java是一门很容易跨平台的语言,正如 "Compile once, run anywhere" 这句话,也知道Java会先加载class字节码文件的机制,但对此是一知半解,所以我觉得有必要深入的总结一下它的加载机制。

你所了解的Java机制

  • 编写源码
  • 编译为字节码
  • 通过JVM将字节码解释为机器码

这的确是Java代码的基本加载过程,因此有时候我们称"Java是解释执行的",但最近看了一篇相关文章后觉得这样说并不准确。

"解释执行"和"编译执行"

先谈一下JRE(Java Runtime Environment)和JDK(Java Development Kit),JRE是运行环境,包含了JVM和Java类库,以及一些模块等,而JDK是JRE的超集,我们下载的JDK会包含JRE,它提供了更多工具,比如编译器和各种诊断工具等。为什么说"解释执行"不准确呢?因为一些JVM像Oracle JDK 提供的Hotspot JVM 都提供了JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT在运行时将热点代码编译成机器码,这种情况下部分代码就属于编译执行,而不是解释执行。

什么是"编译"和"解释"?

一般的程序员用的都是高级语言,像C和Java,而计算机只认识机器语言,所以我们要将高级语言翻译为机器语言后才能在计算机上运行,这里有编译和解释两种方式。像C/C++就是直接编译的语言,需要使用专门的编译器,还有像python, Ruby就是解释型语言,使用专门的解释器逐行解释并立即执行,相对前者运行速度会慢一些。Java是编译和解释型语言的结合体,我们习惯将Java分为编译期和运行时,这里的编译和C的不太一样,Java源代码编译为字节码是第一次编译,之后字节码就交由JVM处理,也就是说只要一个平台装有JVM,就可以运行Java程序。在运行时,JVM通过类加载器(Class-Loader)加载字节码,解释或者编译运行。这里涉及到更深层次的概念,主要是JIT的处理细节。主流的Java版本通常是解释和编译混合的模式,JVM针对应用的不同采取不同的编译和解释策略,像桌面应用和服务器应用,有不同的需求,这里的概念可能有点模糊,要深入JVM的话,推荐《深入理解Java虚拟机》。日常最常见的Java使用模式,是一种新的编译方式,AOT(Ahead-of-Time Compilation), 直接将字节码编译成机器代码,当然这只是一些基本概念,要深入理解Java的运行机制,就要多看相关书籍和技术文章。

总结

高级程序语言从源代码到运行的阶段一般为:编码———编译———运行———调试,Java引入JVM主要是为了实现跨平台的特性,当然还有其他作用,如符合规格的字节码都可以在JVM上运行,像JRuby, Jython等,Java程序的整体运行速度位于C和Python之间,每个语言都有自身的优点,适用于不同的场合,Java的运行机制也比本文所说的复杂的多,但也没有那么难,只要持之以恒的学习,终有一天你也会成为一名优秀的开发者。

原文地址:https://www.cnblogs.com/authetic/p/8996458.html

时间: 2024-08-29 00:35:27

Java的运行机制概括的相关文章

什么是JDK,JRE以及Java的运行机制和环境变量path,classpath的区别

1,JDK SUN公司提供了一套Java开发环境,简称JDK,它是整个Java的核心,其中包括Java编译器,Java运行工具,Java文档生成工具,Java打包工具等. 2,JRE SUN公司除了提供JDK,还提供了一种JRE工具,它是Java的运行环境,只需要运行事先编写好的程序,因此JRE工具中只包含Java运行工具,不包含Java编译工具. 3,为了方便使用,SUN公司在其JDK工具中自带了一个JRE工具,也就是说开发环境中包含了运行环境,这样一来,开发人员只需要在计算机上安装JDK,不

Java的运行机制

Java语言是当前流行的一种程序设计语言,因其安全性.平台无关性.性能优异等特点,受到广大编程爱好者的喜爱. 想学习Java语言的同学对于Java的运行机制的运行机制是必须要了解的. Java程序运行时,必须经过编译和运行两个步骤.首先将后缀名为Java的源文件进行编译,最终生成后缀名为.class的字节码文件.然后Java虚拟机将字节码文件进行解释执行,并将结果显示出来. 为了方便理解Java程序运行的过程,我们把具体步骤写下来. ①编写一个 Hello world.Java的文件. ②使用“

Java 程序运行机制

目录 Java 程序运行机制 运行过程 注释 JDK, JRE, JVM 第一个 JAVA 程序 java命名规范 入门小游戏 Java 程序运行机制 运行过程 源文件 (a.java) Java 编译器 字节码文件(a.class) 进入 JRE ,分别执行 类装载器-->字节码校验器-->解释器 系统平台,执行. 注释 JRE 中包含 JVM (JAVA虚拟机); 其中的字节码校验器也是 JAVA 安全性的一种体现. 也正是因为有 JVM 的存在, 使得 JAVA 具有挂平台的特性; JV

java语言运行机制及运行过程

java语言的特点 1.面向对象     1.1 两个基本概念:类.对象      1.2 三大特性:封装.继承.多态 2.健壮性     吸收了c/c++语言的优点,但是去掉了影响程序健壮性的部分(如指针.内存的申请与释放等),提供了一个相对安全的内存管理和访问机制 3.跨平台性     3.1 通过java语言编写的应用程序在不同的系统平台上都可以运行.           Write once,Run Anywhere      3.2 原理:只要在需要运行java应用程序的操作系统上,先

Java程序运行机制及运行过程

Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”. Java垃圾回收(Garbage Collection):不用使用的内存空间应该回收:在C/C++等语言中,由程序员负责回收无用的内存:Java语言消除了程序员回收无用内存的职 责,它提供一种系统级线程跟踪存贮空间的分配情况,并在JVM空闲的时候,检

【转载】Java JVM 运行机制及基本原理

原博地址:https://zhuanlan.zhihu.com/p/25713880 JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机. JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统"听",告诉它我们的程序需要做什么操作. 我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统

浅谈C++/JAVA/C#运行机制和执行效率

估计有很多同学都对C++/JAVA/C#这三大热门语言的运行机制和执行效率有或多或少的困惑,自己也有,但是经过前期的学习,了解了三者在这两方面的区别,就废话不说了,进入主题吧. 一.运行机制 1.JAVA-编译和解释型语言 一个JAVA文件,首先会由JAVA编译器(JAVAC)编译成class(字节码文件)文件,然后由Java虚拟机(JVM)去解释.不同的操作系统只要装有适合不同平台的JDK,JAVA文件都可以被解释运行.JAVA是一种编译和解释型语言.       字节码文件(class)之所

Java程序运行机制

高级语言的运行机制 计算机高级语言按程序的执行方式可以分为编译型和解释型两种. 编译型语言是指使用专门的编译器,针对特定平台,也就是操作系统将某种高级语言源代码一次性翻译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序 的格式,这个转换过程称为编译,编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行. 有些程序编译结束后,还可能需要对其他编译好的目标代码进行连接,即组装两个以上的目标代码模板生成最终的可执行性程序,通过这种方式实现低层次的代码复用. 因为编译型语言是

java 的运行机制之classload

java在运行的时候并不会一下子把所有程序用到的class全部加载进来,而是通过ClassLoad来实现动态加载机制. 是对程序运行效率的一种优化,我这里贴出一个helloworld输出程序的实测输出数据,共400多行,有点长... [Opened C:\Program Files\Java\jre1.8.0_40\lib\rt.jar] [Loaded java.lang.Object from C:\Program Files\Java\jre1.8.0_40\lib\rt.jar] [Lo