
我读深入浅出JVM
cr459464757
这个作者很懒,什么都没留下…
展开
-
对象访问
Object obj = new Object();会发生了什么呢?简单说一下吧(估计大家都明白):1.Object obj 作为一个reference类型在栈的本地变量表中出现;2.new Object()在堆中形成一块存储object类型的实例数据;3.方法区中包含对象类型的数据(如类型,父亲类,方法,实现的接口)的地址信息(这部分估计很多娃都不晓得)。引用的定位方式:1.句柄方式;2原创 2013-10-25 17:31:35 · 386 阅读 · 0 评论 -
Java运行时数据区域
先上一个图,看看jvm运行时的数据区 可以看出堆和方法区域在不同线程中是共享的。 我们先来看看最为陌生的程序计数器,为什么他是线程非共享的呢?我们知道多线程是通过线程轮流切换来实现的,而且每一个内核只会运行一个线程指令,所以每一个线程都需要一个独立的程序计算器来记录。从上面的解释来看程序计算器的功能是当前线程所执行的字节码的行号标志器。在这里要声明的是计数器记录的是正原创 2013-10-25 16:49:23 · 582 阅读 · 0 评论 -
vm对死亡的定义
在进入正题前先看看回顾一下:程序计数器,虚拟机栈,本地方法栈三个区域随线程生灭,每一个栈帧内存分配也都是类结构确定下来是就已知的,当线程或者方法挂掉的时候就可以自动消亡。对于堆和方法区就比一样了,我们只有在运行时才知道会创建那些! 判断对象已死的算法: 引用计数算法:在对象中添加一个引用计数器,有引用时+1,引用失效是-1,为0时就不可能使用。在这里强调的是gc并不用这原创 2013-10-26 19:44:13 · 541 阅读 · 0 评论 -
vm 中新生代和老年代(网络上的收集)
由于现在收集器都是采用分代收集算法,堆被划分为新生代和老年代。新生代主要存储新创建的对象和尚未进入老年代的对象。老年代存储经过多次新生代GC(Minor GC)任然存活的对象。 具体定义:所谓的新生代和老年代是针对于分代收集算法来定义的,新生代又分为Eden和Survivor两个区。加上老年代就这三个区。数据会首先分配到Eden区当中(当然也有特殊情况,如果是大对象那么会直接放入到老原创 2013-10-27 19:28:53 · 1130 阅读 · 0 评论 -
JVM常量池
原创地址:http://www.cnblogs.com/wenfeng762/archive/2011/08/14/2137820.html 在jvm规范中,每个类型都有自己的常量池。常量池是某类型所用常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型、字段、方法的符号引用。之所以是符号引用而不是像c语言那样,编译时直接指定其他类型,是因为java是动态绑定的,只有转载 2014-03-14 14:46:24 · 342 阅读 · 0 评论 -
<clinit>()方法简述
今天看深入理解jvm是看到一个()方法不懂到底是什么意思网上搜索了一下得出了下面的一些结论。 1.()方法的定义: 在编译生成class文件时,会自动产生两个方法,一个是类的初始化方法, 另一个是实例的初始化方法。我个人认为可以简单的理解为由编译器自动收集类中的所有变量的赋值动作和静态语句块中的语句合并产生的,编译器收集的顺序是由语气在源文件中出现的顺序决定的,静态语句块中只能访原创 2014-03-14 15:39:31 · 2467 阅读 · 0 评论