
深入理解Java虚拟机
wjy320
这个作者很懒,什么都没留下…
展开
-
运行时数据区域
程序计数器:由于Java虚拟机的多线程是通过程序轮流切换并分配处理机执行时间的方式来实现的。同一时间,一个处理器智能执行一条线程中的命令。因此,为了线程切换后能恢复到正确的执行位置,每条线成都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。这个内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemory...原创 2014-03-12 09:46:31 · 85 阅读 · 0 评论 -
浅谈System.gc()垃圾收集
1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。 垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,...原创 2014-03-12 10:42:45 · 134 阅读 · 0 评论 -
判断对象是否存活的算法
许多教科书来判断对象师傅偶存活的算法是这样的:给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1;当引用失效时,计数器的值就减1;任何时刻计数器为0的对象就是不可能再被使用的。 上面这个算法叫做“引用计数算法”,实现简单,判定效率高昂,但是无法解决对象之间相互循环引用的问题。 例如: MyClass refere...原创 2014-03-12 11:15:36 · 179 阅读 · 0 评论 -
Java中的运行时常量池
运行时常量池(Runtime Constant Pool)是方法区的一部分。class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池(Constant Pool Table)用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存储到方法区的运行时常量池中。 Java语言并不要求常量一定只有在编译期才能产生,并非预置如Cl...原创 2014-03-12 15:08:49 · 127 阅读 · 0 评论 -
(转)Java之内存分析和String对象
Java之内存分析和String对象 Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中)。 堆(heap):存放所有new出来的对象。 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量...原创 2014-03-12 15:17:10 · 98 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转化解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载,连接和初始化过程都是在程序运行期间完成的。 ...原创 2014-03-13 17:06:18 · 102 阅读 · 0 评论