![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 55
沉鱼一梦
纸上得来终觉浅
绝知此事要躬行
展开
-
G1收集器
G1 1、原理 分区算法将整个堆空间划分成连续的不同小区间。每一个小区间都独立使用,独立回收。这种算法的好处是可以控制一次回收多少个小区间 2、详细 G1(Garbage First) ,优先处理垃圾多的内存块 理论上和其他收集器一样将内存分为Eden,suivivor,Old三类 G1收集器将内存分为3类,当并不是像普通GC一样的三块大内存,而是分为很多小块(Region),每一个小块成为E,S,O 3、分成块的原因 将三类分成小块的原因是可以让垃圾回收工作 彻底并行化 由于原创 2021-09-25 12:50:55 · 416 阅读 · 0 评论 -
CMS收集器
CMS 并发标记清除器 1、过程 初始标记:标记一下GC Roots 能直接关联的对象,速度快 并发标记: 进行GC Roots Tracing , 标记全部的垃圾对象,耗时长 重新标记: 修改并发标记的产生的垃圾对象,耗时较短 并发清除:使用标记-清除算法清除垃圾,耗时较长 初始标记和重新标记时会停止用户线程的,并发标记和并发清除是用户线程和gc线程并行执行 2、CMS回收停顿几次 2次 以最少的STW,找出要清理的垃圾 3、为什么要STW 如果不暂停用户线程,就会不断的产生垃圾,永远也清理不玩 采用原创 2021-09-25 02:54:18 · 483 阅读 · 0 评论 -
垃圾收集器
垃圾收集器 1、Serial -XX:+PrintCommandLineFlags 单线程,会停止用户线程 -XX:+UseSerialGC 收集时会停止用户线程,单线程收集,适合单核CPU 2、ParNew 相当于serial的多线程版本,适合多核cpu -XX:+UseParNewGC -XX:+UseParllelGCThreads 限制线程数量,默认开启和cpu数据相同的线程数 3、Parllel Scavenge 吞吐量优先的回收器 Parllel 收集器达到吞吐量优先的目的 高吞吐量可以高原创 2021-09-24 21:26:55 · 428 阅读 · 0 评论 -
GC 回收算法
GC回收算法 Garbage Collection 以下简称 GC JVM调优的目的就是减少GC,减少STW(stop the word) 1、GC的区域 GC主要的区域是堆和方法区 stack 、pc、Native Method 的生命周期和线程的生命周期一致,线程结束,内存就会被回收 堆和方法区的生命周期是JVM的,需要关注何时被回收 2、判断对象存活的标准 2.1 引用计数法 在对象头维护着一个 counter 计数器,对象被引用一次则计数器 +1;若引用失效则计数器 -1。当计数器为 0 时,就认为原创 2021-09-23 15:22:42 · 638 阅读 · 0 评论 -
对象的创建过程
对象实例化 1、对象创建方式 new Class的newInstance constructor的newInstance clone() 反序列化 1,2,3会调用构造方法,4,5不会调用构造方法 2、创建对象的步骤 判断对象对应的类是否被加载,链接,初始化 为对象分配内存空间(如果内存堆规整----指针碰撞方法,如果内存堆不完整-空闲列表法),内存堆是否完整是根据垃圾回收算法和垃圾收集器决定的 处理并非安全问题(堆是线程共享的,线程安全问题)解决方案: 1、CAS失败重试保证原子性 2、TLAB原创 2021-09-23 14:39:55 · 1263 阅读 · 0 评论 -
堆分代的原因
为什么要将堆分代 分代的理由是优化GC性能 如果没有分代,会将所有的对象都放在一块,GC时找哪些对象没有用的时候,会对堆的所有区域进行扫描,很多对象是朝生夕死,如果分代的话,把新建的对象放到某一地方,当GC时先把这块存储朝生夕死的区域进行回收,这样会腾出很大的空间 ...原创 2021-09-22 22:40:32 · 74 阅读 · 0 评论 -
JVM 运行时数据区
JVM运行时数据区域 1、线程不共享 1.1 程序计数器(PC) PC是运行时数据区域最快的一个区域,是唯一一个不会发生OOM的区域 生命周期和线程的生命周期相同,不存在垃圾回收 作用: 存放下一条指令的地址,用于实现流程控制 多线程下,保存该线程执行的位置,用于线程切换后回到原来的位置 1.2 栈(Stack) 堆管存储,栈管运行 一个方法的执行和结束,就是一个栈帧入栈和出栈的过程 栈存放栈帧(局部变量+操作数栈+动态链接+方法的放回地址) 生命周期和线程一致 栈异常:如果栈的大小是固定的,在编译时原创 2021-09-22 22:32:01 · 463 阅读 · 0 评论 -
JVM-类加载器
JVM-类加载器 尚硅谷学习视频 JVM实现跨平台,运行字节码文件 一次编译导出运行,自动内存管理,不需要程序员手动进行内存管理 JVM与操作系统打交道,不和计算机硬件交互 1、类加载器 类加载器是负责将编译后的class文件加载,给执行引擎执行,临时存放的区域就是运行时内存区域 类加载器由4种组成 启动类加载器(Bootstrap ClassLoader) 由C++语言编写,用于加载核心类库(JAVA_HOME/jre/lib),不继承ClaassLoader类 扩展类加载器(Extension Cl原创 2021-09-22 22:00:54 · 69 阅读 · 0 评论