×

简单描述java的运行机制 多线程运行

简单描述java的运行机制(java多线程运行机制)

admin admin 发表于2024-09-09 00:35:04 浏览5 评论0

抢沙发发表评论

大家好,关于简单描述java的运行机制很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于java多线程运行机制的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

java多线程运行机制

首先子线程不是独立的空间啊!要不也有同步锁了!java中运行多线程时是一会运行这个线程,一会运行那个线程……随机运行的。因为运行的速度快时间短,所以就给人感觉线程是同时运行的。只要出错了,java程序立马停止运行!

Java语言的运行机制

在分析程序语言的运行机制时,通常会讨论两种类型的程勋执行模式: 编译行的程序语言和解释性的程序语言。语言的编译过程类似于日常生活中的翻译——翻译人员将一片文章翻译从中文翻译成英文,在过程中有批次处理和离线完成的特点。C语言就是这种类型的典型代表。解释性语言就类似于国际上的“中英同传”——在发言者将出中文的同时,对方的耳机就会有对应英文发言,此时的编译就叫做同传,在过程上有在线和及时的特点,BASIC语言就是这类典型的代表。 JAVA语言是一种变异性解释性语言,同时具备编译特性和解释特性。作为变异性语言,JAVA程序要被统一编译成字节码文件——文件后缀是class。此种文件在java中又称为类文件。java类文件不能再计算机上直接执行,它需要被java虚拟机编译成本地的机器码后才能执行,而java虚拟机的翻译过程则是解释性的。java字节码文件首先被加载到计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程被称为java语言的解释执行,是有java虚拟机完成的。而在现实中,java开发工具JDK提供了两个很重要的命令来完成上面的编译和解释过程。两个命令分别是java.exe和javac.exe,前者加载java类文件,并逐步对字节码文件进行解释执行,而另一个命令则对应了java语言的编译过程。在次序上,java语言是要先进行编译的过程,接着解释执行。

java 的运行机制是什么

简单来说Java程序的运行机制

编写 、编译 、运行 三个步骤。

运行机制 主要是指

编译 、运行的过程

1、编译

Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件。好让JVM(java虚拟机)里的解释器可以正常读取。

2、运行

三步 代码的装入、代码的校验和代码的执行

2.1 、 代码的装入

JVM控制解释器中的“类装载器”去读取和装载程序所需的类(class的字节码)。然后解释器开始建立类与类之间的关系。

2.2、 代码的校验

字节码校验器进行检查:校验器可发现操作数栈溢出,非法数据类型转化等多种错误。

2.3、 代码的执行

执行也分两种情况

  •   即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。

  •   解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。

通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作

谁能简单阐述下java编译执行的过程

Java虚拟机(JVM)是可运行Java代码的假想计算机。 只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。 本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。 一.Java源文件的编译、下载、解释和执行Java应用程序的开发周期包括编译、下载、解释和执行几个部分。 Java编译程序将Java源程序翻译为JVM可执行代码?字节码。 这一编译过程同C/C++的编译有些不同。 当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。 因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。 Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。 这样就有效的保证了Java的可移植性和安全性。 运行JVM字节码的工作是由解释器来完成的。 解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。 装入代码的工作由"类装载器"(classloader)完成。 类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。 当类装载器装入一个类时,该类被放在自己的名字空间中。 除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。 在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。 这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。 当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。 解释器为符号引用同特定的地址空间建立对应关系及查询表。 通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。 随后,被装入的代码由字节码校验器进行检查。 校验器可发现操作数栈溢出,非法数据类型转化等多种错误。 通过校验后,代码便开始执行了。 Java字节码的执行有两种方式: 1.即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。 2.解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作。 通常采用的是第二种方法。 由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作 具有较高的效率。 对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。 二.JVM规格描述 JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。 JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。 这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。 这些定义为JVM解释器开发人员提供了所需的信息和开发环境。 Java的设计者希望给开发人员以随心所欲使用Java的自由。 JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是: JVM指令系统 JVM寄存器 JVM栈结构 JVM碎片回收堆 JVM存储区 2.1JVM指令系统 JVM指令系统同其他计算机的指令系统极其相似。 Java指令也是由操作码和操作数两部分组成。 操作码为8位二进制数,操作数进紧随在操作码的后面,其长度根据需要而不同。 操作码用于指定一条指令操作的性质(在这里我们采用汇编符号的形式进行说明),如iload表示从存储器中装入一个整数,anewarray表示为一个新数组分配空间,iand表示两个整数的"与",ret用于流程控制,表示从对某一方法的调用中返回。 当长度大于8位时,操作数被分为两个以上字节存放。 JVM采用了"bigendian"的编码方式来处理这种情况,即高位bits存放在低字节中。 这同Motorola及其他的RISCCPU采用的编码方式是一致的,而与Intel采用的"littleendian"的编码方式即低位bits存放在低位字节的方法不同。 Java指令系统是以Java语言的实现为目的设计的,其中包含了用于调用方法和监视多先程系统的指令。 Java的8位操作码的长度使得JVM最多有256种指令,目前已使用了160多种操作码。 2.2JVM指令系统 所有的CPU均包含用于保存系统状态和处理器所需信息的寄存器组。 如果虚拟机定义较多的寄存器,便可以从中得到更多的信息而不必对栈或内存进行访问,这有利于提高运行速度。 然而,如果虚拟机中的寄存器比实际CPU的寄存器多,在实现虚拟机时就会占用处理器大量的时间来用常规存储器模拟寄存器,这反而会降低虚拟机的效率。 针对这种情况,JVM只设置了4个最为常用的寄存器。 它们是: pc程序计数器 optop操作数栈顶指针 frame当前执行环境指针 vars指向当前执行环境中第一个局部变量的指针 所有寄存器均为32位。 pc用于记录程序的执行。 optop,frame和vars用于记录指向Java栈区的指针。 2.3JVM栈结构 作为基于栈结构的计算机,Java栈是JVM存储信息的主要方法。 当JVM得到一个Java字节码应用程序后,便为该代码中一个类的每一个方法创建一个栈框架,以保存该方法的状态信息。 每个栈框架包括以下三类信息: 局部变量 执行环境 操作数栈 局部变量用于存储一个类的方法中所用到的局部变量。 vars寄存器指向该变量表中的第一个局部变量。 执行环境用于保存解释器对Java字节码进行解释过程中所需的信息。 它们是:上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针。 执行环境是一个执行一个方法的控制中心。 例如:如果解释器要执行iadd(整数加法),首先要从frame寄存器中找到当前执行环境,而后便从执行环境中找到操作数栈,从栈顶弹出两个整数进行加法运算,最后将结果压入栈顶。 操作数栈用于存储运算所需操作数及运算的结果。 2.4JVM碎片回收堆 Java类的实例所需的存储空间是在堆上分配的。 解释器具体承担为类实例分配空间的工作。 解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的内存区域的使用。 一旦对象使用完毕,便将其回收到堆中。 在Java语言中,除了new语句外没有其他方法为一对象申请和释放内存。 对内存进行释放和回收的工作是由Java运行系统承担的。 这允许Java运行系统的设计者自己决定碎片回收的方法。 在SUN公司开发的Java解释器和HotJava环境中,碎片回收用后台线程的方式来执行。 这不但为运行系统提供了良好的性能,而且使程序设计人员摆脱了自己控制内存使用的风险。 2.5JVM存储区 JVM有两类存储区:常量缓冲池和方法区。 常量缓冲池用于存储类名称、方法和字段名称以及串常量。 方法区则用于存储Java方法的字节码。 对于这两种存储区域具体实现方式在JVM规格中没有明确规定。 这使得Java应用程序的存储布局必须在运行过程中确定,依赖于具体平台的实现方式。 JVM是为Java字节码定义的一种独立于具体平台的规格描述,是Java平 *** 立性的基础。 目前的JVM还存在一些限制和不足,有待于进一步的完善,但无论如何,JVM的思想是成功的。 对比分析:如果把Java原程序想象成我们的C++原程序,Java原程序编译后生成的字节码就相当于C++原程序编译后的80x86的机器码(二进制程序文件),JVM虚拟机相当于80x86计算机系统,Java解释器相当于80x86CPU。 在80x86CPU上运行的是机器码,在Java解释器上运行的是Java字节码。 Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。 Java解释器实际上就是特定的平台下的一个应用程序。 只要实现了特定平台下的解释器程序,Java字节码就能通过解释器程序在该平台下运行,这是Java跨平台的根本。 当前,并不是在所有的平台下都有相应Java解释器程序,这也是Java并不能在所有的平台下都能运行的原因,它只能在已实现了Java解释器程序的平台下运行。

java语言有哪些核心机制

Java语言包含三种核心机制:Java 虚拟机、垃圾收集机制和代码安全检测。1、Java 虚拟机(Java Virtual Machine,JVM)在一台计算机上由软件或硬件模拟的计算机。Java虚拟机读取并处理经编译过的平台无关的字节码class文件。2、垃圾收集机制(Garbage collection)在C/C++ 等语言中,由程序员负责回收无用内存。Java语言解除了程序员回收无用内存空间的责任。它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。 3、代码安全性检测(Code Security)Java执行代码的时候,由JVM对运行的代码进行安全性检测,当进行一些非法操作的时候,比如修改一些系统设置的时候,JVM会发出警告。

你知道java的运行原理是什么吗

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++编写的。宽泛地说,它就是执行字节码的一整个环境。

java工作原理

Java工作原理由四方面组成:(1)Java编程语言(2)Java类文件格式(3)Java虚拟机(4)Java应用程序接口 当并运行一个Java程序时,需要同时涉及到这四种方面。使用文字软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类 ,通过调用类(这些类实现了Java API)中的方法来访问资源系统,把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用 。

简述JAVA 的工作机制为什么它能实现跨平台

首先我们要理解什么是跨平台,所谓的跨平台就是JAVA写的一份代码可以在任意的操作系统平台上运行。

为什么跨平台会成为一个问题呢?因为每一个操作系统平台支持不同的指令集我们所写的代码经过编译之后只能适用于一个平台,换一个平台就不支持了。而JAVA完美的解决了这个问题。

Java的一大特色就是“write once, run anywhere”即“一次编译,到处运行”。就是说你不用专门为每个平台写一份代码,你写的Java程序在任何平台都能跑起来。

它的实现原理是在系统层面上又增加了一层虚拟机(Java Virtual Machine,简称JVM),且为每个平台都定制了对应的虚拟机。然后Java程序是在虚拟机上跑的,因此平台无关。

Java的运行流程是:程序员写了源代码(Source Code,.java后缀,跨平台),然后经过编译器编译成字节码(Byte Code,.class后缀,二进制文件),字节码是所有虚拟机都能理解的中间文件。然后交给虚拟机(每个平台都有对应的虚拟机)去运行。

所以对“write once, run anywhere”更准确的理解是,“一次编译,到处装虚拟机,所以到处运行”。

整个流程如下图所示。

希望对您有所帮助!~

java语言的运行机制

java是跨平台的语言。java语言编写的程序之所以能跨平台是应为它运行于jvm(java虚拟机)之上,jvm模拟一个“软”计算机,该“计算机”负责java程序的解释,然后再翻译给jvm所运行的平台,因此,jvm有多种版本,有linux版、windows版等,不同的版本负责将java语言解释给不同的操作系统平台,正因为java由此本领,才如此风靡世界。目前编程排行榜,java已经好几年都雄踞榜首。包括现在流行的Android 3G手机程序也是基于java编写的。

关于简单描述java的运行机制,java多线程运行机制的介绍到此结束,希望对大家有所帮助。