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是主流虚拟机之一。
它们之间的关系大概可以理解为这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYyfiFG7-1653496733871)(C:\Users\29569\Desktop\Java学习笔记\图片\JDK和JRE和JVM的关系.png)]
大概就是,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超详细解析