深入理解java虚拟机
weixin_50026488
这个作者很懒,什么都没留下…
展开
-
jvm垃圾收集器
一、Serial收集器 Serial曾经是新生代收集的唯一选择(jdk1.3.1之前),是个单线程收集器,在它进行垃圾收集的时候必须暂停其它所有的工作线程(stop the world),直到它工作结束。 优点:简单高效,在client模式下的虚拟机是个好选择。 二、ParNew收集器 parNew其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集器之外,控制参数,收集算法、stop the world、对象分配规则、回收策略都与Serial一样。 三、Parallel Scavenge收集原创 2020-09-22 16:41:37 · 96 阅读 · 0 评论 -
垃圾收集算法
一、标记清除算法 过程:首先标记出来所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象 缺点:效率问题,空间问题(大量不连续内存碎片,无法找到足够的连续空间,会启用另一个垃圾收集器) 二、复制算法 过程:将内存按容量分为大小相等的两块,每次只使用其中一块。当一块内存用完了,就将还存活着的对象复制到另一块内存上面,然后再把已使用过的内存空间一次清理掉。 缺点:将内存分为原来的一半,代价太大。 但实际上的虚拟机并不是按1:1的比例划分空间的,而是将内存划分为一块较大的eden空间和两块较小的Survi原创 2020-09-22 11:39:43 · 65 阅读 · 0 评论 -
自动内存管理机制
一、引用计数法 给对象添加一个引用计数器,每一个地方引用它,计数器值就+1;当引用失效时,计数器的值就-1;任何时刻计数器为0的时候都是不能使用的。 这种gc算法比较难解决循环引用的问题。 二、根搜索算法 通过一系列名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径成为引用链,当一个对象到GC Roots没有任何引用链相连(用图论的话说就是从GC Roots到这个对象不可达)时,则证明这个对象是不可用的。 虚拟机栈(栈帧中的本地变量表)中的引用对象 方法区中的类静态属性引用的原创 2020-09-21 17:56:22 · 140 阅读 · 0 评论 -
java内存区域
一、运行时的数据区域 二、程序计数器 它的作用可以看作是当前线程执行字节码的行号指示器,通过改变这个计数器的值来执行下一条需要执行的字节码指令,java虚拟机的多线程通过线程轮流切换并分配处理器执行时间,在任何时候,一个处理器只会执行一条线程中的指令,为了线程切换后能够回到正确的执行位置,每条线程都需要有一个独立的程序计数器。 如果线程执行的是一个java方法,那么计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器的值为空。 三、java虚拟机栈 java虚拟机栈原创 2020-09-18 15:11:29 · 103 阅读 · 0 评论