Java跨平台性
怎么实现跨平台及JVM、JRE、JDK的区别和联系及JVM的详细组成:
首先编写Java源文件.java,通过Javac编译器生成后缀为.class的字节码文件,这文件不和特定的操作系统相关,然后通过JVM解释执行;所以Java也叫解释型语言。
Java虚拟机(JVM)是在物理机器(您的计算机)上运行并执行Java字节代码的。JVM读不懂Java源代码,这就是为什么我们需要使用javac编译器来编译 .java文件以获取JVM能读懂的字节码文件(.class文件)。JVM使java代码具备了可移植性(一次编写,随处运行)。每个操作系统都有不同的JVM,但是在执行字节代码后它们产生的输出在所有操作系统中都是相同的。这就是我们将java称为跨平台语言的原因。
JVM执行程序的过程: I.加载.class文件; II.管理并分配内存 ;III.执行垃圾回收。
从而得出 Java语言是跨平台的,但JVM是不跨平台的。
JVM、JRE、JDK的区别和联系
编译期: 程序员编写的.java源文件通过(javac、java编译器)编译生成.class字节码文件
运行期: JVM加载并运行.class字节码文件
特点: 跨平台,一次编译,到处使用
JVM: Java虚拟机,JVM通过使用JRE提供的类,库和文件来运行程序。作用:加载并运行.class字节码文件
JRE: JRE是java虚拟机运行的环境。JRE包含Java虚拟机(JVM),类库和其他文件,但不包括编译器和调试器等开发工具。
JRE=JVM+系统类库
JDK: Java开发工具包,它包含JRE与开发工具(如编译器,调试器等)的所有内容。
JDK=JRE+系统指令
最小运行环境:JRE
最小开发工具:JDK
让我们看看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代码显式创建的类的实例,在使用完毕后,它会被垃圾收集器自动销毁以进行内存管理。
来源:https://blog.csdn.net/weixin_45366328/article/details/99215715