jvm知识学习
文章平均质量分 63
zwzsdy
升级打怪中...
展开
-
JVM——对象已死吗?(Java对象引用分析)
对象已死? 谈到JVM,就不得不提到他的自动内存管理,那么就离不开垃圾回收,那么,作为Java中,占据首要位置的对象,JVM如何确定它已经死亡? 或者说,何时GC将其回收? 现在主流的两个方式是:1.引用计数法 2.可达性分析算法 引用计数法 顾名思义,就是在对象每被引用一次,就将其自身用于计数的变量加一,当GC进行时,通过判断该变量是否等于0,从而决定是否回收。目前使用该方式的有Pyth...原创 2018-04-14 23:55:08 · 287 阅读 · 0 评论 -
JVM运行时数据区内存模型简单总结
数据区图解: 程序计数器 首先,它是一块分配的较小的内存空间,线程私有,作用类似于PC寄存器,单它仅仅是逻辑上的。 如果线程正在执行Java方法,那么计数器记录的为正在执行的虚拟机字节码的指令地址,如果为Native方法,计数器值为空。同时,它是唯一一个没有规定 OutOfMemoryError的区域 虚拟机栈 线程私有,毕竟每个线程都要执行独立的方法对吧。 它是描述Java...原创 2018-04-09 22:25:27 · 369 阅读 · 0 评论 -
JVM垃圾收集算法
标记-清除算法 算法核心思想很简单,就是对可回收对象进行标记,然后直接由垃圾收集器回收即可。如图,这就产生了一个问题,内存中的空间变得离散化,即内存碎片(对象的分配需要找到一片足够大小的连续内存空间,如果不足,还是会触发GC)。 复制算法 复制算法的核心就是,只使用一半内存用来分配对象,当使用的区域不足以分配时,复制算法将存活对象复制到预留的一半空间,并且是顺序排列的,然后清除本区域...原创 2018-04-15 23:18:57 · 153 阅读 · 0 评论 -
JVM垃圾收集器简述
补充几个概念: stop the world 指该收集器执行时,将阻塞一切线程 parallel 并行,可以多线程执行 concurrent并发,用户进程可以与垃圾回收同时执行 下面介绍新生代收集器 serial收集器 顾名思义,串行收集器,在该收集器工作时,将stop the world。 优点:简单高效(相对于其他单线程收集器) 缺点:stop the world ,单线...原创 2018-04-15 23:48:49 · 150 阅读 · 0 评论 -
内存分配与回收策略
对象优先分配在Eden 对于大多数情况来说,新生代优先在Eden区中分配,当Eden中内存不够时,会触发 MinorGC. 举个例子,当Eden区为8M,两个Survivor区,各1M(Hotspot虚拟机),那么新生代总的可用空间就是9M。 某个时刻,新生代已用内存6M(3个2M的对象),此时,新创建一个4M的对象,发现新生代可用内存不足,此时触发MinorGC,在G...原创 2018-04-22 15:01:31 · 138 阅读 · 0 评论 -
虚拟机类加载过程简述
类的生命周期 如图: 这些阶段并非严格进行区分,因为有些阶段执行时,同时还会执行下一阶段的某些功能。 加载 加载,即将类加载到虚拟机中,其实这一阶段是为了后面的所有阶段做准备。 因为后面的操作都是对于方法区或者堆等内存进行操作,只有加载才是对字节码文件进行操作。 这里主要执行3个步骤: 使用类加载器,通过全限定名来获取该类的二进制字节流。 将该字节码文件所代...原创 2018-04-22 16:32:34 · 515 阅读 · 1 评论 -
java类加载器及双亲委派模型
类加载过程 classloader 对于JVM来说,类加载器分为两类: 1.启动类加载器(bootstrap classloader) 2.其他类加载器 对于我们开发者来说,一般细分为四类: 1.启动类加载器(bootstrap classloader) 2.扩展类加载器(extclassloader) 3.应用类加载器(appclassloader) 4.自...原创 2018-03-26 12:55:25 · 186 阅读 · 0 评论