上次的博文中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语言构成相关推荐

  1. Java面试题-基础篇二

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

  2. Java面试题——基础篇二

    ✅作者简介:热爱国学的后端开发者,修心和技术同步精进.

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

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

  4. (原创) 脚踏实地学Java之:基础篇

    (原创)  脚踏实地学Java之:基础篇  最近与几个朋友闲聊技术,当谈起他们各自用JAVA做项目时所用到的技术时,夸夸其谈,不知所云,犹如布什总统竞选前的演讲一般精彩,听的我是云里雾里,一头雾水!但 ...

  5. Java面试题基础篇(一)

    Java面试题基础篇(一) Java面试题基础篇(一) 1.jre和jdk有什么区别? 2.==与equals的区别? 3.接口和抽象类的共同点和不同点? 4.lamda表达式的优缺点? 5.Stri ...

  6. 【Java练习题汇总】《第一行代码JAVA》面向对象基础篇,汇总Java练习题——面向对象:特性、类与对象、数组、String、内部类... ~

    Java练习题 · 面向对象基础篇 1️⃣ 面向对象基础篇 1️⃣ 面向对象基础篇 一.填空题 面向对象的三大特征:_______ ._______ ._______. 类由_______和_____ ...

  7. java单线程循环调度_Java基础篇之Java线程模型

    原标题:Java基础篇之Java线程模型 Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程.实际上,Java使用线程来使整个环境异步.这有利于通过防止CPU循环的浪费来减少无效部分. ...

  8. java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作

    写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接. 前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stre ...

  9. 一起学JAVA之【基础篇】4种默认线程池介绍

    一起学JAVA之[基础篇]4种默认线程池介绍 默认线程池创建方式 java.util.concurrent 提供了一个创建线程池的工具类Executors,里面有四种常用的线程池创建方法 public ...

最新文章

  1. wamp环境下安装imagick扩展
  2. poj3050【dfs】
  3. 三十、Pyspider爬虫框架总结,爬取Scrapy文档
  4. dart系列之:dart类中的泛型
  5. springcloud流程图
  6. Linux 下 -bash: mysql: command not found解决办法
  7. 微纪实 | 人工智能产业落地最真实的样子
  8. Android--SharedPreferences数据存储方案
  9. 使用ConcurrentDictionary实现轻量缓存
  10. [转载]Codejock Xtreme ToolkitPro MFC 使用
  11. aix中c语言生成pdf文档,利用PDFLib生成PDF文档
  12. 学生管理系统数据库设计
  13. 一套键鼠同时控制三台电脑?罗技无线键鼠为办公效率加速
  14. qq空间留言板删除 php,怎么批量删除QQ空间的说说
  15. 语音情感识别中的音频检测算法学习
  16. 两个必须更新浏览器的理由,危险就在你身边
  17. 【数据库基础】02_数据库基础练习
  18. 企业邮箱登录入口有哪些?企业邮箱如何快速登录?
  19. 自己写的C盘清理工具 Ver1.0.0
  20. 百度推广关键词如何出价

热门文章

  1. 红黑树 原理和算法详细介绍(Java)
  2. Warmup Learning
  3. 支持向量机 一 :线性支持向量机介绍
  4. 以太坊源码分析之 P2P网络(五、p2p连接控制与消息处理(中))
  5. Python中的split()函数的详解
  6. 点我一下,你将获得排查性能问题的超能力~
  7. kali linux的详细安装
  8. Nonebot QQ机器人插件五:随机网易云音乐
  9. App/QoE-Based Congestion control
  10. 玩转内网穿透(1):内网穿透是什么?有什么用