深入Java虚拟机(1)——Java体系结构
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体系结构的更多相关文章
- Java虚拟机的内部体系结构
1.Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行. ...
- Java虚拟机规范----JVM体系结构
一.Java平台的结构图 二.JVM与JRE.JDK关系? JVM:Java Virtual Machine(Java虚拟机),负责执行符合规范的Class文件 JRE:Java Runtime En ...
- 深入理解 Java 虚拟机——走近 Java
1.1 - 概述 Java 总述:Java 不仅是一门编程语言,还是一个由一系列 计算机软件 和 规范 形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于 嵌入式 ...
- 《深入理解Java虚拟机》-Java代码是如何运行的
问题一:Java与C++区别 1.Java需要运行时环境,包括Java虚拟机以及Java核心类库等. 2.C++无需额外的运行时,通常编译后的代码可以让机器直接读取,即机器码 问题一:Java为什么要 ...
- 深入理解Java虚拟机之Java内存区域与内存溢出异常
Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...
- 深入理解Java虚拟机-走进Java
一.Java技术体系 从广义上讲, Clojure. JRuby. Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员. 如果仅从传统意义上来看, Sun官方所定义 ...
- java虚拟机之JVM体系结构
JVM体系结构: 下面重点介绍运行时数据区域模块: (1)java堆(Heap) 被所有线程共享的一块内存区域,在虚拟机启动时创建 用来存储对象实例 可以通过-Xmx和-Xms控制堆的大小 OutOf ...
- java虚拟机和java内存区域概述
什么是虚拟机,什么是Java虚拟机 虚拟机 定义:模拟某种计算机体系结构,执行特定指令集的软件 系统虚拟机(Virtual Box.VMware),进程虚拟机 进程虚拟机 jvm.Adobe Flas ...
- Java虚拟机栈(java stack)
虚拟机栈(java stack) 百度图片搜索里的动图搜索功能不错,可以搜索一些动图,展示操作数栈的操作过程,比较形象.这点google差点意思 虚拟机栈(jvm stacks)是线程独占的 里面是多 ...
- 《深入理解Java虚拟机》Java内存区域与内存溢出异常
注:“蓝色加粗字体”为书本原语 先来一张JVM运行时数据区域图,再接下来一一分析各区域功能: 程序计数器 程序计数器(program Counter Register)是一块较小的内存空间,它可以 ...
随机推荐
- 微信小程序:模板消息推送提示{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXXXX]”}
在开发小程序 模板消息定时推送功能时,在开发版测试程序功能运行正常,但提交到线上后提示报错{“errcode”:41030,”errmsg”:”invalid page hint: [gP1eXXXX ...
- Batch训练的反向传播过程
Batch训练的反向传播过程 本文试图通过Softmax理解Batch训练的反向传播过程 采用的网络包含一层全连接和一层softmax,具体网络如下图所示: 交叉熵成本函数: \[L = - \fra ...
- 1.UTF8字符集csv文件在oracle下乱码问题处理
1.问题描述 在excel中生成了一个UTF-8编码格式的csv文件准备导入数据库,在notpad++下打开显示正常,编码集为UTF-8,通过pl/sql dev导入oracle是出现乱码,此时初步推 ...
- js变量的生命周期
1.在JavaScript中,对于for循环中定义的i变量,其生命周期在循环结束后仍然是有效的. for (var i=0; i < 10; i++){ doSomething(i); } al ...
- APP的宣传方式有哪些
APP应用已经成为了互联网不可缺少的话题,事实上,开发一款移动APP的成本不是很高,但是怎样以最低的成本得到最大的推广效果,这是企业和开发者都很关心的一个问题.下面,我们来探讨一下这个问题. 1.一款 ...
- 音频压缩编码 opus 附完整C++代码示例
绝大数人都知道mp3格式编码,以及aac,amr等压缩格式编码. 而在语音通信界有一个强悍的音频格式编码opus. 经过实测,压缩比最高可以达到1:10. 100KB 压缩后 10KB 虽然是有损压缩 ...
- dropzone.js使用实践
官网地址:http://www.dropzonejs.com/ 一,它是什么: DropzoneJS is an open source library that provides drag'n'dr ...
- Discuz!另一处SSRF无须登陆无须条件
漏洞来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0151179.html 看看poc:http://phpstudy.com/Discuz_ ...
- ●hihocoder #1394 网络流四·最小路径覆盖
题链: http://hihocoder.com/problemset/problem/1394 题解: 有向图最小路径覆盖:最少的路径条数不重不漏的覆盖所有点. 注意到在任意一个最小路径覆盖的方案下 ...
- hdu4549(费马小定理 + 快速幂)
M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n ...