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

使用JAVA已经快三年了,但说来惭愧,一直以来认为Java就是Java语言本身,最多再包括一个JVM,对于整个Java的体系结构还是不甚明了,现在有时间把《深入理解Java虚拟机》这本书读了一下,也算解答了自己很多的疑惑。

JAVA不仅仅是一门语言,而是由一系列软件和规范形成的技术体系,我们可以根据这些技术体系构造符合JAVA规范的虚拟机,语言,解析器等;由于JAVA的最初的设计目标是为了实现“一次编写,到处运行”的理想,整个软件界在这个理想的鼓舞下,针对不同的应用场景,设计了不同的VM以及语言。

对JAVA语言来说,现在大规模使用的JAVA虚拟机有ORACLE 公司的Hotspot,JRocket和IBM 的J9虚拟机。其中JROCKET主要针对高性能场景,而J9则通常嵌入在IBM相关产品之中。

从广义上讲,Clojure、JRuby、Groovy等运行在Java虚拟机上的语言及相关程序都属于Java技术体系,但从传统意义上来看,Java技术体系包含了以下几个部分:

  • Java程序设计语言
  • 各种硬件平台上的java虚拟机
  • Class文件格式
  • Java API类库
  • 来自商业机构和开源社区的第三方Java类库

我们把Java程序设计语言、Java虚拟机、Java API类库这三部分统称JDK(Java Development Kit),JDK是支持Java程序开发的最小环境。

另外,可以把Java API类库中的Java SE API子集和Java虚拟这两部分统称JRE(Java Runtime Enviroment),JRE是支撑Java运行的标准环境。

时间: 2024-10-11 02:58:53

深入理解Java虚拟机 - Java体系的相关文章

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

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

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

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

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

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

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

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

Java 虚拟机-Java内存区域

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

Java虚拟机-java内存区域

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

Java体系介绍(深入理解Java虚拟机)

网络带来的挑战和机遇: 平台无关性.安全性和网络移动性,Java体系的这三方面共同使得Java和发展中的网络计算环境相得益彰 Java体系结构包括四个独立但相关的技术: Java程序设计语言 Java class文件格式 Java应用编程接口 Java虚拟机 1.Java虚拟机 Java虚拟机是一台抽象的计算机,其规范定义了每个Java虚拟机都必须实现的特征,但是给每个特定实现都留下了很多选择. Java虚拟机的主要任务是装在class文件并且执行其中的字节码 Java虚拟机由类装载器和执行引擎

对Java虚拟机理解

深入理解Java虚拟机 Java技术体系 Java体系分为四个平台 Java card 运行在小内存上的 Java ME 运行在手机上 Java SE 完整Java 核心api JavaEE 支持使用多层架构的企业 JVM自身的物理结构 Java 代码编译和执行的整个过程 Java 编译的过程 Java字节码执行的过程  Java 代码编译和执行有下面三个过程 Java 源码编译 类加载机制' 类执行机制 下面就分别对着三个过程进行详细的介绍 Java源码编译机制 分析输入符号表 注解处理 语义

理解Java虚拟机体系结构

1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Java虚拟机,它号称的"一次编译,到处运行"才能有所保障. 1.1 Java程序执行流程 Java程序的执行依赖于编译环境和运行环境.源码代码转变成可执行的机器代码,由下面的流程完成: Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行.Java程序的运行需要Java