虚拟机JVM
御镜堂
Hello,Future.
I'm coming now.
展开
-
【虚拟机JVM】垃圾收集器(部分)
前段时间面试一家公司 面试官:JDK8中默认的垃圾回收机制是什么? 答:分代收集(分代不就是针对老年代和新生代有不同的回收方法吗?) 面试官:哼(冷笑了一下,还在看我) 答:。。。(无言以对,难道不是吗?) 以上是背景,刚刚又看了一遍垃圾回收机制和垃圾收集器,我才知道我没有错!!!那他为什么对我冷笑 ———————————————————————————————————————————...原创 2019-10-26 21:19:41 · 304 阅读 · 0 评论 -
【虚拟机JVM】堆里面的分区和各自的特点
新生代 新生代又可以进一步划分为一个Eden区和两个Survivor区,Eden是进行内存分配的地方,是一块连续的空闲内存区域,在里面进行内存分配速度非常快,因为不需要进行可用内存块的查找。新对象总是在Eden区中生成,只有经受住了一定的考验后才能顺利的进入到Survivor区中。把Survivor区划分为2块,也是也是为了满足垃圾回收的需要,因为在新生代中经历了回收未必就能进入老年代中。系统总...原创 2019-10-26 13:58:57 · 794 阅读 · 0 评论 -
【虚拟机JVM】常见的启动参数和常用的内存调试工具
JVM常见的启动参数 -Xms:设置堆的最小值 -Xmx:设置堆的最大值 -Xmn:设置新生代的大小 -Xss:设置每个线程的栈大小 -XX:NewSize:设置新生代的初始值 -XX:MaxNewSize:设置新生代的最大值 -XX:PermSize:设置永久代的初始值 -XX:MaxPermSize:设置永久代的最大值 -XX:SurvivorRatio:年轻代中Eden区...原创 2019-10-26 15:40:17 · 333 阅读 · 0 评论 -
【虚拟机JVM】内存泄露和内存溢出。
内存泄露 一般来讲:内存泄露主要有两种情况:一是在堆中申请的空间没有被释放;二是对象已不再被使用,但仍然还在内存中保留着。垃圾回收机制的引入可以有效的解决第一种情况;而对于第二种情况,垃圾回收机制则无法保证不再使用的对象会被释放。因此,Java语言中的内存泄露主要指的是第二种情况。 内存泄露的典型案例是一个没有重写hashCode和equals方法的key类在HashMap中保存的情况,最后会...原创 2019-10-26 12:58:35 · 364 阅读 · 0 评论 -
【JVM虚拟机】描述Java类加载器的工作原理及其组织结构(简述类加载过程)
Java类加载器的作用就是在运行时加载类。 Java类加载器基于三个机制:委托性、可见性和单一性。 1)委托机制是指双亲委派模型。当一个类加载和初始化的时候,类仅在有需要加载的时候被加载。假设你有一个应用需要的类叫做Abc.class,首先加载这个类的请求由Application类加载器委托给它的父类加载器Extension类加载器,然后再委托给Bootstrap类加载器。Bootstrap类...原创 2019-09-23 14:26:58 · 466 阅读 · 0 评论 -
【虚拟机JVM】JVM的内存布局/内存模型
程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码的指令,分支、循环、跳转、异常处理、线程恢复等基本功能都需要依赖这个计数器来完成。 由于Java虚拟机的多线程是通过线程轮流切换并分配异常处理器...原创 2019-08-19 19:23:03 · 168 阅读 · 0 评论 -
【虚拟机JVM】四种垃圾回收算法
标记-清除算法 标记-整理算法 复制算法 分代收集算法 1.标记-清除算法 算法核心思想: 分为标记-清除两个阶段,标记阶段标记处此次垃圾回收需要回收的对象,清除阶段一次性清除所有带标记的对象。 不足: 效率问题:标记和清除这两个过程的效率都不高 空间问题:标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行中需要分配较大...原创 2019-08-20 17:41:18 · 665 阅读 · 0 评论 -
【虚拟机JVM】如何判断对象是不是垃圾
引用计数法与可达性分析算法 Java堆中存放着几乎所有对象的实例,垃圾回收器在对堆进行垃圾回收前,首先要判断这个对象哪些还存活,哪些已经“死去”。判断对象是否已死有如下几种算法: 引用计数法 给对象增加一个引用计数器,每当有一个地方引用他时,计数器就+1;当引用失效时,计数器就-1;任何时刻计数器为0的对象就是不可能再次被使用的,即对象已“死”。 引用计数法实现简单,判定效率也比较高...原创 2019-08-20 19:58:55 · 490 阅读 · 0 评论 -
【虚拟机JVM】内存分配规则
对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。 大对象直接进入老年代(大对象是指需要大量连续内存空间的对象)。这样做的目的是避免在Eden区和两个Survivor区之间发生大量的内存拷贝(新生代采用复制算法收集内存)。 长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,...原创 2019-08-27 16:51:16 · 219 阅读 · 0 评论