随笔分类 -  java虚拟机

学习java虚拟机的记录
摘要:内存模型: 为了屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发结果。 阅读全文
posted @ 2014-05-03 11:49 饮露秋林 阅读(98) 评论(0) 推荐(0)
摘要:第一种:Serial 收集器 单线程收集器,收集的时候会暂停所有工作线程。 第二种:ParNew 收集器 ParNew 收集器是Serial多线程版本。 第三种:Serial Old 收集器 老年代的Serial版本 第四种:CMS收集器 CMS(concurrent Mark Sweep) 收集器是以获得最短响应时间为目标的收集器。 其过程: ... 阅读全文
posted @ 2014-03-06 00:01 饮露秋林 阅读(227) 评论(0) 推荐(0)
摘要:第一种:标记清除算法 就是标记需要回收的对象,然后再统一回收被标记的对象。 缺点: 效率问题,标记和清除都费时。 空间问题,清除之后会产生碎片。假设再需要大的内存时,将无法分配足够大的空间。 第二种:复制算法 将内存分为两块,每次只使用其中的一块。一块内存用完了就将存活的对象复制到另一块去。然后... 阅读全文
posted @ 2014-03-04 00:19 饮露秋林 阅读(152) 评论(0) 推荐(0)
摘要:来源:出现在JDK 1.2 ,为了更好的控制对象的生命周期。 所以把对象的引用分为四种:强引用、软引用、弱引用、虚引用,这四种类型引用强度依次减弱。 强引用: 很平常的一种引用,垃圾回收器不会回收它,当没有内存使用时,它宁愿抛出OutOfMemoryError 异常。 Object object = new Object(); 软引用: 当内存不足的时候,就会回... 阅读全文
posted @ 2014-03-03 23:58 饮露秋林 阅读(119) 评论(0) 推荐(0)
摘要:垃圾回收(GC) 需要做三件事情: 哪些内存可以回收? 什么时候可以回收? 如何回收? Java 是通过根搜索法判定对象是否存活的。 基本思路:以“GC roots”的对象为起点。从这些节点开始向下搜索,搜索路过的路径成为“引用链” 当GC roots 没有任何引用链相连时,便可回收此对象。 可以作为GC roots 的对... 阅读全文
posted @ 2014-03-02 21:37 饮露秋林 阅读(172) 评论(0) 推荐(0)
摘要:JAVA 堆溢出 例子: VM options 设置为:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError package com.panpan.web.controller;import java.util.ArrayList;import java.util.List;/** * 内存溢出 * Created with Intel... 阅读全文
posted @ 2014-03-02 21:09 饮露秋林 阅读(399) 评论(0) 推荐(0)
摘要:如下一句代码:Object obj = new Object();可以用一图表明:对象的引用放到了栈 里,对象的实例存储在堆里。引用类型只规定了一个指向对象的引用。那它是如何通过这个引用找到在java堆中对象的实例呢?不同的虚拟机有不同的方式。主流的有两种:使用句柄在java堆中开辟了一块内存作为句柄池。reference 类型存储的是对象的句柄地址,句柄中包含了对象实例的指针。直接使用指针可以看到的是reference 中直接就存储了对象的地址。各自的优势比较: 一、句柄方式最大的好处就是在对象改变位置的时候(这种情况在垃圾回收时是常有的),reference的句柄地址不需要改变。只会更改句 阅读全文
posted @ 2014-03-02 18:47 饮露秋林 阅读(261) 评论(0) 推荐(0)
摘要:Java 在执行的过程中,会把它所管理的内存瓜分成不同的区域。程序计数器 当前线程执行字节码的行号指示器。所占内存小,是唯一一个java虚拟机中不会出现OutOfMemoryError 情况的区域。JAVA虚拟机栈 每个方法在执行的时候同时也会创建一个栈帧。用于操作局部变量表、操作栈、动态链接、方法出口等信息。 局部变量表:基本的数据类型(boolean、byte 、char 等),对象的引用。 两种情况会出现异常状况: 线程请求的栈深度 大于 虚拟机所允许的深度,将抛出StackOverflowError 异常; 如果线程请求可以动态扩展,当扩展无法申请到足够的内存时将抛出 OutOfMem 阅读全文
posted @ 2014-03-02 18:14 饮露秋林 阅读(188) 评论(0) 推荐(0)