关闭

《深入理解Java虚拟机》笔记一

标签: jdk虚拟机
324人阅读 评论(0) 收藏 举报
分类:

最近看了《深入理解Java虚拟机》,对java的了解多了些。提到java,脑子里的第一反应最起码不再是new class、加载包了。但更深的东西不敢说吸收了多少,同时也不是为了立志进行java虚拟机开发,只求多读几遍、逐步明智。

《一、Java技术体系》
1,传统意义的Java技术体系

传统意义的Java技术体系包括:Java程序设计语言、各种Java虚拟机、Class文件格式、Java API类库、第三方Java类库。

个人理解为,虚拟机只管执行Class文件格式的东西,各种类库即是主要是封闭好的常用class文件。Java程序设计语言方面的规范是供人们进行使用而最终开发生

成.class文件。
2,JDK和JRE

把Java程序设计语言、Java虚拟机、Java API这三部分称之为JDK(Java Development Kit,java开发组件),其为支持Java开发的最小环境。把Java SE API子集和Java虚拟机这二部分称之为JRE(Java Run Environment,JAVA运行环境),其为支持Java程序运行的标准环境。

从字面理解为,JDK就是一个最小单位的开发环境,而JRE就是一个最小单位的Java程序运行环境。

3,按照服务的领域划分
 有时以JDK代替整个Java技术体系,按照技术所服务的领域可划分为4个平台:Java Card(小内存设备上,java一开始是面向嵌入式开发的),Java ME( Micro Edition,面向移动终端的开发,如手机),JavaSE(Standard Edition,面向桌面级应用开发),JavaEE(Enterprise Edition,面向多层架构的企业应用开发)。

大学里java路线的学习,基本上是按照这个划分进行学习的:首先java基础学习,即针对JavaSE的深层次;后来学习jsp,struts,spring等,即针对JavaEE的学习。 

《二、Java运行时数据区》
此部分就是一个简短摘抄。虚拟机就是虚拟机,但是学过计算机组成原理的话,则对这部分的概念学习并不太难。整体结构如图:

1,程序计数器。当前线程所执行的字节码的行号指示器:如果线程正在执行一个Java方法,则记录的是正在执行的虚拟机字节码指令地址;如果正在执行的是Native方法,则计数器值为空(undefined)。此内存区域是唯一一个Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
2,虚拟机栈。与程序计数器一样,VM栈的生命周期也是与线程相同。VM栈描述的是Java方法调用的内存模型:每个方法被执行的时候,都会同时创建一个帧(Frame)用于存储本地变量表、操作栈、动态链接、方法出入口等信息。每一个方法的调用至完成,就意味着一个帧在VM栈中的入栈至出栈的过程。
3,本地方法栈。本地方法栈与VM栈所发挥作用是类似的,只不过VM栈为虚拟机运行VM原语服务,而本地方法栈是为虚拟机使用到的Native方法服务。它的实现的语言、方式与结构并没有强制规定,甚至有的虚拟机(譬如Sun Hotspot虚拟机)直接就把本地方法栈和VM栈合二为一。和VM栈一样,这个区域也会抛出StackOverflowError和OutOfMemoryError异常。
4,方法区。方法区中存放了每个Class的结构信息,包括常量池、字段描述、方法描述等等。VM Space描述中对这个区域的限制非常宽松,除了和Java堆一样不需要连续的内存,也可以选择固定大小或者可扩展外,甚至可以选择不实现垃圾收集。
5,堆。Java堆是被所有线程共享的,在虚拟机启动时创建。Java堆的唯一目的就是存放对象实例,绝大部分的对象实例都在这里分配。
6,直接内存。直接内存并不是虚拟机运行时数据区的一部分,它根本就是本机内存而不是VM直接管理的区域。但是这部分内存也会导致OutOfMemoryError异常出现。
    在JDK1.4中新加入了NIO类,引入一种基于渠道与缓冲区的I/O方式,它可以通过本机Native函数库直接分配本机内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显着提高性能,因为避免了在Java对和本机堆中来回复制数据。
    显然本机直接内存的分配不会受到Java堆大小的限制,但是即然是内存那肯定还是要受到本机物理内存(包括SWAP区或者Windows虚拟内存)的限制的,一般服务器管理员配置JVM参数时,会根据实际内存设置-Xmx等参数信息,但经常忽略掉直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),而导致动态扩展时出现OutOfMemoryError异常。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33644次
    • 积分:740
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:3篇
    • 译文:0篇
    • 评论:8条
    最新评论