什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

回答:

Java虚拟机就是一个可以执行Java字节码的虚拟机进程。Java源文件通过javac编译器编译生成能被Java虚拟机执行的字节码文件。

Java被设计成允许应用程序可以运行在任意平台,而不需要程序员为每一个平台单独重写或者重新编译。而所谓跨平台就是在不同的平台上安装了不同的JVM,而在不同的平台上.class文件都是一样的,而.class文件再由对应平台的JVM解释成对应平台的机器码执行。

解析:

Java的跨平台不是java源程序的跨平台 ,如果是这样,那么所以语言都是跨平台的, java源程序先经过javac编译器编译成二进制的.class字节码文件(java的跨平台指的就是.class字节码文件的跨平台,.class字节码文件是与平台无关的),.class文件再运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行,所以java所谓的跨平台就是在不同平台上安装了不同的jvm,而在不同平台上生成的.class文件都是一样的,而.class文件再由对应平台的jvm解释成对应平台的机器码执行。

  最后解释下机器码和字节码的区别:

  一、机器码,完全依附硬件而存在,并且不同硬件由于内嵌指令集不同,即使相同的0 1代码 意思也可能是不同的~换句话说,根本不存在跨平台性~比如~不同型号的CPU,你给他个指令10001101,他们可能会解析为不同的结果。

  二,我们知道JAVA是跨平台的,为什么呢?因为他有一个jvm,不论哪种硬件,只要你装有jvm,那么他就认识这个JAVA字节码。至于底层的机器码,咱不用管,有jvm搞定,他会把字节码再翻译成所在机器认识的机器码。

原文地址:https://www.cnblogs.com/Freak-Lew/p/9189086.html

时间: 2024-11-06 03:44:52

什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?的相关文章

JAVA虚拟机:JAVA体系结构

JAVA体系结构:JAVA设计语言,JAVA Class文件,JAVA API,JAVA虚拟机. 一.java虚拟机: 1.java虚拟机的主要任务是装载class我呢间并且执行其中的字节码.java虚拟机包含一个类装载器,他可以从程序和API中装载class文件. JAVA API中只有程序执行时那些需要的类才能被装载.字节码由执行引擎来执行. Java虚拟机:1.一种简单的执行引擎,是一次性解释字节码.2.执行引擎很快,消耗内存,在这种情况下,第一次被执行的字节码会被翻译成本地机器代码, 编

深入理解 Java 虚拟机——走近 Java

1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统.移动终端 .企业服务器 .大型机等各种场合.特点:Java 能获得如此广泛的认可,除了它拥有一门 结构严谨.面向对象 的编程语言之外,还有须有不可忽视的有点,主要有如下几点.它摆脱了硬件平台的束缚,实现了 一次编写,到处运行 的越界问题.它实现了 热点代码检测 和 运行时编译及优化 ,这使得 J

《深入理解Java虚拟机》第一部分(Java技术体系,Java虚拟机,Java技术趋势)

第一部分 走进Java 1.Java技术体系 Sun官方定义的Java技术体系包括一下几个组成部分: Java程序设语言 各种硬件平台上的Java虚拟机 Class文件格式 Java API类库 第三方Java类库 JDK是用于支持Java程序开发的最小环境,Java程序设计语言.Java虚拟机.JavaAPI类库统称为JDKJRE是支持Java程序运行的标准环境,JavaAPI类库中的JavaSEAPI子集和Java虚拟机统称为JRE 按照Java技术关注的重点业务领域来分,Java技术体系可

【java虚拟机】java内存区域与内存溢出异常

本文参考自<深入理解Java虚拟机>一书.主要总结一下java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题. 1. 运行时数据区域 java虚拟机在执行java程序的过程中会把它说管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.具体如下图所示: 结合这张图,下面逐个来分析一下每个数据区域的特点. 1.1 程序计数器(Program Counter

【java虚拟机】java虚拟机的类加载机制

这篇博文主要来总结一下java虚拟机加载一个类的过程,部分参考自<深入理解Java虚拟机>.为了避免枯燥的解说,为了让读者在读完本文后能彻底理解类加载的过程,首先来看一段java代码,我们从一个例子入手: //ClassLoaderProcess.java文件 class Singleton { private static Singleton singleton = new Singleton(); public static int count_1; public static int c

Java虚拟机学习-Java内存区域(一)

Java虚拟机内存划分为以下几个区域: 1.方法区:方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息.常量.静态变量.即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它有一个别名叫做Non-Heap(非堆),目的是与Java堆分开来. 对于习惯在HotSpot虚拟机上开发.部署的程序开发者来说,很多人更愿意把方法区称为"永久代",本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分带手机扩展至方法区,或者说使用

Java虚拟机(1)--Java内存区域

运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户现场的启动和结束而建立和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图 程序计数器 1. 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码和行号指示器. 2. 字节码解释器工作时就是通过改变这个计

Java虚拟机之Java内存区域

Java虚拟机运行时数据区域 ⑴背景:对于c/c++来说程序员来说,需要经常去关心内存运行情况,但对于Java程序员,只需要在必要时关心内存运行情况,这是因为在Java虚拟机自动内存管理机制的帮助下,不再Java程序员需要为每一个新生成对象去释放资源,这些事情都将交由Java虚拟机去做,但为什么我们还需要学习Java虚拟机呢?这是因为Java程序员吧内存控制权交给Java虚拟机之后一旦出现了内存泄漏和溢出,不了解Java虚拟机的内存运行,排查将会非常困难. Java虚拟机运行时数据区 Java虚

java虚拟机:Java内存区域及对象

说到Java内存区域,可能很多人第一反应是"堆栈".首先堆栈不是一个概念,而是两个概念,堆和栈是两块不同的内存区域,简单理解的话,堆是用来存放对象而栈是用来执行程序的. 图中绿色部分就是所有线程之间共享的内存区域,而白色部分则是线程运行时独有的数据区域,从这个分类角度来看一下这几个数据区. 1.线程独有的内存区域 (1)PROGRAM COUNTER REGISTER,程序计数器 这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需