有官方解释https://www.java.com/zh_CN/about/

重要概念

JDK和JRE

Java技术体系所包含的内容实际上Java官方有提供给我们一张图,图片来源http://docs.oracle.com/javase/7/docs/

两个常见的重要概念。其实上面的图中已经划分出了JDK和JRE的范围了。我们对这张图做一个归纳,用我们的语言简单地总结一下什么是JDK和JRE:

1、JDK(Java Development Kit),是用于支持Java程序开发的最小环境,基本上Java程序设计语言、Java虚拟机、Java API类库这三部分组成了JDK

2、JRE(Java Runtime Enviroment),是支持Java程序运行的标准环境,Java API类库中的Java SE API自己和Java虚拟机这两部分组成了JRE

OpenJDK

前面有讲过,“Java真正强大的地方是因为拥有全世界最多的技术拥护者和开源社区支持,他们无时无刻都保持着最充沛的体力与思维,一步一步地驱动着Java技术的走向”。其实JDK在一开始并不是开源的,但是随着开源运动的蓬勃发展,2006年Sun公司宣布将对Java开放源代码,开源的Java平台开发主要集中在OpenJDK项目上。2009年4月15日,Sun公司正式发布OpenJDK,JDK 7则是Java开源后发布的第一个版本,任何组织和个人都可以为Java的发展做出贡献。当然OpenJDK和真正的Oracle JDK(因为Sun公司被Oracle公司在2010年收购了嘛,所以就叫做Oracle JDK了)还是有区别的:

OpenJDK中的代码基本上都来自于Oracle JDK,属于Oracle JDK的一个分支,但是其中去除了一些非开源的组件和代码,替换成了开源的组件和代码,主要是加密和图形的部分。因此用OpenJDK代替Oracle JDK可能会有一些的不兼容。

对于OpenJDK感兴趣的,可以在OpenJDK官网http://download.java.net/openjdk/jdk7/下载OpenJDK的源代码。像Java虚拟机HotSpot、Java编译器Javac、JNI等等,源代码都在里面。

JCP和JSR

JCP(Java Community Process)是一套制定Java技术规范的机制,通过制定和审查JSR(Java Specification Requests)推动Java技术规范的发展。一个已经提交的JSR要想成为最终状态,需要经过正式的公开审查,并由JCP委员会投票决定,最终的JSR会提供一个参考实现,它是免费而且公开源代码的。JSR并非只由Oracle管理,任何个人都可以注册并参与审查JSR,对于Java语言发展动态感兴趣的人来说,跟踪JSR的动态发展是一条不错的学习途径。在JCP官网http://www.jcp.org/中可以查看所有的JSR,下面列举几个大家熟悉的JSR:

  1. JSR 14,泛型
  2. JSR 51,NIO
  3. JSR 175,注解
  4. JSR 201,枚举以及自动装箱等
  5. JSR 221,JDBC4.0 API

Java虚拟机

最后,轮到这个大哥登场,也是之后文章的主角。为什么Java可以实现所谓的“一次编写,到处运行”,主要是因为虚拟机的存在。Java虚拟机负责Java程序设计语言的安全特性和平台无关性。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java语言编译器只需要生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。Java虚拟机使得Java摆脱了具体机器的束缚,使跨越不同平台编写程序成为了可能。

要多提一句,我们现在说的Java虚拟机基本上都是JDK自带的虚拟机HotSpot,这款虚拟机也是目前商用虚拟中市场份额最大的一款虚拟机,可以通过在命令行程序中输入“java -version”来查看:

那其实市面上还有很多别的优秀的虚拟机。Sun公司除了有大名鼎鼎的HotSpot外,还有KVM、Squawk VM、Maxine VM,BEA公司有JRockit VM、IBM公司有J9 VM等等。

后记

越学习Java虚拟机,越觉得它有意思,如果工作中越能解决一些复杂的、奇怪的、别人解决不了的问题(为什么你比别人厉害、为什么你比别人拿更高的工资?说白了不就是你能解决别人解决不了的问题、做到别人做不到的事吗?)。又或者,当一个Java项目庞大到一定程度之后,就会根据自己的业务需求,定制自己的虚拟机,比如淘宝网就基于OpenJDK深度定制了Taobao VM,能做到这一点的基础就是对Java虚拟机有深入的理解。作为一个Java开发,如果目标只是把写代码这件事情做好,那么OK,完全不需要去学习、研究Java语言之外的任何东西,每到一个公司,只要简单理解公司项目的整体架构以及理清业务就好了。但是如果目标是成为一名Java技术专家、CTO,相信代码可以改变世界(至少我本人是朝着这个方向努力的),那么学习、研究虚拟机绝对是不可缺少的一课。

转载于:https://www.cnblogs.com/xiaofei12/p/8965636.html

Java 虚拟机导论:什么是 Java虚拟机相关推荐

  1. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  2. java.vm.info_深入理解java虚拟机

    第四章:java虚拟机命令行工具 1:jps命令行进程状况工具      jps [options] [hostid] C:\Users\lenovo>jps -l 13824 sun.tool ...

  3. 【Java 虚拟机原理】Dalvik 虚拟机 ( 简介 | CPU 指令集 | Dalvik 虚拟机内存 )

    文章目录 一.Dalvik 虚拟机简介 二.CPU 指令集 三.Dalvik 虚拟机内存 一.Dalvik 虚拟机简介 Android 5.05.05.0 之前使用的是 Dalvik 虚拟机 , 5. ...

  4. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...

  5. 《深入理解java虚拟机》笔记1——Java内存区域与Java对象

    运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程 ...

  6. 【深入Java虚拟机JVM 03】Java内存模型

    说明:文章所有内容均摘自<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的 ...

  7. 【深入Java虚拟机JVM 01】Java发展与展望概述

    目录 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 展望Java技术的未来 1.4.1 模块化 1.4.2 混合语言 1.4.3 多核并行 1.4.4 进一步丰富语法 1.4 ...

  8. java 虚拟机_浅谈Java虚拟机内存区

    1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...

  9. vilatile 深入理解java虚拟机_深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)...

    本套课程从虚拟机的发展历史,虚拟机的内存结构,对象的分配与回收以及字节码,类加载等多个方面深入地对Java虚拟机进行了剖析.内容详实,语言通俗易懂.理论结合实践,让学习本套视频的朋友可以更快的理解虚拟 ...

最新文章

  1. 什么是GStreamer?
  2. 求n!中含有质因子p的个数
  3. hexo+markdown添加本地图片无法显示
  4. 全闪存存储时代 NVMe到底是什么?
  5. 【Flutter】侧拉导航栏实现 ( Drawer 组件 | PageView 组件 )
  6. obj,lib,dll,exe
  7. DataFrame/Series获取列名以及更改列名(转)
  8. 安川g7变频器说明书_安川机器人故障维修合集
  9. MySQL在windows系统中修改datadir路径后无法启动问题,报错1067
  10. C++实现简单的文本查询
  11. socket基本使用
  12. arraylist线程安全吗_面试官:用过ThreadLocal吗?它保证线程安全的原理是啥?
  13. 流媒体 - UVC 协议
  14. unity模型制作(四):绘制一个凹多边形
  15. Nginx自签名证书的配置
  16. html 标签 简写_HTML缩写标签
  17. 织梦banner图后台添加
  18. 无力吐槽CSDN博客设计
  19. js如何动态获取object类型里的键值
  20. 【ZZULIOJ】1053: 正弦函数

热门文章

  1. 算法:程序设计之并查集
  2. 输出整数的位数、按位输出(两种)以及逆序输出
  3. Oracle 的检查点队列 (checkpoint queue)
  4. [转]解决 cannot restore segment prot after reloc: Permission denied
  5. c语言二元运算符大全,C语言运算符大全
  6. mysql冷备增量备份,MySQL备份与恢复之真实环境使用冷备(2)
  7. 华为HCIA-Transmission H31-311练习题
  8. 【必看】这6个吓人的Linux命令,你用过吗?
  9. 【干货】救火必备:线上故障排查套路大全
  10. 【考证】华为HCIP、HCIE认证考试大纲