[原]Java修炼 之 基础篇(二)Java语言构成
上次的博文中Java修炼
之 基础篇(一)Java语言特性我们介绍了一下Java语言的几个特性,今天我们介绍一下Java语言的构成。
所谓的Java构成,主要是指Java运行环境的组成,从外围到核心依次是Java开发工具包JDK(Java Develop Tookit)、Java运行时环境JRE(Java Runtime Environment)、Java虚拟机JVM(Java Vitual Machine)。
JDK
JDK主要提供了一些用Java语言开发的组件(javac.exe、jar.exe、javadoc.exe等等),另外JDK中还包含完整的JRE。如果安装好JDK之后,会发现JDK中包含了两套JRE,一套位于Jdk\jre目录下,另一套位于Java目录下。
相对来讲,第二套少了Server端的Java虚拟机和其它几个文件,除此之外两者没有任何区别,但我们在安装JDK的时候还是需要安装第二套JRE,这是因为两套JRE的分工不同,对于Java程序员来讲,开发Java程序的时候,由于会优先寻找"java、javac等"所在目录父目录下的JRE,所以会执行第一套JRE,但当执行一般外部程序的时候,则会执行的第二套JRE。
JRE
JRE是Java运行的基础,它主要提供了Java运行的各种API,一个Java程序想要运行,必须要安装JRE才可以。这是因为在解释.class的时候,JVM需要调用解释.class所需要的JRE下的lib类库。
JVM
JVM是一个虚构的计算机,它是通过在实际计算机上模拟计算机的各种功能来实现的。JVM本身有一套相对完整的硬件计算机架构,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储区。正因为有JVM实现,才会使得Java程序可以在任何操作系统中运行,实现其平台无关性。
在JVM中有个成为Java即时编译器JIT(Just-in-time compiler)的重要组成部分,它能够将一个把Java的字节码转换成处理器指令的程序,同时在此过程中用于加快Java程序的执行时间。
三者之间的联系
了解了JDK、JRE、JVM三者的概念和组成之后,我们可以清晰的了解到Java语言从开始编写、编译和执行的整个过程中三者如何协作和完成的。
首先,编写的源代码会交给JDK,通过JDK中的编译器,将其编译成字节码,也就是通常的.class文件。当一个.class文件需要运行时,则会通过JVM中JIT将其转换成为与平台无关的机器指令。而这些机器指令执行的执行则是在JRE中完成的。整个过程如下图所示:
本篇博客主要给大家介绍了一下Java语言整个运行过程中需要的组成部分和其作用,了解这些的目的在于思考Java这门语言的架构和设计以及为什么Java会是这样的一种架和设计,这样在我们开发和设计的时候才能够充分的借鉴。初学Java的人员,这部分不要深究,简单了解就好,在以后的学习中相信会再次学习的。
下一篇,我们接着继续讲解Java语言的其它内容。
[原]Java修炼 之 基础篇(二)Java语言构成的更多相关文章
- [原]Java修炼 之 基础篇(一)Java语言特性
学习软件开发,首先要选择的就是选择需要采用的编程语言,考虑语言本身的优缺点和实际需求,综合评价之后选择相关的语言进行系统开发.本篇博客开始就从近年来比较流行的Java开始为大家讲起. 背景 1995年 ...
- Java面试题-基础篇二(干货)
11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...
- JVM 内部原理(七)— Java 字节码基础之二
JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...
- Java多线程系列--“基础篇”11之 生产消费者问题
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- Java多线程系列--“基础篇”06之 线程让步
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...
随机推荐
- Qt事件处理机制
研一的时候开始使用Qt,感觉用Qt开发图形界面比MFC的一套框架来方便的多.后来由于项目的需要,也没有再接触Qt了.现在要重新拾起来,于是要从基础学起. Now,开始学习Qt事件处理机制. 先给出原文 ...
- C# 最简单的递归
public void AddTree(int ParentID, TreeNode pNode) { TreeNode tn1 = new TreeNode(); DataView dvTree = ...
- 安装node_modules文件遇到的问题:更改代理
npm 1080 1081
- Linux之通配符与转义字符
通配符: *:代表任意字符,可以为空字符 ?:代表一个字符,不可以为空字符 转义字符: \
- Xshell常用命令备忘
(1)命令ls——列出文件ls 显示当前目录文件ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的隐藏”文件ls a* 列出当前目录下以字母a开头的所有文件ls -l *.doc 给出 ...
- Solaris桌面CDE
/usr/dt/bin:应用程序/usr/dt/lib:运行时共享库/usr/dt/config:默认系统配置文件/usr/dt/man:手册页/usr/dt/app-defaults:默认应用程序资 ...
- 手机连接wifi自动弹窗的原理及其实现方案
一.手机连上wifi后会自动弹窗的原理 生活中,有很多需要认证的路由器,手机连接wifi热点后会自动弹出一个网页,让用户输入账号和密码,比如星巴克,肯地基,麦当劳,甚至是火车站和机场的候车室.其实这是 ...
- .NET Web开发总结(四)
6.1 IIS配置站点 · IIS ,英文全称Internet Information Services, 是Windows服务器操作系统自带的*服务器软件* · 通过IIS ...
- JS数组(Array)处理函数总结
1.concat() 连接两个或更多的数组该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.例如: <script type="text/javascript"&g ...
- 学习实践:使用模式,原则实现一个C++自动化测试程序
个人编程中比较喜欢重构,重构能够提高自己的代码质量,使代码阅读起来也更清晰.但是重构有一个问题,就是如何保证重构后带代码实现的功能与重构前的一致,如果每次重构完成后,对此不闻不问,则会有极大的风险,如 ...