Java虚拟机(JVM),JDK,JRE和JVM的区别——通过示例学习Java编程(2)
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)的更多相关文章
- Java基础知识 ——JDK,JRE和JVM
1.开发简单的Java程序过程: 名词解释: JDK:JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行 ...
- java学习之Java中JDK,JRE和JVM之间的关系(转载)
最近要重新抓一下java,大量扫技术文档,保存下来供自己查阅.以下转载自http://www.cnblogs.com/xiaofeixiang/p/4085159.html 初学JAVA很容易被其中的 ...
- Java中JDK,JRE和JVM之间的关系
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...
- Java中JDK,JRE和JVM之间的关系-(转载)
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...
- Java虚拟机(四):JVM类加载机制
1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...
- JVM,JDK,JRE
JVM,JDK,JRE 什么是JVM Java 虚拟机. 这个名词由Java和虚拟机前后两部分组成. 它有和其他虚拟机共性:JVM是通过软件模拟的计算机系统. 它也有自己的特性:JVM使用软件模拟的指 ...
- Java虚拟机(五):JVM调优命令
运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎鼎的VisualVM,IBM的Memory Analyzer ...
- 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 ...
- Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序【转】
Java虚拟机性能管理神器 - VisualVM(5) 监控远程主机上的JAVA应用程序[转] 标签: javajvm监控工具性能优化 2015-03-11 18:37 1394人阅读 评论(0) 收 ...
随机推荐
- Notepad++安装xml插件
环境: win7 64位 Notepad++7.3.3 原生的Notepad++不自带xml文件的插件,所以在显示xml文件时并不分行(如下图所示),对于用户编辑,查看的操作而言,并不友好,所以需要安 ...
- [练习]使用dx.bat、dexdump.exe、javap、Baksmali
PART0 这几个工具的关系可以这样描述: 用例: public class Hello { public int foo(int a , int b ) { return (a+b) * (a-b) ...
- SPOJ:Red John is Back(DP)
Red John has committed another murder. But this time, he doesn't leave a red smiley behind. What he ...
- Gym101161:ACM Tax (主席树)(占位)
题意:给定一个带权树,Q次询问,每次回答某简单路径上的权值中位数. 思路:记录根到节点的主席树,主席树可以找到路径的第K大权值.(记住,这里是可以不用二分的,不要想多了.) 奇数条边直接找中位数,偶数 ...
- [PA 2011] Journeys
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3073 [算法] 考虑线段树优化建图 建立两棵线段树 , 一棵为入树 , 一棵为出树 ...
- android jni下c文件怎么输出logcat
#include <android/log.h> #define LOG_TAG "clog"#define LOGD(...) __android_log_print ...
- cobbler api
try: import xmlrpclib except ImportError as e: import xmlrpc.client SERVER_IP = '192.168.144.11' try ...
- JS搜索商品(跟外卖app店内搜索商品一样) ,keyup函数和click函数调用
HTML: input输入框: <input id="sea" type="text"> JS: //点击搜索商品 $('#mys').click( ...
- debugs
import os def get_nova_credentials_v2(): d = {} d['version'] = '2.0' d['username'] = os.environ['OS_ ...
- 各浏览器userAgent汇总
浏览器 navigator.userAgent 备注 IE6 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) IE7 Mo ...