类执行机制JVM基于栈体系结构来执行class字节码,线程被创建后,产生程序计数器(PC)和栈(Stack)PC存放下一条执行的指令在方法内的偏移量,Stack存放一个栈帧,每个栈帧对应每个方法的每次调用,栈帧中存放局部变量和操作数栈 栈的结构如下图: JVM内存结构Java虚拟机规范规定的ja.....
分类:
其他好文 时间:
2015-06-23 21:32:09
阅读次数:
240
所谓规范,即指由很多人同时遵守的行为或理论。java的规范并不是指其中一种,而是有很多种,比如java编码规范,java命名规范,java虚拟机规范等等,甚至于一个编码规范都有很多种,不同的公司、组织、个人等等可能各不相同。java标准由于java是有SUN公司发明的,默认是由SUN公司控制具体的标...
分类:
编程语言 时间:
2015-06-05 00:41:39
阅读次数:
148
---恢复内容开始---参考文献:深入理解Java虚拟机 周志明《Java虚拟机规范SE 7版》规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。如图:程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示...
分类:
编程语言 时间:
2015-05-19 00:26:51
阅读次数:
199
很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此。
永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。
先来说说方法区内常量池之中...
分类:
其他好文 时间:
2015-05-05 22:02:42
阅读次数:
157
本文转自:http://www.cnblogs.com/chen77716/archive/2010/06/26/2130807.html最近因项目存在内存泄漏,故进行大规模的JVM性能调优,现把经验做一记录。一、JVM内存模型及垃圾收集算法1.根据Java虚拟机规范,JVM将内存划分为:New(年...
分类:
其他好文 时间:
2015-05-03 15:50:13
阅读次数:
128
上图是一张Java运行时的内存分布图,可知虚拟机内存都有发生OutOfMemoryError(下文称 OOM)异常的可能,作为一个合格的Java开发人员,我们应该做到的是:(1)第一,通过代码验证 Java 虚拟机规范中描述的各个运行时区域储存的内容;
(2)第二,遇到内存溢出的时候,应该可以找打具体的位置,并进行合理的解决;下边就聊一下 OOM:一、Java 堆溢出我们知道Java 堆用于储存对...
分类:
编程语言 时间:
2015-04-14 19:47:14
阅读次数:
216
一、在 Java 虚拟机规范中,对虚拟机栈这个区域规定了两种异常状况:(1)如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError 异常;
(2)如果虚拟机栈可以动态扩展(当前大部分的 Java 虚拟机都可动态扩展,只不过 Java 虚拟机规范中也允许固定长度的虚拟机栈),当扩展时无法申请到足够
的内存时会抛出 OutOfMemoryError 异常。
(3)与...
分类:
编程语言 时间:
2015-04-14 19:45:14
阅读次数:
282
Java虚拟机规范中试图定义一种java内存模型(java Memory Model,jmm)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的内存访问效果。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量...
分类:
编程语言 时间:
2015-04-11 17:38:52
阅读次数:
151
Java 虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种版本虚机执行引擎的统一外观(Facade)。在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至还可能会包含几个不同级别的编译器执行引擎。...
分类:
其他好文 时间:
2015-04-10 09:36:29
阅读次数:
225
JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途、创建和销毁时间。根据《Java虚拟机规范》,JVM包括下列几个运行时数据区域,如下图所示:其中红色部分是线程私有的,即每个线程各自都有自己的一份。绿色部分是各个线程共享的。1.PC寄存器(The pc Register)(1...
分类:
编程语言 时间:
2015-04-10 01:12:14
阅读次数:
477