线程私有的程序计数器.虚拟机栈和本地方法栈随线程而生,随线程而灭.栈中的栈帧随方法的进入和退出有条不紊的入栈和出栈. 而Java堆和方法区因为需要多大内存.创建多少对象都是不确定的,因此这两个区域是垃圾回收的重点对象. 一.如何判断对象是否存活 1. 引用计数法 给每个对象添加一个引用计数器,有一个地方引用就+1,引用失效就-1.计数器为0,即该对象无法被访问. 优点:实现简单,判断效率高. 缺点:难以解决对象之间的循环引用问题. 2. 可达性分析法 通过一系列“GC Roots”的对象作为起始…
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理解Java虚拟机 >(周志明著)读书笔记. Java程序员一般都知道JVM中存在栈和堆的,并简单了解对象是在堆上分配的,这点从C/C++转过Java的程序员很容易想到.但Java由于其自身的特性,还有一些其他的内存区域,如下图所示: 程序计数器 程序计数器占用的内存空间不大,里面记录了各线程当前字节码的…
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们仍需要了解JVM垃圾回收机制,以便在Java程序运行时发生错误的时候可以快速定位,并解决. 内存模型图 线程共享区: 方法区(Method Area):线程共享,存储被JVM加载的类信息.常量.静态变量.编译器编译后的代码等数据. Java堆(Java Heap):线程共享,用于存储对象实例,是垃圾…
有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M..) /Users/baidu/Documents/Data/Interview/Java 全书共分为五大部分,围绕内存管理.执行子系统.程序编译与优化.高效并发等核心主题对JVM进行了全面而深入的分析  …
二 垃圾收集器与内存分配策略 1 JVM中哪些内存需要回收?     JVM垃圾回收主要关注的是Java堆和方法区这两个区域:而程序计数器.虚拟机栈.本地方法栈这3个区域随线程而生,随线程而灭,随着方法结束或者线程结束内存自然跟随着回收了,因此不需要过多考虑内存分配和回收的问题.   2 判断对象是否存活的算法     (1)引用计数算法             基本思路:给对象添加一个引用计数器,每当有一个地方引用它,计数器值加1:当引用失效时,计数器减1:任何时刻计数器为0的对象就是不可能再…
首先 强烈推荐周志明老师的这本书,真的可以说是(起码中文出版界)新手了解Java虚拟机必须人手一本的教科书!!!   第二部分自动内存管理机制 由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令.因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存.   与程序计数器一样,…
jvm内存模型如下图 垃圾回收: 方法区: 这部分的垃圾回收性价比低,一般不要求回收,暂认为是永久代 heap:新生代和永久代之分.永久代主要回收废弃常量和无用的类. 垃圾回收算法: 1. 标记-清除算法 标记判断: a) 该类所有实例都已经被回收,也就是heap中,不存在该类任何实例. b) 加载该类的ClassLoader已经被回收 c) 该类对应的java.long.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法. 问题:1. 效率不高 2.空间问题,造成大量不连续…
五 虚拟机字节码执行引擎   1 运行时栈帧结构     ---栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素.     ---栈帧中存储了方法的局部变量表.操作数栈.动态连接.方法返回地址和一些附加信息.     ---每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程.     ---在编译程序代码的时候,栈帧中需要多大的局部变量表.多深的操作数栈都已经完全确定了,并且写入到方法表的Code属性之中.    …
一.垃圾收集器总览 新生代:Serial. ParNew. Parallel Scavenge 老年代:CMS.Serial Old. Parallel Old 最新的:G1 并行和并发的区别: 并行:指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态. 并发:指用户线程和垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户线程在继续执行,而垃圾收集程序运行于另一个CPU上. 二.收集器 1. Serial收集器 单线程收集器.“Stop The World”(必须停止其他工作…
第一章 走近java 1. java 技术体系: java 程序设计语言 各种硬件平台上的java虚拟机 class 文件格式 java API 类库 来自商业机构或者开源机构的第三方java类库 jdk(java development kit):java程序设计语言.java虚拟机.java API类库,表示用于支持java开发的最小环境 jre(java runtime environment),java 运行时环境.   java me (mobile edition,移动版本) jav…