Jdk与Jre与Jvm,Jvm详解

1、Jdk

Jdk(Java development kit): Jdk是Java语言的软件开发工具包,是Java程序开发的核心所在。程序员如果需要学习Java语言的相关编程,都需要搭建好安装好Jdk,Jdk中包含了Java的运行环境(Jre)、Java工具和Java基础的类库。

Jre(Java Runtime Enviroment):Java的运行环境,Jre的内部具有一个Java虚拟机(Jvm)以及Java核心类库和支持文件。但不包含开发工具(Jdk)–编译器、调试器和其它工具。

Jvm(Java Virtual Machine):Java虚拟机,是一种虚构出来的计算机,是通过在实际的计算机上模拟仿真各种计算机功能来实现的,Jvm是主流虚拟机之一。

它们之间的关系大概可以理解为这样:

在这里插入图片描述

大概就是,Jvm是Java虚拟机,Jre在其之上加入了Java核心类库和支持文件,Jdk在Jre之上加入了编译器、调试器和其他工具。普通用户只需要有Jre就可以运行Java程序,程序员则必须安装Jdk来调试Java程序,同时还必须熟悉Jvm的底层原理实现。下面我们来讲讲Jvm。

2、JVM详解

Java文件的执行过程

作为学习Java的程序员,我们大多都知道,Java文件我们只需要关注其功能的实现。具体的数据存放在哪里,内存分配问题等我们都不需要区考虑。而一个Java文件的执行过程大致为:

java–>class–>汇编语言

后缀为.java的文件通过Java编译器Javac(Java complier)编译成Java字节码文件.class文件,.class文件是jvm可以识别的唯一字节码文件,class文件最终被Jvm翻译成计算机能识别的汇编语言。

注意这里我省略了许多步骤,Jvm是只运行在操作系统之上,不和硬件设备直接交互的,如果小伙伴们想要探索可以自行查阅资料。

这里我在网上参考了另外一位博主(小杰要吃蛋)的图片
在这里插入图片描述

这里引入一个面试经典的问题:Java程序运行时,哪些区域是线程私有的?

线程共享数据区:方法区、堆

线程私有数据区:程序计数器、本地方法栈、虚拟机栈

有关各个区域的内容请参考JVM运行时数据区详解

Java的垃圾收集系统

程序在运行过程中,会产生大量的内存垃圾,为了确保程序运行的性能,java虚拟机在程序运行的过程中不断地进行自动的垃圾回收(GC)。

垃圾收集系统是Java的核心,这也是Java优于C/C++的地方,C/C++需要考虑内存的分配和内存的回收,Java则自动帮我们进行了处理,Java有一套自己进行垃圾清理的机制,开发人员无需手工清理

Jvm的垃圾回收针对的是整个Jvm

一套自己进行垃圾清理的机制,开发人员无需手工清理

Jvm的垃圾回收针对的是整个Jvm

更多细致的学习请参考一篇文章掌握整个JVM,JVM超详细解析

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐