Sun公司设计java语言的目标是让Java程序不必经过修改就可以在各种各样的计算机(包括PC机和工作站)上运行。为了实现这一目标,Sun公司提供了一阵Java虚拟机(Java Virtual Machine,JVM)的机制,其工作原理及流程图为:

    Java虚拟机是编译和运行Java程序等的各种命令及其运行环境的总称。Java源程序在编译之后生成后缀为“.class”的文件,该文件以字节码(bytecode)的方式进行编码。这种字节码实际上是一种伪代码,它包含各种指令,这些指令基本上是与平台无关的指令。Java虚拟机在字节码文件(及编译生成的后缀为.class的文件)的基础上解释这些字节码,及将这些字节码转行成为本地计算机的机器代码,并交给本地计算机执行。
    这样,字节码实际上是一种与平台无关的伪代码,通过Java命令变成在各种平台上的机器代码。这些伪代码最终是在本地计算机平台上运行的,但Java程序就好像是在这些Java命令的基础上运行的,因此这些Java命令的集合好像是采用软件技术实现的一种虚拟计算机。这就是Java虚拟机名称的由来。
    Java虚拟机执行字节码的过程由一个循环组成,它不停地家族程序,进行合法性和安全性检测,以及解释执行,直到程序执行完毕(包括异常退出)。Java虚拟机首先从后缀为“.class”文件中加载字节码到内存中;接着在内存中检测代码的合法性和安全性,例如,检测Java程序用到的数组是否越界、所要访问的内存地址是否合法等;然后解释执行通过检测的代码,及根据不同的计算机平台将字节码转化成为相应的计算机平台的机器代码,再交给相应的计算机执行。如果加载的代码不能通过合法性和安全性检测,则Java虚拟机执行相应的异常处理程序。Java虚拟机不停地执行这个过程直到程序执行结束。虽然Java语言含有编译命令,但是Java虚拟机对字节码的解释执行机制决定了Java语言是一种解释执行的语言。

java程序的工作原理的更多相关文章

  1. java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互

    java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...

  2. 详解Java GC的工作原理+Minor GC、FullGC

    详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...

  3. HTTPS那些事 用java实现HTTPS工作原理

    HTTPS那些事 用java实现HTTPS工作原理 博客分类: java历险   今天被问到关于https原理的问题,结果由于知识掌握不牢靠,停留于表面,很多细节都无法回答清楚,于是决定把https的 ...

  4. 【Java】Servlet 工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的 ...

  5. Java[4] Jetty工作原理介绍(转)

    转自:https://www.ibm.com/developerworks/cn/java/j-lo-jetty/ Jetty 的工作原理以及与 Tomcat 的比较 Jetty 应该是目前最活跃也是 ...

  6. Java HashMap的工作原理

    面试的时候经常会遇见诸如:”java中的HashMap是怎么工作的”.”HashMap的get和put内部的工作原理”这样的问题. 本文将用一个简单的例子来解释下HashMap内部的工作原理. 首先我 ...

  7. Java HashMap的工作原理(转载)

    原文地址:http://www.importnew.com/10620.html 面试的时候经常会遇见诸如:"java中的HashMap是怎么工作的","HashMap的 ...

  8. 05 入门 - 浅谈 ASP.NET MVC程序的工作原理

    目录索引:<ASP.NET MVC 5 高级编程>学习笔记 本篇内容 1. Global.asax文件 2. RouteConfig.cs文件 3. 视图命名和寻址的规则 前面创建了一个简 ...

  9. JAVA三框架工作原理是什么?

    一.struts的工作原理: 1.初始化,读取struts-config.xml.web.xml等配置文件(所有配置文件的初始化) 2.发送HTTP请求,客户端发送以.do结尾的请求 3.填充Form ...

随机推荐

  1. android4.0 的图库Gallery2代码分析(一)

    最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...

  2. 如何删除要素类 IFeatureWorkspace 接口介绍(1)

    如何删除要素类 要想删除一个要素类,那么必须先得到这个,在得到这个要素类的时候,我们要学习一个新的接口IFeatureWorkspace. IFeatureWorkspace  接口介绍 这个接口主要 ...

  3. exe打包发行哪家强

    exe打包发行哪家强,我推荐Advanced Installer11.0: 该有的都有了,这是网盘地址:http://pan.baidu.com/s/1geRDPIz

  4. 修改SqlServer字段长度

    Alter Table  [JHEMR].[dbo].[PT_ERROR_LOG]  ALTER COLUMN  MESS  nvarchar(1000)

  5. DataTable的名称要后设置

    string sqldatabase = string.Format(dr["sql"].ToString(), drpat["PATIENT_ID"].ToS ...

  6. SQL面试题——查询课程

    题目: 成绩表(Grade),包含字段:GradeID(Int,自增), SNO(int, 学号), CNO(int, 课程号), Score(float,分数) 查询每门课程的平均(最高/最低)分及 ...

  7. POJ 2976 Dropping tests 01分数规划 模板

    Dropping tests   Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6373   Accepted: 2198 ...

  8. jquery 如何动态添加、删除class样式方法介绍_jquery_脚本之家

    获取与设置样式 获取class和设置class都可以使用attr()方法来完成.例如使用attr()方法来获取p元素的class 取与设置样式 获取class和设置class都可以使用attr()方法 ...

  9. Jenkins启动、停止脚本

    1.jenkins下载地址:http://pan.baidu.com/s/1o79ZRzs 2.创建shell脚本,如:jenkins.sh #!/bin/bash pid=`ps -ef | gre ...

  10. 关于集合set ---STL

    关于集合set的去重复,向集合中插入元素 #include<iostream>#include<set>using namespace std;int main(){ set& ...