这次随笔主要记录一下我对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的运行机制也比本文所说的复杂的多,但也没有那么难,只要持之以恒的学习,终有一天你也会成为一名优秀的开发者。

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. 项目记录 -- config2html 理解

    html 代码: <table width=1280 border=0 cellspacing=1 cellpadding=1> <tr id=tblhdr> <td&g ...

  2. 【Learn】CSS定义

    CSS基础语法 本文用于介绍CSS相关的知识,用于记录自己的学习笔记.由于我已经熟悉了部分的HTML,所以相关的概念也不在这里进行描述了,直接写自己的一些心得感悟. 1.CSS规则 CSS是由两个主要 ...

  3. Spring Boot 在接收上传文件时,文件过大异常处理问题

    Spring Boot 在接收上传文件时,文件过大时,或者请求过大,spring内部处理都会抛出异常,并且捕获不到. 虽然可以通过调节配置,增大 请求的限制值. 但是还是不太方便. 之所以捕获不到异常 ...

  4. scala学习笔记4--scala的函数一

    默认值: def sayMyName(name : String = "Jack"){ println(name) } 可变参数: def sumMoreParameters(el ...

  5. CSU 1424 Qz’s Maximum All One Square

    原题链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1424 逐渐找到做这种题的感觉了. 二分法.g[i][j]存储坐标(i, j)的值,s[i ...

  6. STM32 磁场传感器HMC5883

    一.IIC协议 默认(出厂) HMC5883LL 7 位从机地址为0x3C 的写入操作,或0x3D 的读出操作. 要改变测量模式到连续测量模式,在通电时间后传送三个字节:0x3C 0x02 0x00 ...

  7. 【hdoj_1133】Buy the Ticket(卡特兰数+大数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1133 题目的意思是,m个人只有50元钱,n个人只有100元整钱,票价50元/人.现在售票厅没钱,只有50元 ...

  8. 快速开发window服务器程序

    import service; service.startDispatchThread( 服务名 = function(serviceName,argv){ import service; var s ...

  9. WERTYU(UVa10082)

    C++ 11 代码如下: #include<iostream> using namespace std; const char s[] = { "`1234567890-=QWE ...

  10. 【PAT】1012. 数字分类 (20)

    1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算 ...