上次的博文中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. seafile

    ./setup-seafile-mysql.shChecking python on this machine ...  Checking python module: setuptools ... ...

  2. c++ builder TreeView控件节点遍历

    void __fastcall TForm1::GetRootNodes(TTreeView *DestTreeView)//得到所有根节点 { TTreeNode *vNode = NULL; vN ...

  3. Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会

    文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...

  4. 定时器Timer

    定时器类:Timer 构造函数:Timer(TimerCallback callback, object state, uint dueTime, uint period) callback:中断处理 ...

  5. Android中SearchView修改字体颜色

    首先获取searchView控件,比如在actionbar上获取: SearchView searchView = (SearchView) menu.findItem(R.id.action_sea ...

  6. Lenovo Setup(安装程序)

    按住F1,进入“Lenovo Setup”. 一.Main(条目处的设置不可更改) UEFI BIOS Version H1ET69WW(1.12) UEFI BIOS Date(Year-Month ...

  7. DBLINK 创建与小结

    1.DBLINK 的作用 当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数 ...

  8. jQuery实现跨域访问

    示例: $.ajax({ url: url, crossDomain: true, async: false,dataType:"jsonp" }); 说明:$.ajax()有很多 ...

  9. C(++)基于websocket实时通信的实现—GoEasy

    c(++) websocket实时消息推送 在这里我记录一下之前如何实现服务器端与客户端实时通信: 实现步骤如下: 1.        获取GoEasy appkey. 在goeasy官网上注册一个账 ...

  10. php中intval()函数

    格式:int intval(mixed $var [, int $base]); 1.intval()的返回值是整型,1或者0.可作用于数组或者对象(对象报错信息:Notice: Object of ...