您的位置:首页 > 编程语言 > Java开发

JVM 内存基础概念之初识虚拟机与 Java 虚拟机运行时数据区

2016-01-26 17:23 681 查看


什么是虚拟机?什么是 Java 虚拟机?

虚拟机:是值模拟某种计算机体系结构,执行特定指令集的软件。提起虚拟机,可能大家第一印象是 Virtual Box、VMware 等系统虚拟机。但是 JVM 并不属于系统虚拟机,而是属于进程虚拟机。
进程虚拟机:进程虚拟机并不会完整的模拟一个操作系统的运行环境,而仅仅提供特定指令集的运行环境。Java 虚拟机就属于进程虚拟机。除了 JVM 之外,还有 Adobe Flash Player、FC 模拟器等等。
高级语言虚拟机:属于进程虚拟机的一种,特点是把特定指令集的范围进一步限定为高级语言。像 JVM 就是高级语言虚拟机。除此之外,还有 .NET CLR、P-Code 等。
Java 语言虚拟机:可以执行 Java 语言的高级语言虚拟机。Java 语言虚拟机并不一定就可以称为 JVM。要想称为 JVM 必须通过 Java TCK (Technology Compatibility Kit)的兼容性测试。
Java 虚拟机:必须通过 Java TCK 的兼容性测试的 Java 语言虚拟机才能被称为 JVM。JVM 并不一定要执行 Java 程序,它跟 Java 语言其实没有严格的相关,它只跟 Java 语言的编译格式:class 文件格式产生关联。 很多非 Java 语言,像 JRuby、Scala 等,它们也能运行在 Java 虚拟机上。目前业界的三大商用 JVM 有:Oracle HotSpot、Oracle JRockit VM、IBM J9 VM。
Oracle HotSpot 虚拟机:JDK 中所带的虚拟机。从 JDK 1.2 开始加入 Oracle JDK 的,在 JDK 1.3 开始成为 JDK 的默认实现,在 1.4 中成为唯一的虚拟机。

在本系列文章中,如果没有特殊说明,那么所有的虚拟机实现所指的都是 Oracle HotSpot 虚拟机。


Java 虚拟机运行时数据区

在《Java 虚拟机规范》中定义了若干个程序运行期间会使用到的存储不同类型数据的区域。有一些区域是全局共享的,随着虚拟机的启动而创建,随着虚拟机的退出而销毁。有一些区域是线程私有的,随着线程的开始和结束而创建和销毁。

运行时数据区域的划分如下图: 
 


图片来源来自搜图结果,侵删。地址:(http://www.cnblogs.com/z941030/p/5448453.html)

网上的文章,大多讲的是我们最常用到的两个区域:Java 堆 和 Java 虚拟机栈。而其他的却并没有讲解到。 

而通过这个图片,我们可以很清晰的看到,其实具体可以划分为如下五个区域:
程序计数器。
Java 堆。
Java 虚拟机栈。
本地方法栈。
方法区。

下面的文章我们再来仔细了解下这五个区域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: