虚拟机概论(六)——JAVA虚拟机模型

JAVA虚拟机模型

由于它的高度可移植性,JAVA已经成为Internet上的主要编程语言。

“模拟机”的概念是计算机工业界经常使用的对虚拟机的解释之一。这种虚拟机概念和IBM版的虚拟机非常不同。在IBM的概念中,系统内存和资源被分割,成为当前机器的精确拷贝。而对于模拟机,系统并不被分割,而是有一台新的“机器”或者虚拟机加载到当前系统中,在不改变当前系统的前提下,向用户提供不同的功能。这种类型的虚拟机被证明是非常强大的,它允许软件开发人员在一台完全不同的机器上仿效另一台机器。最近,这种观念创造了一种强大的计算机程序语言:JAVA。

JAVA程序设计语言依赖于被称做JAVA虚拟机(Java virtual machine,JVM)的模拟机。JVM使得程序员不是和系统打交道,而是和虚拟机打交道。因此程序员使用的函数是JVM内嵌的函数,而不是操作系统的函数。这非常先进,因为它提供了可移植性。如果相同的JVM安装在两个完全不同的机器上,那么同一个JAVA程序应该在两台机器上都可以运行,因为JAVA程序依赖于JVM,而不是运行它的系统。由于它的高度可移植性,JAVA已经成为Internet上的主要编程语言。许多Web页面现在都和JAVA程序结合在一起。这些JAVA程序可以完成一些在浏览器中显示的任务。

同时,JVM也非常小。或者说,它不站用大量的内存。这意味着JVM可以被应用于许多不同的机器。例如,电视机,蜂窝移动电话,以及计算机,都可以。因此,完全有可能向我们今天正在使用的设备中添加像游戏这样的复杂功能。

它是如何工作的?

你现在所疑惑的可能是一个JAVA程序究竟是如何工作的。如何使用JVM?好的,JVM是我们对抽象计算机的称呼。或者说,JVM是在“真正的”硬件平台和操作系统上用软件来实现的。JAVA程序是为JVM编译,而不是系统。这就意味着程序员写的JAVA程序由JAVA编译器翻译成JVM执行的语言/代码。这些代码被称做字节代码(Byte Code)。字节代码可以被认为是JVM的机器语言。JVM把字节代码流解释成指令序列。然后这些指令被执行,生成期望的输出。图1.1展示了从JAVA程序到最终执行的路线。

如图1.1所示,一旦字节代码被JVM解释,JVM指令就会被映射成操作系统指令或者硬件指令。这就意味着JVM实际上是使用操作系统和机器指令来实现它所获取的指令。因此,JVM的指令在每一个安装JVM的操作系统或机器上都必须有一个可能的映射才能工作。这就是为什么JAVA语言并没有达到100%可移植的原因之一。可能有的JVM指令在一种操作系统上可以实现,而在另外一种操作系统上不能实现。

小结

JAVA虚拟机的主要目的就是去解决计算机程序的可移植问题。问题是JVM完全解决这个问题了吗?答案是没有……它没有完全解决这个问题。但是,它提供了一种对大部分都有效的解决方案(尽管不是100%有效)。JAVA已经实现相当高的可移植性。JAVA的力量使人们可以开发许多跨平台的应用程序。JAVA已经证明是有用的,强大的虚拟机实现。

时间: 2025-01-21 05:57:01

虚拟机概论(六)——JAVA虚拟机模型的相关文章

Java虚拟机详解----JVM常见问题总结

[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制.   先把本文的目录画一个思维导图:(图的源文件在本文末尾)   一.Java引用的四种状态: 强引用: 用的最广.我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用. 如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java

Java虚拟机

一. 什么是Java虚拟机 Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器.堆栈.寄存器等,还具有相应的指令系统. 1.为什么要使用Java虚拟机? Java语言的一个非常重要的特点就是与平台的无关性.而使用Java虚拟机是实现这一特点的关键.一般的高级语言如果要在不同的平台上运行, 至少需要编译成不同的目标代码.而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译. Java虚拟机屏蔽了与具体平台相关的信息,

Java虚拟机的内存结构

我们都知道虚拟机的内存划分了多个区域,并不是一张大饼.那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快.是的,如果不进行区域划分,扔的时候确实痛快,可用的时候再去找怎么办呢,这就引入了第一个问题,分类管理,类似于衣柜,系统磁盘等等,为了方便查找,我们会进行分区分类.另外如果不进行分区,内存用尽了怎么办呢?这里就引入了内存划分的第二个原因,就是为了方便内存的回收.如果不分,回收内存需要全部内存扫描,那就慢死了,内存根据不同的使用功能分成不同的区域,

理解Java虚拟机体系结构(转)

1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Java虚拟机,它号称的"一次编译,到处运行"才能有所保障. 1.1 Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行.Java程序的运行需要Java

深入解析java虚拟机_java

java虚拟机是什么 "java虚拟机"可能指以下三种东西:1).抽象规范:2).一个具体的实现:3).一个运行中的虚拟机实例: java虚拟机生命周期 启动当启动一个java程序时,一个虚拟机实例诞生.虚拟机实例通过调用某个初始类的public static void main(String[] args)方法来运行一个java程序.任何拥有这样一个main方法的类都可以作为java程序运行的起点,所以必须要告诉虚拟机初始类的名称,整个程序将从它的main方法开始运行.消亡初始类的m

虚拟机概论(八)——UNIX虚拟机模型

unix UNIX虚拟机模型 使用和设计虚拟机的概念,成为建立可交互的.健壮的虚拟设备的有效方法.这种方法可用来解决计算机工程师所面临的许多问题.在UNIX操作系统中,虚拟机的概念和进程模型高度统一起来.UNIX操作系统是现代计算机使用的最成功.最受尊重的操作系统之一.UNIX的广泛使用,使得他的虚拟机特征被全部发掘,并归类为真正的虚拟机.UNIX操作系统使用一系列的独立进程来完成用户的指令.UNIX可以安排并配置它所创建的进程来传递和操纵数据.从概念上讲,UNIX的进程可以被看作一个虚拟机,因

《深入解析Android 虚拟机》——2.6 Java内存模型

2.6 Java内存模型 不同的平台,内存模型是不一样的,但是JVM的内存模型规范是统一的.其实Java的多线程并发问题最终都会反映在Java内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改.总结Java的内存模型,要解决两个主要的问题:可见性和有序性. 人们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的.JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于Java开发人员,要清楚在JVM内存模型的基础上,如果解决多线程的可见性和有序性. 那么,

《Java虚拟机》必知必会——十四个问题总结(内存模型+GC)

一.Java概述 1.Java相较于PHP.C#.Ruby等一样很优秀的编程语言的优势是什么? (1)体系结构中立,跨平台性能优越.Java程序依赖于JVM运行,javac编译器编译Java程序为平台通用的字节码文件(.class),再由JVM与不同操作系统匹配,装载字节码并解释(也有可能是编译,会在第三个问题中说到)为机器指令执行. (2)安全性优越.通过JVM与宿主环境隔离,且Java的语法也一定程度上保障了安全,如废弃指针操作.自动内存管理.异常处理机制等. (3)多线程.防止单线程阻塞导

《深入解析Android 虚拟机》——第2章,第2.6节Java内存模型

2.6 Java内存模型不同的平台,内存模型是不一样的,但是JVM的内存模型规范是统一的.其实Java的多线程并发问题最终都会反映在Java内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改.总结Java的内存模型,要解决两个主要的问题:可见性和有序性. 人们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的.JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于Java开发人员,要清楚在JVM内存模型的基础上,如果解决多线程的可见性和有序性. 那么,何