JVM
VRival
这个作者很懒,什么都没留下…
展开
-
java内存结构
java内存模型与java内存结构Java内存模型与Java内存结构是两个不同的概念。当讨论到多线程中,首先想到的是java内存模型(参考我之前的博客java内存模型)。java内存结构分析下图为java内存结构。 java堆java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例(ne...原创 2018-11-10 16:13:01 · 251 阅读 · 0 评论 -
从虚拟机的角度看java对象的创建
一、前言创建对象有多种方式,最直观的方式就是通过new关键字创建对象。通过new创建的对象存储在java的堆中。二、对象的创建过程java创建过程要经过下图的6个步骤,我们所能看到的是new 类名和调用对象的初始化方法,中间的四个是虚拟机内部所执行的,对于开发者来讲它屏蔽了。将分配的内存初始化为零值就是创建完对象后,基本类型都有默认值,抽象数据类型默认值为null。Init方法...原创 2018-11-10 17:40:28 · 212 阅读 · 0 评论 -
判断java对象是否是垃圾对象的两种方法
前言判断对象为垃圾对象的方法为:引用计数法和可达性分析法。Object object = new Object(); // 不是垃圾对象object = null; // 此时为垃圾对象System.gc(); // 提示给gc进行回收垃圾,只是提示而已,不代表立即进行回收finalize() ...原创 2018-11-10 18:33:18 · 3015 阅读 · 0 评论 -
垃圾收集器
Serial收集器(一般用于客户端)串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩(整理);垃圾收集的过程中会Stop The World(服务暂停)。一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。特点:CPU利用率最高,停顿时间即用户等待时间比较...原创 2018-11-13 18:06:40 · 298 阅读 · 0 评论 -
垃圾回收机制策略—(标记清除算法)
概念该算法主要有两个阶段。1. 标记阶段:找到所有可访问的对象,做个标记2. 清除阶段:遍历堆,把未被标记的对象回收图示一般是根据可达性分析法把垃圾对象标记起来,然后在进行清除。应用场景:该算法一般应用于老年代,因为老年代的对象生命周期比较长。两大问题:效率问题,空间问题。内存区域会出现越来越多的不连续区域(碎片化),这就导致当我们分配一个大空间的时候,空间不连...原创 2018-11-12 16:00:54 · 1482 阅读 · 0 评论 -
垃圾回收机制策略二(复制算法)
概念解决标记清除算法的效率问题复制算法主要针对java堆(新生代)图示反复执行这个过程,虽然效率问题解决,但出现新的问题。内存区域只用一半,导致严重浪费为了解决浪费,我们把新生代分为三部分。如果Eden不够了,会使用Survivor。这个Survivor类似于上图中的两个空间,上图中的两个空间都是Survivor。这样使用的话内存不会浪费太多,始终有90%的空间是可以用...原创 2018-11-12 16:47:55 · 412 阅读 · 1 评论 -
垃圾回收机制策略三(标记整理算法)
标记整理算法概念标记整理算法也叫标记压缩算法。由名字就可以看出先标记在整理,也就是第一个过程和标记清除算法的第一个过程一样。然后是整理,最后在清除。也可以叫做标记-整理-清除算法。标记整理算法在标记清除算法之上解决内存碎片化(删不干净)。针对老年代进行回收的,也就是针对回收效率不高,回收的垃圾较小的情况。标记整理算法图示 清除(红色)的向右边去,不用清除的向左边去,最后清除...原创 2018-11-12 17:11:27 · 2574 阅读 · 0 评论 -
垃圾回收机制策略四(分代收集算法)
分代算法概述堆内存分为新生代和老年代,针对新生代和老年代不同的特点就采用分代收集算法就可以,就是说分代收集算法根据内存的分代选择不同的垃圾回收算法,针对内存回收率比较高的内存区域(比如新生代)采用复制算法,内存回收率比较低的(比如老年代)采用标记-整理算法。新生代对象朝生夕死,对象数量多,只要重点扫描这个区域,那么就可以大大提高垃圾收集的效率。另外老年代对象存储久,无需经常扫描老年代,避免...原创 2018-11-12 17:40:45 · 531 阅读 · 0 评论