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. Ubuntu 14.04 使用MyEclipse 10.7 闪退解决

    http://www.linuxidc.com/Linux/2014-05/101750.htm

  2. STM32开发指南-跑马灯实验

    简单对I/O口的控制,主要通过对寄存器的读写控制.主要通过I/O的寄存器来控制:1. 控制I/O的方向2. 控制I/O的输出电平或上下来电阻3. 存储I/O口当前的输入状态(高低电平) 对使用LED灯 ...

  3. jQuery解除超链接<a>的click事件

    jQuery的 unbind 方法并不能解除超链接(即a标签)的click事件,如果想让超链接的默认click事件不发生需要如下处理: Js代码 $('#some-link-id').click(fu ...

  4. openssl使用+Demo

    1. websiteSSL(secure Socket Layer)TLS(transport Layer Security) - SSL3.0基础之上提出的安全通信标准,目前版本是1.0openss ...

  5. PAT 天梯赛 L2-1 紧急救援

    Dijkstra算法扩展 题目链接 解题代码如下: #include<cstdio> #include<iostream> #include<algorithm> ...

  6. 解决IE6中PNG图出现灰色背景问题

    第 1 种方法:定义一个样式,给某个div应用这个样式后,div的透明png背景图片自动透明了.(注意两处图片的路径写法不一样,本例中,icon_home.png图片与html文件在相同目录) < ...

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

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

  8. flume-1.6.0单节点部署

    这个不多说,直接上干货,部署很简单! 步骤一:flume的下载 当然,这里也可以使用wget命令在线下载,很简单,不多说. 步骤二:flume的上传 [hadoop@djt002 flume]$ ls ...

  9. 使用msm文件创建msi

    一.不使用merge module的ModuleSubstitution和ModuleConfiguration 1.创建MyMsm.msm <?xml version="1.0&qu ...

  10. [iOS Animation]-CALayer 图层性能

    图层性能 要更快性能,也要做对正确的事情. ——Stephen R. Covey 在第14章『图像IO』讨论如何高效地载入和显示图像,通过视图来避免可能引起动画帧率下降的性能问题.在最后一章,我们将着 ...