Java虚拟机(JVM),JDK,JRE和JVM的区别

作者:CHAITANYA SINGH

来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=4

Java是一种高级编程语言。用高级语言编写的程序不能直接在任何机器上运行。首先,它需要被翻译成特定的机器语言,javac编译器做的就是这件事情,它读取Java程序(存有源代码的.java文件)并将其转换成机器代码(称为字节码或.class文件)。

Java虚拟机(JVM)是驻留在真实机器(您的计算机)中的虚拟机,JVM的机器语言是字节代码,这就使编译器的工作更容易了,因为它只须为JVM生成字节代码,而不是为每种类型的机器生成不同的机器代码。JVM虚拟机运行编译器生成的字节代码并输出结果,所以有了JVM才使java语言成为跨平台的语言。

所以,现在我们知道JVM的主要功能是执行编译器生成的字节代码。每个操作系统都有不同的JVM,但是在执行字节代码后它们产生的输出在所有操作系统中都是相同的。这意味着在Windows上生成的字节代码可以在Mac OS上运行,反之亦然。这就是我们将java称为跨平台语言的原因。同样的事情可以在下图中看到:

总结: Java虚拟机(JVM)是在物理机器(您的计算机)上运行并执行Java字节代码的虚拟机。JVM读不懂Java源代码,这就是为什么我们需要使用javac编译器来编译* .java文件以获取包含JVM能读懂的字节代码的* .class文件。JVM使java代码具备了可移植性(一次编写,随处运行)。每个操作系统都有不同的JVM,但是在执行字节代码后它们产生的输出在所有操作系统中都是相同的。

JVM架构

让我们看看JVM是如何工作的:

类加载器(Class Loader):类加载器读取.class文件并将字节代码保存在方法区域中。

方法区域(Method area):JVM中只有一个方法区域在所有类之间共享,这个区域保存了每个.class文件的类级别信息。

堆(Heap):堆是JVM内存中分配给对象用的那部分内存。JVM为每个.class文件创建一个Class对象。

栈(Stack):栈也是JVM内存的一部分,但与堆(Heap)不同,它用于存储临时变量。

PC寄存器(PC Registers):主要用于跟踪已执行的指令以及将要执行的指令。由于指令由线程执行,因此每个线程都有一个单独的PC寄存器。

本地方法堆栈(Native Method stack):本地方法可以访问虚拟机的运行时数据区域。

本地方法接口(Native Method interface):它使java代码能够被本机应用程序调用或调用。本机应用程序是特定于系统的硬件和操作系统而设计和编写的程序。

垃圾收集(Garbage collection):由java代码显式创建的类的实例,在使用完毕后,它会被垃圾收集器自动销毁以进行内存管理。

JVM与JRE和JDK的对比

JRE:JRE是java虚拟机运行的环境。JRE包含Java虚拟机(JVM),类库和其他文件,但不包括编译器和调试器等开发工具。

这意味着您可以在JRE中运行代码,但无法在JRE中开发和编译代码。

JVM:如上所述,JVM通过使用JRE提供的类,库和文件来运行程序。

JDK:JDK是JRE的超集(Superset),它包含JRE与开发工具(如编译器,调试器等)的所有内容。

Java虚拟机(JVM),JDK,JRE和JVM的区别——通过示例学习Java编程(2)的更多相关文章

  1. Java基础知识 ——JDK,JRE和JVM

    1.开发简单的Java程序过程: 名词解释: JDK:JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行 ...

  2. java学习之Java中JDK,JRE和JVM之间的关系(转载)

    最近要重新抓一下java,大量扫技术文档,保存下来供自己查阅.以下转载自http://www.cnblogs.com/xiaofeixiang/p/4085159.html 初学JAVA很容易被其中的 ...

  3. Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  4. Java中JDK,JRE和JVM之间的关系-(转载)

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  5. Java虚拟机(四):JVM类加载机制

    1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  6. JVM,JDK,JRE

    JVM,JDK,JRE 什么是JVM Java 虚拟机. 这个名词由Java和虚拟机前后两部分组成. 它有和其他虚拟机共性:JVM是通过软件模拟的计算机系统. 它也有自己的特性:JVM使用软件模拟的指 ...

  7. Java虚拟机(五):JVM调优命令

    运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎鼎的VisualVM,IBM的Memory Analyzer ...

  8. Difference between JDK, JRE and JVM

    With Java programming language, the three terms i.e. JDK, JRE and JVM will always be there to unders ...

  9. Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序【转】

    Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序[转] 标签: javajvm监控工具性能优化 2015-03-11 18:37 1394人阅读 评论(0) 收 ...

随机推荐

  1. BZOJ-3439:Kpm的MC密码(Trie+DFS序+主席树)

    背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记了密码,只能来解答那些神奇的身份验证问题了... 描述 ...

  2. CodeForces - 840D:(主席树求出现区间出现次数大于某值的最小数)

    Once, Leha found in the left pocket an array consisting of n integers, and in the right pocket q que ...

  3. ubuntu 16.04 apt-get 出现The package 'xxx' needs to be reinstalled, but I can't find an archive for it.

    参考网址:http://www.ihaveapc.com/2011/10/fix-annoying-the-package-needs-to-be-reinstalled-but-i-cant-fin ...

  4. spark运行模式之二:Spark的Standalone模式安装部署

    Spark运行模式 Spark 有很多种模式,最简单就是单机本地模式,还有单机伪分布式模式,复杂的则运行在集群中,目前能很好的运行在 Yarn和 Mesos 中,当然 Spark 还有自带的 Stan ...

  5. redis实例

    <?php Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 本篇文章,主要介绍利用PHP使用Redis ...

  6. const_cast标准转换运算符

    #include <iostream> using namespace std; class A { public: A() { a=; } public: int a; }; void ...

  7. E20180605-hm

    arbitrary adj. 乱; 随意的,任性的,随心所欲的; 主观的,武断的; 霸道的,专制的,专横的,独断独行的; session n. 开会,会议; (法庭的) 开庭; 会期,学期; (进行某 ...

  8. 51nod1640 【最小生成树】

    题意: 在一副图中,搞N-1条边,使得每个点都相连, 有多种可能的情况,所以求一种使得其中n-1条边的最大是所有可能的最小,然后并保证连接的n-1条边的权值总和最大 思路: 一开始没有看清题意,随便写 ...

  9. MySql 长时间读数据发生超时的异常 Mysql Reader Exception TimeOut expired

    mysql connector: .net var r = cmd.ExecuteReader() r.Reader()   // <--长时间不停调用 Timeout expired.  Th ...

  10. bzoj 2406: 矩阵【二分+有源汇上下界可行流】

    最大值最小,所以考虑二分 |Σaij-Σbij|<=mid,所以Σbij的上下界就是(Σaij-mid,Σaij+mid) 考虑建有上下界网络,连接(s,i,Σaik-mid,Σaik+mid) ...