`
0428loveyu
  • 浏览: 30928 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Java 运行原理

 
阅读更多

在研究Java运行原理之前,我们先把视野放宽一点:一般的高级语言是如何工作的?我们在编辑器或者IDE里根据每种语言的语法规则敲入源代码,这些代码我们很容易理解。很显然,这些代码肯定是以二进制存储在我们的硬盘当中,当我们再次打开的时候,编辑器读取这些二进制,还原成我们能读懂的英文。当我们真正运行程序的时候,CPU是读不懂这些英文的,所以我们需要先转化成可执行的二进制文件,这个过程通常由编译器完成。有些编译器直接将源代码编译成机器码,载入内存后CPU可以直接运行。而机器码的格式是跟具体的CPU架构相关的,Intel的CPU机器码对于ARM CPU来说是无法理解的。因此,同样的源代码需要根据不同的硬件进行特定的编译。好了,高级语言到低级语言的桥梁就是编译器。我们写好源代码,编译器将源码编译成可执行的机器码,然后CPU读取机器码,执行程序。


可以说,Java这一语言的执行过程也遵循这样的过程:源代码--->机器码。 但是,从源代码到机器码之间,究竟经过什么样的过程,则是Java独一无二的了。宽泛地讲,Java源代码(.java)经过java编译器(javac.exe)编译之后,并没有直接转化为机器码,而是转化成一种中间格式,成为字节码(.class),字节码再经过java虚拟机转化成特定CPU架构的机器码。也正是因为这一中间物,java才有所谓的跨平台。在windows平台上编译好的字节码,copy到linux平台后,经过为linux而设计的Java虚拟机解释后即可执行。跨平台这一特征,是通过字节码和JVM来实现的。因此,想搞清楚java程序到底是如何运行的,重点在于弄明白字节码是如何被转化成跟CPU架构相关的机器码然后被执行的。也就是要理解JVM到底是如何工作的。


在了解JVM之前,我们再跳出来一下,先看看什么是虚拟机。所谓虚拟机,我是这么理解的:用软件的方式模拟出跟硬件类似的环境,比如说寄存器、存储器等等。当然,所有最终的工作还是由原来的CPU来完成。比如说VirtualBox这个虚拟机产品,它其实就是一个应用程序,用某种编程语言编写的应用程序。当运行这个应用程序时,它会要求操作系统给它独立施展手脚的空间:给我一些内存,给我一定的CPU时间片,然后不用管我了。你可能会问,寄存器是硬件啊,它怎么能划分啊,难道是时间划分?不是的,像内存这样的硬件,可以给虚拟机一块独立的内存块,但是寄存器之后的,则需要用“模拟仿真”的方式来模拟。OK,回到Java虚拟机。到底什么是Java虚拟机,很难有一个十分明确的定义,狭窄一点说,它就是一个应用程序,大部分用C++编写的。宽泛地说,它就是执行字节码的一整个环境。



从上面这一张图可以看出来,JVM完成了字节码带机器码的所有相关工作。它从文件系统中将字节码文件载入到操作系统分配给Java虚拟机的内存当中,然后解释字节码,转化成机器码,然后经由操作系统到达CPU运行。整个执行过程如下图所示:


至于java虚拟机到底是如何实现,如何工作的,则是一片值得研究的广阔天地。

分享到:
评论

相关推荐

    java运行原理图

    亿图软件绘制的Java基本运行原理图示,避免张贴图片格式,便于适应文档的撰写。简单明了的使用和修改

    Java运行原理与Java虚拟机.pdf

    ### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...

    Java运行原理 javap命令运行结果

    ### Java运行原理与javap命令运行结果解析 #### 一、Java运行原理概述 Java是一种广泛使用的编程语言,它的程序可以在任何支持Java虚拟机(JVM)的操作系统上运行,而无需重新编译。Java程序的执行过程可以分为...

    Java运行原理 demo代码

    Java运行原理 demo代码

    01-JavaSE-JAVA运行原理.ppt

    Java是由Sun公司推出的Java程序设计语言和Java软件开发平台的总称。... 高性能:运行速度随着编译器技术提高 ; 多线程:java内置了对多 线程的支持,编写更简单; 动态性:适应动态变化的环境。

    Java环境搭建和运行原理

    eclipse的安装和JDK的安装以及Java环境的搭建,另外还介绍了Java的运行原理 一,安装Java开发环境 1.下载安装配置JDK a 从Oracle网站下载JDK b安装JDK c配置JDK 2.下载安装Eclipse

    java内存原理.doc

    Java 内存原理 Java 内存原理是 Java 语言中的一种基本机制,用于管理和分配内存资源。在 Java 中,内存被分为两种:栈内存和堆内存。 栈内存是指在函数中定义的一些基本类型的变量和对象的引用变量。这些变量在...

    浅谈为什么java命令运行class文件出现异常共7页.p

    Java命令行运行class文件是Java开发中的基本操作,但有时候我们可能会遇到各种异常情况,导致程序无法正常执行。本文将深入探讨这个问题,...不断积累经验,理解Java运行原理,将有助于我们更高效地定位和解决问题。

    java core 笔记

    2. Java运行原理 - 编译与解释:Java源代码首先被编译成字节码(.class文件),然后由JVM解释执行。 - 类加载:JVM在运行时动态加载类,实现程序的动态扩展。 - JIT编译:JVM的即时编译器将频繁执行的热点代码...

    Java教案——3章 个人学习资料

    Java运行原理主要包括以下几个步骤: 1. **编译过程**:Java源文件(.java)通过Java编译器(javac)被编译成字节码(.class)。 2. **运行过程**:客户端收到网络传输的字节码后,通过JRE中的JVM将字节码转化为本地...

    【一脚揣进J2SE】视频教程(持续更新)

    资源名称:【一脚揣进J2SE】视频教程(持续更新)资源目录:【】《一脚踹进J2SE》1-1Java简介【】《一脚踹进J2SE》1-2Java运行环境搭建【】《一脚踹进J2SE》1-3HelloWorld实现及Java运行原理介绍【】《一脚踹进J2SE...

    深入Java核心 Java内存分配原理精讲

    深入探讨Java核心:Java内存分配原理精讲 Java内存分配机制是Java编程语言的重要组成部分,它不仅直接影响着程序的性能,也是理解Java垃圾回收、内存泄漏等问题的关键。本文将聚焦于Java内存分配的核心概念,包括栈...

    java反射原理详解

    Java反射机制是Java语言的一种强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包中的类(如Constructor、Method、Field)以及...

    Java运行时内存分配

    ### Java运行时内存分配详解 #### 一、引言 Java作为一种广泛使用的编程语言,其内存管理机制一直是开发者关注的重点之一。Java程序在运行时如何分配内存?对象是如何存储的?这些问题不仅对于深入理解Java虚拟机...

    Java运行环境Java运行环境

    Java运行环境是执行Java程序所必需...Java运行环境是Java开发和运行的基础,理解其工作原理和特点对于Java程序员来说至关重要。无论是编写简单的控制台程序,还是构建复杂的分布式系统,Java运行环境都扮演着关键角色。

    Java运行时动态编译

    Java运行时动态编译是Java语言的一个重要特性,它使得Java程序在运行过程中可以对代码进行优化和调整,极大地提高了程序的性能。这个特性主要得益于Java的Just-In-Time (JIT) 编译器,它是Java虚拟机(JVM)的一部分...

    JVM(Java 虚拟机)的详细讲解

    #### Java运行原理概览 Java作为一种跨平台的编程语言,其核心优势在于“一次编写,到处运行”的特性。实现这一目标的关键技术是Java虚拟机(JVM)。简单来说,Java源代码在编译后会生成一种名为字节码(ByteCode)的...

Global site tag (gtag.js) - Google Analytics