首页 > 代码库 > java虚拟机和java内存区域概述

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

什么是虚拟机,什么是Java虚拟机

虚拟机

定义:模拟某种计算机体系结构,执行特定指令集的软件

系统虚拟机(Virtual Box、VMware),进程虚拟机

进程虚拟机

jvm、Adobe FlashPlayer、FC模拟器

高级语言虚拟机

JVM 、.NET CLR、P-Code

java语言虚拟机

可以执行Java语言的高级语言虚拟机。Java语言虚拟机并不一定就可以称为JVM,譬如: Apache Harmony

JavaTM虚拟机

必须通过Java TCK(Technology Compatibility Kit)的兼容性测试的Java语言虚拟机才能称为“javaTM虚拟机”

JavaTM虚拟机并非一定要执行“java”程序

业界三大商用JVM:Oracle HotSpot、Oracle Jrockit VM、IBM J9 VM

 

Oracle HotSpot虚拟机

最初由名为 “Longview Technologies” 的小公司开发,后被Sun公司收购。最初并非面向Java语言开发,而是面向Strongtalk语言。

HotSpot命名来自它的"热点代码探测"技术

从JDK1.2开始加入Sun(Oracle)JDK,在JDK1.3开始成为Sun(Oracle)JDK的默认实现,在1.4中成为唯一的虚拟机

在2006年底开始开源,由此建立的OpenJDK项目

 

共有设计,私有实现

本课程中涉及到的内存区域是在《Java虚拟机规范》(JVMS)中定义的概念模型,但是JVMS也同时声明了这些概念不约束虚拟机的具体实现,只是要求虚拟机实现的效果在外部看起来与规范描述的一致即可。

 

 Java运行时数据区

在《Java虚拟机规范》中定义了若干种程序运行期间会使用到的存储不同模型数据的区域。

有一些区域是全局共享的,随着虚拟机启动而创建,随着虚拟机退出而销毁。有一些区域是线程私有的,随着线程开始和结束而创建和销毁。

是所有Java虚拟机共同的内存区域概念模型

运行时数据区的划分

技术分享

 

 

 程序计数器(Program Counter Register)

一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空。

此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域

 

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