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的运行机制也比本文所说的复杂的多,但也没有那么难,只要持之以恒的学习,终有一天你也会成为一名优秀的开发者。
Java的运行机制概括的更多相关文章
- java虚拟机运行机制
转自java虚拟机运行机制 首先简单阐述下解释型语言和编译型语言的联系与区别. 编译型语言是通过编译器将程序编译成目标机器所能识别的机器码,而解释型语言不需要编译过程.由该语言的解释器读取脚本,按照语 ...
- Java学习系列(一)Java的运行机制、JDK的安装配置及常用命令详解
俗话说:“十五的月亮十六圆”.那学习是不是也是如此呢?如果把月亮看成是我们的愿望,那十五便是我们所处的“高原期”,坚持迈过这个坎,我相信你的愿望终究会现实的.记得马云曾说:今天很残酷,明天更残酷,后天 ...
- java的运行机制(基础)
1:高级语言的运行机制: 我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写 ...
- 第一个java程序以及java的运行机制
课堂要点: 编写第一个java程序以及理解java的运行机制. 1.基本命令介绍: javac命令: 编译java文件得到.class字节码文件 -encoding 参数:指定编译的编码 java命令 ...
- java的运行机制及初步相关配置(jdk)
java的运行机制: 计算机高级语言的类型主要有编译型和解释型两种,而java语言是两种类型的结合. java首先利用文本编译器编写java源程序,源文件的后缀名为.java:再利用编译器(javac ...
- Java多线程运行机制的基本原理
Java多线程运行机制的基本原理 进程和线程的区别 进程 进程是一个程序执行的实例,比如说我们打开10个IE浏览器窗口,那么就有10个进程开启.一个进程可以同时被运行若干次,进程是CPU进行资源分配和 ...
- Java程序运行机制
Java程序运行机制 编译型(compile) 它有一个负责翻译的程序(编译器),将我们写的 Java 源代码转为计算机可执行的代码 举个例子:把一本中文书翻译成英文书 应用:操作系统.C.C++ 解 ...
- 零基础怎么学Java?Java的运行机制是什么?Java入门基础!
Java语言是当前流行的一种程序设计语言,因其安全性.平台无关性.性能优异等特点,受到广大编程爱好者的喜爱. 想学习Java语言的同学对于Java的运行机制是必须要了解的!! 计算机高级语言的类型主要 ...
- Java的运行机制
Java程序运行机制 编译型(操作系统 c/c++) 解释型(网页 不追求速度) 程序运行机制
随机推荐
- 2017ACM暑期多校联合训练 - Team 4 1004 HDU 6070 Dirt Ratio (线段树)
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...
- HDU 1081 To The Max (dp)
题目链接 Problem Description Given a two-dimensional array of positive and negative integers, a sub-rect ...
- 服务器端包含 SSI简介
服务器端包含 SSI,是英文 Server Side Includes的简写.SSI是一种可以指挥服务器动态声称网页内容的HTML指令. 通常SSI可以用来确保网页中的一些通用内容,比如版权信息.联系 ...
- N-gram语言模型与马尔科夫假设关系(转)
1.从独立性假设到联合概率链朴素贝叶斯中使用的独立性假设为 P(x1,x2,x3,...,xn)=P(x1)P(x2)P(x3)...P(xn) 去掉独立性假设,有下面这个恒等式,即联合概率链规则 P ...
- perl6正则 4: before / after 代码断言: <?{}> / <!{}>
<?before> <? befor XXX> 某字符在 xxx 之前 <?after > <?after XXX> 某字符之后有XXX 对应的取反分别 ...
- perl6检测网站CMS脚本(测试代码)
代码如下: use HTTP::UserAgent; use JSON::Tiny; my $check-url = 'www.baidu.com'; #say @*ARGS[0]; #检测命令行参数 ...
- [005] unique_sub_string
[Description] Given a string, find the largest unique substring. e.g. str[] = "asdfghjkkjhgf&qu ...
- ansible 下lineinfile详细使用 【转】
转自 ansible 下lineinfile详细使用 - 散人 - 51CTO技术博客http://zouqingyun.blog.51cto.com/782246/1882367 一.简述 这几天在 ...
- 19.Remove Nth Node From End of List---双指针
题目链接 题目大意:删除单链表中倒数第n个节点.例子如下: 法一:双指针,fast指针先走n步,然后slow指针与fast一起走,记录slow前一个节点,当fast走到链表结尾,slow所指向的指针就 ...
- Deep Learning基础--各个损失函数的总结与比较
损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好.损失函数是经验 ...