JVM汇总--类加载/收集器
2019独角兽企业重金招聘Python工程师标准>>>
类加载:
自定义类加载器的核心在于对字节码文件的获取即重写 findClass 方法,
如果是加密的字节码则需要在该类中对文件进行解密。
最好不要重写loadClass方法,因为这样容易破坏双亲委托模式。
Class.forName()和ClassLoader.loadClass()区别
Class.forName()
:将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块;ClassLoader.loadClass()
:只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。Class.forName(name,initialize,loader)
带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。
内存设置控制参数
-Xms设置堆的最小空间大小。
-Xmx设置堆的最大空间大小。
-XX:NewSize设置新生代最小空间大小。
-XX:MaxNewSize设置新生代最大空间大小。
-XX:PermSize设置永久代最小空间大小。
-XX:MaxPermSize设置永久代最大空间大小。
-Xss设置每个线程的堆栈大小。
没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。
老年代空间大小=堆空间大小-年轻代大空间大小
分代收集算法
GC分代的基本假设:绝大部分对象的生命周期都非常短暂,存活时间短。
“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收。
垃圾收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现
CMS收集器 是一种以获取最短回收停顿时间为目标的收集器。
整个过程分为4个步骤,包括:
初始标记(CMS initial mark) “Stop The World”
并发标记(CMS concurrent mark)
重新标记(CMS remark) “Stop The World”
并发清除(CMS concurrent sweep)
初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快;
并发标记阶段就是进行GC Roots Tracing的过程;
而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。
由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行。
优点: 并发收集、低停顿
缺点: 产生大量空间碎片、并发阶段会降低吞吐量
参数控制:
-XX:+UseConcMarkSweepGC
使用CMS收集器
-XX:+ UseCMSCompactAtFullCollection
Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长
-XX:+CMSFullGCsBeforeCompaction
设置进行几次Full GC后,进行一次碎片整理
-XX:ParallelCMSThreads
设定CMS的线程数量(一般情况约等于可用CPU数量)
CMS是老年代收集器 新生代收集需要使用ParNew。
G1收集器有以下特点:(CMS收集器相比)
空间整合,G1收集器采用标记整理算法,不会产生内存空间碎片。分配大对象时不会因为无法找到连续空间而提前触发下一次GC。
可预测停顿,这是G1的另一大优势,降低停顿时间是G1和CMS的共同关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为N毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特征了。
新生代和老年代可以都使用G1收集器。
G1收集器时,Java堆的内存布局与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔阂了,它们都是一部分(可以不连续)Region的集合。
https://mp.weixin.qq.com/s/sFnMxEwJiYRjwTiBIjfcZg
转载于:https://my.oschina.net/u/3705388/blog/1794457
JVM汇总--类加载/收集器相关推荐
- 直通BAT必考题系列:深入剖析JVM之G1收集器、及回收流程、与推荐用例
金三银四马上到了,即将进入面试的高峰期.在BAT面试中,JVM基本都是必考的系列.你至少需要掌握JVM内存模型与JVM参数详细配置,JVM的4种垃圾回收算法.垃圾回收机制与总结,以及今天重点谈到的JV ...
- 怎样查看JVM的默认收集器
为什么80%的码农都做不了架构师?>>> 命令行中输入: java -XX:+PrintCommandLineFlags -version 输出结果如下: -XX:G1Conc ...
- JVM的GC回收算法、GC收集器以及内存分配策略
目录 •写在前面 •标记-清除算法 •复制算法 •标记-整理算法 •HotSpot上的算法实现保障 •GC收集器 •内存分配策略 •写在前面 JVM的垃圾回收算法.收集器以及内存分配策略放在一起了解和 ...
- 谈谈JVM GC 收集器
前言: 目前已经发展到jdk11了.很多资料上的垃圾收集器还停留在1.7以前.本文基于收集器的发展路线,从前到后汇总和简单分析一下JVM垃圾收集器的roadmap.本文暂且从对内存区管理和回收特色方面 ...
- jvm笔记2--垃圾收集器与内存分配策略
-XX:HeapDumpOnOutOfMemoryError 在内存溢出时输出日志记录内存情况. 垃圾收集器与内存分配策略 Java运行时,内存的各个部分中,程序计数器,虚拟机栈,本地方法栈3 ...
- 【JVM】类加载器:双亲委派机制、沙箱安全机制
· 双亲委派机制.沙箱安全机制是JVM中类加载器系统的相关术语 · 在这之前,应该先了解JVM类加载器系统的相关概念 一.类加载器基础知识 见下图1,java文件首先会被编译成class文件,clas ...
- Java 8 - 收集器Collectors_归约和汇总
文章目录 Pre 查找流中的最大值和最小值 需求:想要找出热量最高的菜和热量最低的菜 汇总 需求: 求出菜单列表的总热量 需求: 一次操作求出菜单中元素的个数,并得总和.平均值.最大值和最小值 (su ...
- JVM并行收集器ParNew、Parallel相关参数
并行收集器相关参数 -XX:+UseParallelGC Full GC采用parallel MSC (此项待验证) 选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集 ...
- 35.JVM 参数(JVM中的各种参数及含义、收集器相关、PrintGC等各种辅助参数)
35.JVM 参数 说下下面jvm参数含义: -server -Xms512m -Xmx512m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m - ...
最新文章
- 千言万语汇总的Mybatis-plus常用API全套教程
- LEB(Leading edge blanking)是什么
- [SQL] 外卖系统数据库设计
- 浅谈工作流引擎的几个关键因素
- JavaScript中String和JSON互换
- Java springcloud B2B2C o2o多用户商城 springcloud架构 (二十二)创建含有多module的springboot工程...
- LeetCode_每日一题(8月)
- 【Linux】- 守护进程的启动方法
- 微软4年后重登市值第一,纳德拉如何做到的?
- andriod studio 运行 无结果_无负压静音供水设备下篇一
- PRML-系列二之2.2
- 可缩放的思维导图_成就销售王者的23大流程,配思维导图,可直接学习收藏
- Leetcode: Excel Sheet Column Title
- Texture block combine command 纹理块合并命令
- Mybatis 图解
- 进化计算-遗传算法-入门级最好教程
- python安装whl文件的注意事项(windows系统)
- Java进阶之路~适配器设计模式amp;字符串方法
- Apollo_ReferenceLine smoother
- 《大话移动通信(第2版)》赠书活动名单公告