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. 非旋treap套线段树

    BZOJ3065. 去年用pascal 块链过了.. 今年来试了试非旋treap大法   注定被块链完爆 代码留这. 第一份 :辣鸡的  垃圾回收做法  跑得极慢 #include <bits/ ...

  2. js 弹出QQ对话框

    首先打开下面链接,开通QQ推广. http://shang.qq.com/v3/index.html 然后在页面代码中写入 <a target="_blank" href=& ...

  3. c++ zlib(qt)压缩与解压缩

    #include <QtCore/QCoreApplication> #include "zlib.h" #include "stdio.h" #i ...

  4. poj2226Muddy Fields——二分图匹配

    题目:http://poj.org/problem?id=2226 把行连通块作为左部点,列连通块作为右部点,行列连通块有相交的格子就连边: 则问题转化为求最小点覆盖,即最大匹配. 代码如下: #in ...

  5. redis sentinel(哨兵)配置解读

    1 port <sentinel-port> :哨兵实例运行所在的端口(默认26379) 2 sentinel announce-ip:哨兵将会在gossip hello消息中使用指定的i ...

  6. html中调用本地exe应用程序

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Android开发--Intent

    一:Intent基础知识 Intent:信使,实现四大组件间的通信. 1:实现页面间的跳转,有两种方式: (1):startActivity()方式: (2) 2:使用Intent传递数据的四种方式: ...

  8. CF-831A

    A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. B - Alyona and Mex

    Description Someone gave Alyona an array containing n positive integers a1, a2, ..., an. In one oper ...

  10. UVa 10755 Garbage Heap (暴力+前缀和)

    题意:有个长方体由A*B*C组成,每个废料都有一个价值,要选一个子长方体,使得价值最大. 析:我们暴力枚举上下左右边界,然后用前缀和来快速得到另一个,然后就能得到长方体,每次维护一个最小值,然后差就是 ...