
JVM
水桶妖
这个作者很懒,什么都没留下…
展开
-
Java引用的四种类型
[color=brown][b]强引用[/b][/color]类似“A a = new A()”这类的引用,只要强引用还在,垃圾收集器永远不会回收被引用的对象[color=brown][b]软引用[/b][/color]用来描述一些还有用,但非必要的对象。在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之内,并进行第二次回收。如果这次回收还没有足够的内存,才会抛出OOM。...原创 2012-07-24 19:49:45 · 89 阅读 · 0 评论 -
对象访问的两种方式
1.使用句柄访问 如果使用句柄访问方式,Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。 2.使用直接指针访问 如果使用直接指针访问方式,Java堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,reference中存储的就是对象地址 这两种对象的访问方式各有优势,使用句柄访...原创 2012-08-09 20:57:35 · 158 阅读 · 0 评论 -
方法调用过程(二)
解释一个概念,宗量:方法的调用者和参数统称为方法的宗量。 前面讲了Java的分派调用,这里有一个更直观的例子来说明分派的过程,请看代码: public class Dispatch { static class QQ{} static class _360{} public static class Father{ public void hardCho...原创 2012-08-09 20:47:31 · 134 阅读 · 0 评论 -
方法调用过程(一)
方法的调用不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。 一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局的入口地址(入口地址相当于直接引用),需要在类加载期间甚至到运行期间才能确定目标方法的直接引用。 通过javap -verbose+类名 可以看到,J...原创 2012-08-09 20:39:36 · 212 阅读 · 0 评论 -
Class文件结构以及Class常量池数据类型
Class文件结构: Class常量池数据数据类型原创 2012-08-06 12:48:36 · 265 阅读 · 0 评论 -
栈帧、局部变量表、操作数栈
1.定义 栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联...原创 2012-08-06 12:42:54 · 1916 阅读 · 0 评论 -
类加载器和双亲委派模型
类加载器按照层次,从顶层到底层,分为以下三种: (1)启动类加载器(Bootstrap ClassLoader) 这个类加载器负责将存放在JAVA_HOME/lib下的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。启动类加载器无法被Java程序直接引用。 (2)扩展类加载器(Extension ClassLoader) 这个加载器负责加载...原创 2012-08-03 15:40:13 · 173 阅读 · 0 评论 -
Class文件加载过程
1.加载 (1)通过类的全限定名来获取此类的二进制字节流 (2)将此字节流代表的静态存储结构转化为方法区的运行时数据结构 (3)在Java堆中生成一个代表这个类的Class对象,作为方法区这些数据的访问入口 2.验证 (1)文件格式验证:验证字节流是否符合Class文件格式的规范,并且能被当前版本的虚拟机处理 是否以魔数0xCAFEBAB...原创 2012-08-03 15:36:28 · 295 阅读 · 0 评论 -
Java GC的过程
一.如何判断对象“已死”,目前主要有两种主流的算法 1.引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就+1,当引用失效时,计数器就-1,任何时候,计数器为0的对象就是不可能再被使用的。但是这种算法很难解决对象间互相循环引用的问题:A a = new A();A b = new A();b.instance = a;a.instance...原创 2012-07-24 20:09:19 · 133 阅读 · 0 评论 -
Java 内存模型
自己总结的Java内存模型原创 2012-07-24 19:55:43 · 72 阅读 · 0 评论 -
Java虚拟机的运行时优化
1.解释器与编译器 在部分虚拟机(Sun HotSpot)中,Java程序是最初通过解释器进行解释执行的,当虚拟机发现某个方法或者代码块运行特别频繁,就会把这些代码认定为"热点代码"(Hot Spot Code),为了提高热点代码的执行效率,在运行时,虚拟机会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Com...原创 2012-08-17 15:23:26 · 147 阅读 · 0 评论