java虚拟机
文章平均质量分 73
无柳先生
这个作者很懒,什么都没留下…
展开
-
Java内存区域的划分和介绍
Java虚拟机所管理的内存将包括一下几个运行时数据区域 程序计数器是一块较小的内存空间,它可以看作是当前线程执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计时器的值来选取下一条需要执行的字节码指令。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计时器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为线程私有的内存。 Native方法计...原创 2018-03-30 16:40:17 · 1639 阅读 · 0 评论 -
JVM堆——新生代,老年代,永久代,GC
JVM中的堆一般分为新生代,老年代,永久代。新生代存放新生的对象,占据堆的1/3空间,MinorGC(采用复制清除算法)进行垃圾回收。 新生代分 Eden、ServivorFrom、ServivorTo三个区。 Eden:新对象的出生地。当Eden区内存不足的时候,虚拟机将进行一次MinorGC。 ServivorTo:保留MinorGC过程中的幸存者。 ServivorFro...原创 2018-03-30 19:54:08 · 3316 阅读 · 0 评论 -
标记算法&引用
GC不是伴随着java而生的,它要比java久远。1960年诞生于MIT的Lisp是第一门真正使用内存分配和垃圾收集技术的语言。 Tips:java内存运行时区域的各个部分,其中程序计数器,虚拟机栈,本地方法栈3各区域随线程的生而生,灭而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。 Java堆和方法区是垃圾收集器所关注的内存区域。 垃圾收集器进行回收前,第一件事情就是...原创 2018-04-13 10:58:27 · 1261 阅读 · 0 评论 -
垃圾回收方法
回收方法区在方法区进行垃圾收集的“性价比”一般比较低。永久代的垃圾收集主要回收两部分内容:废弃常量和无用类。(字面量为例)常量池中的一个没有对象引用的常量,也没有其他地方引用了这个字面量,如果这时发生内存回收,而且必要的话,这个常量将会被系统清理出常量池。常量池中的其他类(接口)方法字段的符号引用与此类似。判定一个类是无用类的三个条件: 1、该类所有的实例都已经被回收,也就是java...原创 2018-04-13 11:05:29 · 376 阅读 · 0 评论 -
HotSpot的算法实现
枚举根节点 可达性分析:从GCRoots节点找引用链,可作为节点的主要为全局性的引用(常量或类静态属性)和执行上下文(栈帧中的本地变量表)中,但是现在很多应用的方法区就数百兆,如果要逐个检查这里面的引用,那么必然会消耗很多时间。 对执行时间敏感还体现在GC卡顿上,因为这项分析工作必须在一个确保一致性的快照中进行(在整个分析期间整个执行系统看起来就像冻结在某个时间点上,不可以出现分析过...原创 2018-04-13 11:10:19 · 347 阅读 · 0 评论 -
垃圾收集器
Serial收集器在jdk1.3.1之前是虚拟机新生代收集的唯一选择。 单线程,它只会使用一个CPU或一条收集线程完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,至到它收集结束。 它到现在依然是虚拟机运行在Client模式下的默认新生代收集器。 简单高效(与其他收集器的单线程比)对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾...原创 2018-04-13 11:12:04 · 119 阅读 · 0 评论