上次的博文中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语言的其它内容。

作者:zs15932616453 发表于2014-3-31 1:09:45 原文链接
阅读:1000 评论:19 查看评论

[原]Java修炼 之 基础篇(二)Java语言构成的更多相关文章

  1. [原]Java修炼 之 基础篇(一)Java语言特性

    学习软件开发,首先要选择的就是选择需要采用的编程语言,考虑语言本身的优缺点和实际需求,综合评价之后选择相关的语言进行系统开发.本篇博客开始就从近年来比较流行的Java开始为大家讲起. 背景 1995年 ...

  2. Java面试题-基础篇二(干货)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  3. JVM 内部原理(七)— Java 字节码基础之二

    JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

  4. Java多线程系列--“基础篇”11之 生产消费者问题

    概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...

  5. Java多线程系列--“基础篇”04之 synchronized关键字

    概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...

  6. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式

    概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...

  7. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

    概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...

  8. Java多线程系列--“基础篇”05之 线程等待与唤醒

    概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...

  9. Java多线程系列--“基础篇”06之 线程让步

    概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...

随机推荐

  1. Loadrunner:POP3协议录制收信,使用foxmail录制到的脚本为空

    以下录制方法使得录制到的脚本为空: (1)打开Virtual User Generator,点击“新建Vuser脚本”,在弹出的向导页面,选择“新建单协议脚本”,选择“POP3”协议,并确定 (2)在 ...

  2. 1.3查看Linux内核版本

    1.目前Linux内核主要维护的三个版本:Linux2.4.Linux2.6和Linux3.x,Android使用的是Linux2.6:Linux3.x是最新推出的Linux内核版本: 2.查看Lin ...

  3. .NET中的访问修饰符

    .NET中一共有五种访问修饰符   分别是   public                          公共的,访问权限最高的. private                         ...

  4. 音乐社交APP源码 V1.1

    1.关于音乐曲库,对接的是百度音乐,会自动随搜索链接百度曲库2.便捷聊天,采用xmpp基本架构.3.加入和整理了群聊天.4.分布式聊天,喜欢该专辑直接进入聊天,喜欢该音乐的进入聊天.5.采用兴趣社交和 ...

  5. css的#和.的区别

    css的#和.的区别, css的#和.的区别 2009-03-04 14:43fyws  分类:Html/Css | 浏览 1911 次 css的#和.的区别如:#home #h3 { padding ...

  6. 各种数据处理方案(SQL,NoSQL,其他)的应用场景

    综合stackoverflow和linkin上的相关讨论,还有我个人的工作经验:   Redis应用场景(大部分场景下memcache可以用Redis代替,所以不单独讨论) 线上业务,读写的高性能要求 ...

  7. JS中cookie的基本使用

    cookie是本身是HTML中ducument中的一个属性,可以用来保存一些简单的数据信息,比如用户名.密码等,提高一些网站的用户体验度.下面就来简单的说说cookie,它有下面几个特性: 1.有过期 ...

  8. Fragment的创建以及与activity的参数传递

    点击下面不同的TextView变化不同的Fragment avtivity与Fragment之间传递消息不能使用构造器传递,用bunder传递 首先写一个含有FrameLayout(这个布局最佳),里 ...

  9. C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)

    1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...

  10. STM32F0xx_EXIT中断配置详细过程

    Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...