这次随笔主要记录一下我对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. mysql跨节点join——federated引擎

    一. 什么是federated引擎 mysql中的federated类似于oracle中的dblink. federated是一个专门针对远程数据库的实现,一般情况下在本地数据库中建表会在数据库目录中 ...

  2. ltib安装过程中遇到好多问题,从网上转来的好多份总结

    最近调试MPC5125的板子,第一步LTIB都装不过去,挫败感十足. LTIB的安装镜像来自于freescale的ltib-mpc5121ads-200906,是用于Ubuntu 10版本之前的,现在 ...

  3. xargs -i 和-I 的区别【转】

    xargs与find经常结合来进行文件操作,平时删日志的时候只是习惯的去删除,比如  # find . -type f -name "*.log" | xargs rm -rf * ...

  4. juery下拉刷新,div加载更多元素并添加点击事件(二)

    buffer.append("<div class='col-xs-3 "+companyId+"' style='padding-left: 10px; padd ...

  5. 安装完ODTwithODAC112012,出现ORA-12560:TNS:协议适配器错误

    参考:http://blog.csdn.net/tan_yixiu/article/details/6762357 操作系统:windows2008 Enterprise 64位 开发工具:VS201 ...

  6. UVALive 5760 Alice and Bob

    题意是黑板上有n个数\(S_i\).每次操作可以把其中一个数减1或者将两个数合并为一个数.一个数变为0时,则不能再对其操作. 思路是发现最大的可操作次数为\( \sum S_i\)+(n - 1).\ ...

  7. 6.Python3标准库--数学运算

    ''' 作为一种通用的变成语言,Python经常用来解决数学问题.它包含一些用于管理整数和浮点数的内置类型,这很适合完成一般应用中可能出现的基本数学运算. 而标准库中包含一些用于满足更高级需求的模块. ...

  8. day01作业

    Java技术按照用途不同分为三大版本,分别是JavaSE.JavaEE和JavaMeJava虚拟机就是一个虚拟的用于执行字节码文件的计算机.它是Java最核心的技术,是Java跨平台的基础.DOS命令 ...

  9. python基础(6)---set、collections介绍

    1.set(集合) set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key. 集合和我们数学中集合的概念是一样的,也有交集.并集.差集. ...

  10. csu 1114平方根大搜索(JAVA大小数+二分)

    1114: 平方根大搜索 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 182  Solved: 96[Submit][Status][Web Boar ...