Java的运行机制概括

时间:2022-04-24 23:35:36

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

你所了解的Java机制

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的运行机制概括

总结

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

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

  1. java虚拟机运行机制

    转自java虚拟机运行机制 首先简单阐述下解释型语言和编译型语言的联系与区别. 编译型语言是通过编译器将程序编译成目标机器所能识别的机器码,而解释型语言不需要编译过程.由该语言的解释器读取脚本,按照语 ...

  2. Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解

    俗话说:“十五的月亮十六圆”.那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的.记得马云曾说:今天很残酷,明天更残酷,后天 ...

  3. java的运行机制(基础)

    1:高级语言的运行机制: 我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写 ...

  4. 第一个java程序以及java的运行机制

    课堂要点: 编写第一个java程序以及理解java的运行机制. 1.基本命令介绍: javac命令: 编译java文件得到.class字节码文件 -encoding 参数:指定编译的编码 java命令 ...

  5. java的运行机制及初步相关配置(jdk)

    java的运行机制: 计算机高级语言的类型主要有编译型和解释型两种,而java语言是两种类型的结合. java首先利用文本编译器编写java源程序,源文件的后缀名为.java:再利用编译器(javac ...

  6. Java多线程运行机制的基本原理

    Java多线程运行机制的基本原理 进程和线程的区别 进程 进程是一个程序执行的实例,比如说我们打开10个IE浏览器窗口,那么就有10个进程开启.一个进程可以同时被运行若干次,进程是CPU进行资源分配和 ...

  7. Java程序运行机制

    Java程序运行机制 编译型(compile) 它有一个负责翻译的程序(编译器),将我们写的 Java 源代码转为计算机可执行的代码 举个例子:把一本中文书翻译成英文书 应用:操作系统.C.C++ 解 ...

  8. 零基础怎么学Java?Java的运行机制是什么?Java入门基础!

    Java语言是当前流行的一种程序设计语言,因其安全性.平台无关性.性能优异等特点,受到广大编程爱好者的喜爱. 想学习Java语言的同学对于Java的运行机制是必须要了解的!! 计算机高级语言的类型主要 ...

  9. Java的运行机制

    Java程序运行机制 编译型(操作系统 c/c++) 解释型(网页 不追求速度) 程序运行机制

随机推荐

  1. PHP常用函数整理

    推荐网址:http://php.net/manual/zh/http://www.w3cschool.cc/php/php-ref-array.html 错误报告: error_reporting(E ...

  2. EM最大期望化算法

    最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计. 在统计计算中,最 ...

  3. <Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

    转自这里   出 错原因:设置app的状态栏样式的使用使用了旧的方式,在info.plist里面设置了View controller- based status bar appearance为NO,默 ...

  4. Java按正则提取字符串

    在Java开发中,有时会遇到一些比较别扭的规则从字符串中提取子字符串,规则无疑是写正则表达式来表达了,那按照正则来提取子字符串就会用到java.util.regex包. java.util.regex ...

  5. MySQL添加外键时报错 ERROR 1215 (HY000): Cannot add foreign key constraint

    1.数据类型      2.数据表的引擎 数据表 mysql> show tables; +------------------+ | Tables_in_market | +--------- ...

  6. Demo_玩家移动(主要注意动画的设置)

    using UnityEngine; using System.Collections; public class NewPlayerMove : MonoBehaviour { private fl ...

  7. [转] C++指针加整数、两个指针相减的问题

    http://blog.csdn.net/onlyou930/article/details/6725051 说来惭愧,写C++有一段时间了.这个问题从来没有认真考虑过,此次标记于此: 考虑如下问题: ...

  8. HDU1285——确定比赛名次

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  9. 基于&period;net的微服务架构的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  10. 独立安装CentOS7&period;4全记录

    大学用了四年的笔记本快用废了,闲来想着用来装个centos,当个服务器也行,于是装上了CentOS6.9系统,由于最小化安装,而且在安装时没有安装wpa_supplicant包,笔记本本身网卡接口又坏 ...