JAVA虚拟机:JAVA体系结构

JAVA体系结构:JAVA设计语言,JAVA Class文件,JAVA API,JAVA虚拟机。

一、java虚拟机:

1、java虚拟机的主要任务是装载class我呢间并且执行其中的字节码。java虚拟机包含一个类装载器,他可以从程序和API中装载class文件。

  JAVA API中只有程序执行时那些需要的类才能被装载。字节码由执行引擎来执行。

  Java虚拟机:1、一种简单的执行引擎,是一次性解释字节码。2、执行引擎很快,消耗内存,在这种情况下,第一次被执行的字节码会被翻译成本地机器代码,

  编译出的本地机器代码会缓存,当方法调用的时候可以重用。3、第三种执行引擎是自适应优化器。在这种方法里,虚拟机开始的时候解释字节码,但是会监事运行中程序的

  活动,并且记录最频繁的代码段。只把最频繁的代码段翻译成本地机器代码。

2、当java虚拟机是由主机上的操作系统的软件实现的时候,java程序通过调用本地方法和主机交互。java中有两种方法,JAVA方法和本地方法。java方法编译成字节码,存储在class文件中,本地方法是由其他语言编写的,编译成和处理器相关的机器代码。本地方法保存在动态链接库中,格式是各个平台有的。运行中的Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。通过本地方法,java程序可以直接访问底层的操作系统的而资源。java本地接口(JNI)使得本地方法可以在特定主机系统的任何一个java平台实现上运行。然而java平台供应商不一定必须支持JNI.

二、类装载器的体系结构

1.类装载器有两种: 启动类装载器和用户自定义的类的装载器。启动类装载器是Java虚拟机实现的一部分。启动类装载器通常使用某种默认方式从本地磁盘中装载类,包括Java API的类。启动类装载器也被称为原始类装载、系统类装载器或者默认装载器。
    Java应用程序能够在运行时安装用户定义的类装载器,这种类装载器能够使用自定义的方式来装载类。

2.每个类被装载的时候,Java虚拟机都监视这个类,看它到底是被启动类装载器还是被用户自定义类装载器装载。当被装载的类引用了另外一个类
时,虚拟机就会使用装载第一个类的类装载器 -->去装载
被引用的类。即比如,虚拟机会使用一个特定类装载器装载了Volcano类,它也会使用这个类装载器-->装载Volcano类中所引用到的所有
类。

3.由于Java虚拟机采用2所述的这种方式进行类的装载,所以被装载类 默认情况下只能看到被同一个类装载器装载的别的类。
通过这种方法,Java的体系结构允许在一个Java应用程序中建立多个命名空间,运行时的java程序中的每一个类装载器都有它自己的命名空间。

4. 一个Java应用程序能够从同一个类 或者 多个类 中 实例化 多个用户定义的 类装载器。(这句话好好理解下子)而,被不同类装载器装载的类存放在不同的命名空间中,它们不能相互访问,除非应用程序显示允许这样做。通过这种方法,就能够阻止恶意代码获取访问和破坏善意代码的权限。

三、java class文件

  java class文件主要在平台无关性和网络移动性方面使得java更适应于网络。在平台无关性方面的任务是:为java程序提供独立于底层主机平台的二进制形式的服务。除了平台的无关性设计方面,java class文件设计的紧凑,可以很快在网络上传送。java程序的动态链接和动态扩展,class文件在需要的时候才被下载。

四、java API

  java API是一套运行库的集合,他提供一套访问知己系统资源的标准方法。java API上的class文件天生就与主机平台密切相关。在一个平台能够支持java程序之前,必须在这个平台上特定的明确实现API的功能。为访问主机上的本地资源,java API调用了本地方法。java api为底层主机提供了具有平台无关性的标准接口的java程序。

五、java程序设计语言

  面向对象、多线程、结构化错误处理、垃圾收集、动态链接、动态扩展。

时间: 2024-10-06 19:01:15

JAVA虚拟机:JAVA体系结构的相关文章

Java虚拟机学习 - 体系结构 内存模型(1)

一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加

Java虚拟机学习 - 体系结构 内存模型

一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加

Java虚拟机学习 - 体系结构 内存模型(转载)

一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆”,  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中

深入理解Java虚拟机 - Java体系

使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把<深入理解Java虚拟机>这本书读了一下,也算解答了自己很多的疑惑. JAVA不仅仅是一门语言,而是由一系列软件和规范形成的技术体系,我们可以根据这些技术体系构造符合JAVA规范的虚拟机,语言,解析器等:由于JAVA的最初的设计目标是为了实现“一次编写,到处运行”的理想,整个软件界在这个理想的鼓舞下,针对不同的应用场景,设计了不同的VM以及语

Java 虚拟机-Java内存区域

简要介绍Java的内存区域: 运行时数据区域 HotSpot虚拟机对象 一.概览 二.运行时数据区域 2.1 程序计数器 Program Counter Register,代表当前线程所执行的字节码的行号指示器,操作系统中的PC,这两个是一个概念.执行时就是通过改变这个计数器来选取下一条需要执行的字节码指令.Java支持多线程,所以每个线程有自己独享的PC,类似于操作系统线程表中的一个属性. 2.2 Java虚拟机栈 和PC一样,是线程私有的,和线程的生命周期一样.虚拟机栈描述的是Java方法执

深入理解Java虚拟机——java内存区域与内存溢出异常(一)

Java虚拟机全称:java virtual machine:是Java开发语言中,用来运行Java字节码文件的平台:通俗的讲,就是一个程序.它提供对Java字节码的解释及运行,从而使Java语言能独立于各个系统平台. Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁时间.Java虚拟机所管理的内存包括以下几个运行时数据区域:1)程序计数器: 可以看作是当前线程所之行的字节码的行号指示器.字节码解释器就是通过改变计数器的

Java虚拟机——Java内存区域与内存溢出

内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈.Java堆.方法区.下面详细阐述各数据区所存储的数据类型. (图片来自:http://blog.csdn.net/ns_code/article/details/17565503) 程序计数器(Program Counter Register) 一块较小的内存空间,它是当前线程所执行的字节码的行号

Java虚拟机-java内存区域

运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个大小不同的数据域:这些区域都有各自的用途,以及创建和销毁时间,有的区域会随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁. 程序计数器: 程序计数器是一块较小的内存空间,可以看作当前线程所执行的字节码的信号指示器: 由于Java虚拟机的多线程是通过线程轮流转换并分配处理执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令.因此,为了线程切换后能恢复到正确的

深入理解java虚拟机---java虚拟机内存管理(六)

java虚拟机栈的理解 虚拟机栈就是我们所熟知的栈内存,栈内存属于线程独有的.而在栈内存中的局部变量表中存储的引用类型只是存储对象的内存地址.对象的创建在堆内存中,即对象在线程共享区中. 局部变量表: 局部变量表的内存空间在编译时期完成分配,用于存放编译期间可知的各种基本数据类型,引用类型以及returnAdress类型.就是我们所熟知的栈内存. 模拟栈内存溢出 当在一个线程中不停的死循环调用一个方法时,因为方法的执行会在帧分配固定内存的大小,所以不停调用方法(前一个方法未执行完成弹出栈),会在

深入理解java虚拟机-java内存区域与内存溢出异常

线程 运行数据区分为线程共享区和线程独占区 线程独占区的意思是每开启一个线程就会拥有一个线程独占区域 如下图所示: 程序计数器: 1)是一块较小的内存空间,可看做当前线程所执行的字节码的行号指示器 2)它处于线程独占区(每一个线程都会有自己的线程独占区) 3)如果线程执行的是java方法,这个计数器记录的就是正在执行的虚拟机字节码指令的地址,如果正在执行的是native方法,这个计数器的值为undefined 4) 此区域是唯一一个在java虚拟机规范中没有规定任何OutofMemory的情况的