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

最近看了《深入理解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异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值