深入Java虚拟机之平台无关性

平台无关性:

Java体系结构对平台无关性的支持:

①  Java平台

Java平台扮演一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色,Java程序被编译成可运行于Java虚拟机中的二进制程序,并且假定Java API的class文件在运行时都是可用的,接着虚拟机运行程序,那些API则给予程序访问底层计算机资源的能力。无论Java程序被部署到何处,它只需要与Java平台交互,而不需要担心底层的硬件和操作系统。因此,他就能够运行于任何拥有Java平台的计算机。

②  Java语言

Java语言的基本数据类型的值域和行为都是由语言自己定义的,在像C或者C++这样的语言中,基本整数类型int的值域是由它的占位宽度决定的,而它的占位宽度则由目标平台决定,一般来说,C或者C++中int的占位宽度是由编译器根据目标平台的字长来决定,这就意味着针对不同平台的变异的同一个C++程序在运行时可能会有不同的行为,这仅仅是因为基本数据类型在不同的平台上的值域不同。而java中的int都是32位二进制补码表示的有符号整数,而float则总是遵循浮点标准的32位浮点数。这一点在Java虚拟机内部以及class文件中都是一致的,通过确保基本将数据类型在所有平台上的一致性,java语言本身为Java程序的平台无关性提供强有力的支持。

③  Java class文件

Class文件定义了一个特定于Java虚拟机的二进制格式,Java class可以在任何平台上创建,也可以被任何平台的Java虚拟机装入并运行。它的格式包括多字节值得高位存放约定,都有严格的定义,并且都是Java虚拟机所在平台无关的。

④  可伸缩性

Java平台可以在各种各样不同类型的(从嵌入式设备到大型主机)计算机上实现。每一个平台提供的API子集都是面向一个特定的目标领域。最终Sun改变过的API定义方式得到了三个基础API集合,他们表现Java平台不同的伸缩性:

企业版(J2EE)

标准版(J2SE)

微型版(J2ME)

当编写一个平台独立的Java程序时,必须遵守的一条最重要的原则是:不要直接或者间接调用不属于Java API的本地方法,调用Java API意外的本地方法将使程序平台相关。

平台无关的七个步骤:

为了保证程序的最佳可移植性而可采取的途径:

①  选择程序要运行的主机和设备的集合(你的“目标宿主机”)

②  在目标宿主机中选择自认为足够好的Java平台版本,在该版本Java平台上编写、运行程序。

③  对于每个目标宿主机,选择一些程序将要运行的Java平台实现(你的“目标运行时环境”)

④  编写程序,使它只通过Java API的标准运行库来访问计算机(不要调用本地方法,或开发商专有的那些调用本地方法的库)

⑤  编写程序,使它不依赖垃圾收集器及时终结的正确性,也不依赖线程的优先级。

⑥  努力设计一个用户界面,使它在你所有的目标宿主机上都能正常工作。

⑦  在所有的目标运行时环境和所有的目标宿主机上测试程序

时间: 2024-10-25 04:41:17

深入Java虚拟机之平台无关性的相关文章

Java-与平台无关性

Java与平台无关性:本文取自GitHub 相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因.那么,到底什么是平台无关性?Java又是如何实现平台无关性的呢?本文就来简单介绍一下. 什么是平台无关性 平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行(Write Once ,Run Anywhere). 也就是说,用Java创建的可执行二进制程序,能

Java的平台无关性

转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html 为什么要平台无关? 废话!当然是方便了,你随手写一个Hello,world!,地球上所有的设备都能显示出来,那多牛B!写hello,world! 你可能觉得没有用,那要是写一句“今年过节不收礼...”,钱是不是就开始掉下来了? Java体系结构对平台(操作系统)无关的支持 这部分是本章中我最觉得有用

深入理解Java虚拟机(一) 理解平台无关性

Write Once Run Anywhere,一次编写多处运行 一.Java的运行机制 如下图所示,Java上层应用程序对平台不透明,采用通用的java编译器将java源程序编译成为与平台无关的字节码文件(class文件),而在运行时由java虚拟机(JVM)对字节码文件解释执行,即Java字节码具有平台无关性,在Java生态体系中的语言,例如Android.Scala等,只要能按照Java的规则编译字节码文件,就能被识别来运行.而多处运行的前提是需要有不同版本的java虚拟机,不同系统平台的

JVM(二),Java怎样实现一次编译到处运行(平台无关性)

二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字节码的时候,把字节码转换成具体平台上的机器指令. 2.为什么JVM不直接将源码进行编译成机器码去执行 (1)准备工作太过繁琐 JVM每次进行编译的时候都会对源代码进行各种检查,纠错 (2)兼容性 JVM不仅仅可以给java语言编译成的class文件进行解释,还可以对任何语言,只要是解

Java 平台无关性的基石

Java 在刚刚诞生之初就提出过一个非常著名的口号:"一次编写,到处运行", 这句话充分表达了软件开发人员对冲破平台界限的渴望 在竞争激烈的 IT 领域,各种不同的硬件体系结构和不同的操作系统肯定会长期并存发展. "平台无关性" 的理想最终实现在操作系统的应用层上: Sun 公司以及其他虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的"一次编写,到处运行". 各种不同平台的

平台无关性

1.java如何实现的平台无关性 首先,Java提供了jdk,供开发人员进行java开发,而.java文件本身并不具备平台无关性的特性.java文件编译后,生成了class文件. 而sun公司提供了不同平台的jre(里面的bin目录就可以看做是jvm),windows的.linux的.unix的,编译后的class文件就在各个平台下的jvm上运行,将class文件解释成电脑能够识别的机器代码,从而实现的平台无关性 原文地址:https://www.cnblogs.com/xiaobo520/p/

为什么说Java语言是平台无关的?

适当的整理了一下: 一.平台与机器指令 无论哪种编程语言编写的应用程序都需要经过操作系统和处理器来完成程序的运行,因此这里的平台是又OS和CPU所构成的,所谓的平台无关就是指软件的运行不会因操作系统.处理器的变化而无法运行或出现运行错误.        每个平台都有自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别.执行的一种由0和1组成的序列代码.相同的CPU和不同的OS所形成的平台的机器指令可能是不同的 二.何为与平台相关? C/C++程序是依赖平台的:C/C++源程序所在的特定

Java 虚拟机面试题全面解析(干货)

Java 虚拟机面试题全面解析(干货) 本文固定链接:https://www.zybuluo.com/Yano/note/321063 本文 PDF 下载:http://download.csdn.net/detail/yano_nankai/9469648 LeetCode题解:https://github.com/LjyYano/LeetCode 我的博客:http://blog.csdn.net/yano_nankai 周志明著的<深入理解 Java 虚拟机>的干货~如有错误,欢迎指出

Java虚拟机定义

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.[1] 中文名 java虚拟机 外文名 Java Virtual Machine 目录 1定义 2简介 3特点 4使用主体 5安装方法 6数据类型 7规格描述 ? JVM指令系统 ? JVM寄