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 虚拟机栈。
本地方法栈。
方法区。
下面的文章我们再来仔细了解下这五个区域。
相关文章推荐
- springmvc 中使用poi导出excel
- 【Eclipse】--Eclipse之于高效编码,合则生分则死(一)
- java提高篇(二九)-----Vector
- Java提高篇(二八)------TreeSet
- Java反射获取类的属性值和方法
- spring-mvc最小化配置,最简单入门。
- Java提高篇(二七)-----TreeMap
- SpringMVC Web配置启动
- XML——文档类型定义(DTD-Document Type Definition)
- Eclipse验证码
- Java提高篇(二六)------hashCode
- Struts2中的OGNL详解
- java提高篇(二五)-----HashTable
- JAVA解析HTML
- 优秀eclipse插件
- java提高篇(二四)-----HashSet
- 多线程Runnable--Java
- java提高篇(二三)-----HashMap
- [013]Java连接Access数据库的三种方式
- Spring学习笔记(十六):无状态 bean和有状态bean