Java体系结构

Java体系结构包括四个独立但相关的技术:

1.Java程序设计语言

2.Java class文件格式

3.Java应用编程接口(API)

4.Java虚拟机

当编写并运行一个Java程序时,就同时使用了这四种技术。用Java程序设计语言编写源代码,把它编译成Java class文件,然后在java虚拟机中运行class文件。当编写程序时,通过调用实现了Java应用编程接口(API)类中的方法来访问系统中资源如io、网络内存等。当程序运行的时候它可以调用class文件中的实现的方法来满足程序java api的调用。

一、Java虚拟机

Java的面向网络的核心就是Java虚拟机,它支持Java面向网络体系结构三大支柱:平台无关性、安全性和网络移动性。

Java虚拟机是一台抽象的计算机,其规范定义了每个Java虚拟机都必须实现的特性,但是为每个特定实现都留下了很多选择。

Java虚拟机的主要任务是装载class文件并且执行其中的字节码。装载类由类装载器(class loader)完成,它可以从程序和API中装载class文件。JavaAPI中只有程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。

Java虚拟机中的三种执行引擎

1、最简单的执行引擎就是一次性解释字节码

2、另一种执行引擎更快,但是也更消耗内存,叫做“即时编译器”(just-in-time compiler)

3、第三种执行引擎是自适应优化器

第二种比第一种执行引擎效率上要高很多,执行速度也更快,但相对的缺点就是内存消耗很大。当内存消耗剧烈的时候,jvm就会出现异常。在这种情况下,即时编译器第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码也会被缓存,当方法以后被调用时候可以重用。

第三种引擎,自适应优化器,在这种方法里,虚拟机开始的时候解释字节码,但是会监视运行种的程序的活动,并且记录下使用最频繁的代码段。程序运行时,虚拟机只把那些活动最频繁的代码编译成本地代码,其他代码由于使用的并不很频繁,继续保留字节码由虚拟机继续即时它们。一个自适应的优化器可以使用java虚拟机种的80%-90%的时间里执行被优化的本地代码,而只需要编译10%-20%对性能有影响的代码。

Java虚拟机与主机交互

当java虚拟机是由主机操作系统上的软件实现的时候,java程序通过调用本地方法native mehod 和主机进行交互。java中有两种方法,java方法和本地方法。java方法是由java语言编写,之后编译成字节码,存储在class文件中的。本地方法是由其他语言比如c\c++\汇编语言编写的,编译器和处理器的相关代码。

Java虚拟机上的类装载器

在Java虚拟机上,存在着多个类装载器,一个java应用程序可以使用两种类装载器,启动bootstrap类装载器和用户定义的类装载器。启动类装载器是java虚拟机实现的一部分。启动装载器通常使用默认的方式从本地磁盘中装载类,包括java api类。启动类装载器也被叫做原始类装载器、系统类装载器或者默认类装载器。

二、Java class 文件

Java class文件是一个可以跨平台的二进制文件,是通过java虚拟机来实现编译的。

平台无关性:通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Java class文件是可以运行在任何支持Java虚拟机制硬件平台和操作系统上的二进制文件。

网络适应性:class文件设计的紧凑,因此它们可以快速地在网络上传送。其次由于Java程序是动态链接和动态扩展的,class文件可以在需要的时候才下载。

三、Java API

Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。Java API是相对安全的,它是保证平台无关性的前提,因为Java虚拟机和Java API class文件是任何Java平台都要实现的必要部分。在一个平台能够支持Java程序以前,必须在这个特定平台上明确地实现API的功能。

四、Java程序设计语言

尽管Java是为网络而生的,但许多人使用Java写程序还可能是因为想要利用Java程序设计语言的优势:

1.面向对象

2.多线程

3.结构化错误处理

4.垃圾收集

5.动态连接

6.动态扩展

参考书籍:《深入Java虚拟机 第二版》

深入Java虚拟机(1)——Java体系结构的更多相关文章

  1. Java虚拟机的内部体系结构

    1.Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行. ...

  2. Java虚拟机规范----JVM体系结构

    一.Java平台的结构图 二.JVM与JRE.JDK关系? JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE:Java Runtime En ...

  3. 深入理解 Java 虚拟机——走近 Java

    1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于 嵌入式 ...

  4. 《深入理解Java虚拟机》-Java代码是如何运行的

    问题一:Java与C++区别 1.Java需要运行时环境,包括Java虚拟机以及Java核心类库等. 2.C++无需额外的运行时,通常编译后的代码可以让机器直接读取,即机器码 问题一:Java为什么要 ...

  5. 深入理解Java虚拟机之Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...

  6. 深入理解Java虚拟机-走进Java

    一.Java技术体系 从广义上讲, Clojure. JRuby. Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员. 如果仅从传统意义上来看, Sun官方所定义 ...

  7. java虚拟机之JVM体系结构

    JVM体系结构: 下面重点介绍运行时数据区域模块: (1)java堆(Heap) 被所有线程共享的一块内存区域,在虚拟机启动时创建 用来存储对象实例 可以通过-Xmx和-Xms控制堆的大小 OutOf ...

  8. java虚拟机和java内存区域概述

    什么是虚拟机,什么是Java虚拟机 虚拟机 定义:模拟某种计算机体系结构,执行特定指令集的软件 系统虚拟机(Virtual Box.VMware),进程虚拟机 进程虚拟机 jvm.Adobe Flas ...

  9. Java虚拟机栈(java stack)

    虚拟机栈(java stack) 百度图片搜索里的动图搜索功能不错,可以搜索一些动图,展示操作数栈的操作过程,比较形象.这点google差点意思 虚拟机栈(jvm stacks)是线程独占的 里面是多 ...

  10. 《深入理解Java虚拟机》Java内存区域与内存溢出异常

    注:“蓝色加粗字体”为书本原语 先来一张JVM运行时数据区域图,再接下来一一分析各区域功能:   程序计数器 程序计数器(program Counter Register)是一块较小的内存空间,它可以 ...

随机推荐

  1. Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布

    Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布 摘要: jeasypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导 ...

  2. 【转载】Linux下安装、配置、启动Apache

    原文地址:http://www.cnblogs.com/zhuque/archive/2012/11/03/2763352.html 安装Apache前准备: 1.检查该环境中是否已经存在httpd服 ...

  3. vue 插值,v-once,v-text, v-html

    引入Vue.js ,通过script形式,vue官网语法记录 创建vue应用,数据和 DOM 已经被建立了关联,所有东西都是响应式的 1:插值 缺点:让你的网速慢,或者数据加载失败时,会在浏览器中直接 ...

  4. 二 Djano模型层之模型字段选项

    字段选项 以下参数是全部字段类型都可用的,而且是可选的 null 如果为True,Django将在数据库中将空值存储为NULL.默认值为False 对于字符串字段,如果设置了null=True意味着& ...

  5. Python基础学习(第一周)

    Python是一门什么语言 编译型和解释型 通俗来讲,编译型就是一次性把所有程序写的代码都转换成机器可以识别的语言(机器语言),即可执行文件.exe: 解释型就是程序每执行到某一条指令,则会有有个称之 ...

  6. [C#] .NET Core/Standard 2.0 编译时报“CS0579: Duplicate 'AssemblyFileVersionAttribute' attribute”错误的解决办法

    作者: zyl910 一.缘由 当创建 .NET Core/Standard 2.0项目时,VS不会像.NET Framework项目一样自动生成AssemblyInfo.cs文件. 而且,若是手工在 ...

  7. 机器学习基石:01 The Learning Problem

    什么时候适合用机器学习算法? 1.存在某种规则/模式,能够使性能提升,比如准确率: 2.这种规则难以程序化定义,人难以给出准确定义: 3.存在能够反映这种规则的资料. 所以,机器学习就是设计算法A,从 ...

  8. 51 nod 1055 最长等差数列(dp)

    1055 最长等差数列 基准时间限制:2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 N个不同的正整数,找出由这些数组成的最长的等差数列.     例如:1 3 5 6 8 9 ...

  9. 【SYZOI Round1】滑稽的树

    Description zzsyz实验楼里面种了一棵滑稽树,只有滑稽之力达到大乘期的oier才能看到.虽然我们看不到,但是还是知道一些信息: 这真的是一棵树,由n个节点,n-1条边联通.一号滑稽果同时 ...

  10. ●BZOJ 3129 [Sdoi2013]方程

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3129 题解: 容斥,扩展Lucas,中国剩余定理 先看看不管限制,只需要每个位置都是正整数时 ...