类加载机制

双亲委派模型

双亲委派模型: 需要加载一个类,先委托父类加载,父类找父类,依次递归加载;加载不到再由自己加载

垃圾回收算法

JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区.

程序计数器、虚拟机栈、本地方法栈, 随线程来,随线程去,不用关心
堆区 使用引用计数法可达分析法进行回收
方法区 需要操作回收

a.标记-清除算法(Mark-Sweep)

b.复制算法(Copying)

c.标记-整理算法(Mark-Compact)

  • 该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例;
  • 加载该类的ClassLoader已经被回收;
  • 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

d.分析收集算法

  • 新生代Young Generation (Copying 快速腾空内存)[eden区:survivor0: survivor1=8:1:1]
  • 老年代 Old Generation(Mark-Compact)
  • 持久代Permanent Generation(也称方法区)

CMS G1

CMS(Concurrent Mark Sweep)收集器是基于“标记-清除”算法实现的。整个过程分为6个步骤,包括:

  1. 初始标记(CMS initial mark)
  2. 并发标记(CMS concurrent mark)
  3. 并发预清理(CMS-concurrent-preclean)
  4. 重新标记(CMS remark)
  5. 并发清除(CMS concurrent sweep)
  6. 并发重置(CMS-concurrent-reset)

G1收集器 基于“标记-整理”算法实现的收集器

参考:

JVM虚拟机和垃圾回收算法的更多相关文章

  1. JVM学习记录-垃圾回收算法

    简述 因为各个平台的虚拟机的垃圾收集器的实现各有不同,所以只介绍几个常见的垃圾收集算法. JVM中常见的垃圾收集算法有以下四种: 标记-清除算法(Mark-Sweep). 复制算法(Copying). ...

  2. 深入理解java虚拟机【垃圾回收算法】

    Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...

  3. JVM学习--(四)垃圾回收算法

    我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. stop the world 在介绍垃圾 ...

  4. JVM中的垃圾回收算法GC

    GC是分代收集算法:因为Young区,需要回收垃圾对象的次数操作频繁:Old区次数上较少收集:基本不动Perm区.每个区特点不一样,所以就没有通用的最好算法,只有合适的算法. GC的4大算法 1.引用 ...

  5. @JVM新一代的垃圾回收算法

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...

  6. Java虚拟机之垃圾回收算法思想总结

    1.引用计数法 这是个比较古老而经典的垃圾回收算法,其核心就是在对象被其他所引用的时候计数器加1,而当引用失去时减1.这个方法有非常严重的问题:无法此话有理循环引用的情况,还有就是每次进行加减操作比较 ...

  7. java虚拟机之垃圾回收算法

    标记-清除算法: 这是最基础的,就是之前所讲的两次标记,首先标记出所有 需要回收的对象,然后进行统一清除, 这有两缺点:一是效率低,标记和清除(开启低优先级进行回收)都是低效率的.第二是空间问题,标记 ...

  8. 【JVM】JVM中的垃圾回收算法

    1.标记 -清除算法 "标记-清除"(Mark-Sweep)算法,如它的名字一样,算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收 ...

  9. 谈谈JVM垃圾回收机制及垃圾回收算法

    一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理.由于有个垃圾回收机制 ...

随机推荐

  1. Collections算法类

    Collections类定义了一系列用于操作集合的静态方法. 常用方法: 1.sort():排序(默认是升序排列,降序实现方法) 如果ArrayList的泛型指定为String int等类型,可以通过 ...

  2. 关于配置ssh免密码登录后,仍提示输入密码

    一.在A端创建密钥对: [root@A ~] -P '' 二.如果B机器没有.ssh和authorized_keys文件则创建这个文件夹和文件先,创建后要chown改成当前用户的所属者,其次也要改: ...

  3. python3.4中自定义数组类(即重写数组类)

    '''自定义数组类,实现数组中数字之间的四则运算,内积运算,大小比较,数组元素访问修改及成员测试等功能''' class MyArray: '''保证输入值为数字元素(整型,浮点型,复数)''' de ...

  4. Jmeter二次开发代码(2)

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  5. java学习——JDK1.8接口和实现类

    Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...

  6. 开发过程中,ps要做的事情

    修改图片的分片率 把背景改为透明的 把一个图片的颜色要一下

  7. Webstorm的一些常用快捷键

    ctrl+/ 单行注释ctrl+shift+/块注释Ctrl+X 删除行Ctrl+D 复制行Ctrl+B 快速打开光标处的类或方法Ctrl+F 查找文本Ctrl+R 替换文本ctrl+shift+ + ...

  8. python3使用ctypes在windows中访问C和C++动态链接库函数示例

    python3使用ctypes在windows中访问C和C++动态链接库函数示例 这是我们的第一个示例,我们尽量简单,不传参,不返回,不访问其他的动态链接库 一 测试环境介绍和准备 测试环境: 操作系 ...

  9. feign多文件上传

    参考地址:https://www.cnblogs.com/standup/p/9090113.html https://www.cnblogs.com/standup/p/9093753.html 1 ...

  10. StringBuilder的常用方法

    转自:https://www.cnblogs.com/jack-Leo/p/6684447.html 在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符 ...