
jvm
文章平均质量分 55
欧皇小德子
这个作者很懒,什么都没留下…
展开
-
JVM基础 -> JVM参数有哪些?
JVM参数有哪些?1. 堆参数-Xms: 初始化堆内存-Xmx: 最大堆内存-Xmn: 设置新生代内存,剩余的为老年代的2. 回收器参数-XX:Use收集器名称SerialGC丶ParallerGC丶ParallerOldGC丶ConcMarkSweep丶G1GC原创 2022-02-26 17:06:30 · 169 阅读 · 0 评论 -
JVM基础 -> 三⾊标记
三⾊标记三⾊标记:是⼀种逻辑上的抽象,是一种分析工具,理解可达性分析法是怎么分析对象是否可以被回收用的。将每个内存对象分成三种颜⾊:⽩⾊:⾃⼰未标记完。灰⾊:⾃⼰标记完了,但是成员变量还没有完全标记完。⿊⾊:表示⾃⼰和成员变量都已经标记完毕。大致步骤开始之前,将所有对象都标记为白色分析开始,将GC roots对象标记为黑色,黑色的下一个会被染色灰色,表示下次分析分析到灰色,将灰色变成黑色,将灰色的下一个染成灰色以此类推,知道走完所有引用链,扫描完原创 2022-02-26 16:58:55 · 452 阅读 · 0 评论 -
JVM基础 -> G1垃圾收集器
说说G1垃圾收集器G1概览G1 GC 全称是Garbage First Garbage Collector,垃圾优先垃圾回收器,以下简称G1。G1是HotSpot JVM的短停顿垃圾回收器。其实关于G1的论文早在2004年就有了,但是G1是在2012年4月发布的JDK 7u4中才实现。从长期来说,G1旨在取代CMS(Concurrent Mark Sweep)垃圾回收器。G1从JDK9开始已经作为默认的垃圾回收器。如果对于应用程序来说停顿时间比吞吐量更重要,G1是非常合适原创 2022-02-26 16:13:58 · 450 阅读 · 0 评论 -
JVM基础 -> CMS垃圾收集器
CMS收集器CMS全称Concurrent Mark Sweep,是一款并发的、主要使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,在初始化阶段会导致STW。这里有一个重点: 主要标记-清除算法的垃圾回收器不是标记-整理算法 -> 说明会出现很多内存间隙,也就是内存碎片其实CMS会根据一个系统参数判定多少次垃圾回收之后执行不一样的FullGCFullGC停下当前所有的用户线程,开启单线程Serial收集器对于老年代的内存碎片进行整理,使用的标记-整理算法。不再推原创 2022-02-25 19:46:41 · 893 阅读 · 0 评论 -
JVM基础 -> GC分代: MinorGC MajorGC FullGC Mixed GC
GC分代: MinorGC MajorGC FullGC Mixed GCMinorGC 也叫新生代GC:发生在新生代的垃圾回收,因为新生代的特点,MinorGC非常频繁,且回收速度比较快,每次回收的量也很大。注意: 新生代GC是一个形容词例如,你要打扫一下卧室垃圾,卧室GC是一个形容词,利用什么打扫,用什么方式是另一个问题新生代GC完成GC,用指定好的垃圾回收器,垃圾回收器会有自己的回收算法当然,MinorGC的垃圾回收器一定是用复制算法,他没有别的算法的选择MajorGC原创 2022-02-25 17:58:03 · 636 阅读 · 0 评论 -
Java基础 -> GC日志分析
GC日志分析GC日志是一个很重要的工具,它准确记录了每一次的GC的执行时间和执行结果,通过分析GC日志可以调优堆设置和GC设置,或者改进应用程序的对象分配模式,开启的JVM启动参数如下:-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps常见的Young GC、Full GC日志含义如下:![]](https://img-blog.csdnimg.cn/9003961e884e41d09原创 2022-02-25 17:54:45 · 475 阅读 · 0 评论 -
JVM基础 -> JVM有哪些垃圾回收器?
JVM有哪些垃圾回收器?并不是都要去学,更多的都是历史收集器,被淘汰了的只需要了解一下现在和上一个阶段使用的收集器即可第一阶段: Serial (串行) 收集器 -> 时间在JDK1.3左右新⽣代(Serial—复制算法) ⽼年代(SerialOld—标记-整理算法) -> 开启配置如下 ↓-XX:+UseSerialGC第二阶段: Parallel (并行) 收集器 -> JDK 6中才开始提供,JDK 6中默认使用Parallel收集器也称吞吐量收原创 2022-02-25 17:51:02 · 145 阅读 · 0 评论 -
JVM基础 -> 什么是STW?
什么是STW?STW: Stop-The-World: 是在垃圾回收算法执⾏过程当中,将JVM内存冻结丶应用程序停顿的⼀种状态。在STW 状态下,JAVA的所有线程都是停⽌执⾏的 -> GC线程除外一旦Stop-the-world发生,除了GC所需的线程外,其他线程都将停止工作,中断了的线程直到GC任务结束才继续它们的任务。STW是不可避免的,垃圾回收算法执⾏一定会出现STW,我们要做的只是减少停顿的时间GC各种算法优化的重点,就是减少STW(暂停),同时这也是JVM调优的重点。原创 2022-02-23 21:54:01 · 14609 阅读 · 0 评论 -
JVM基础 -> JVM有哪些垃圾回收算法?
JVM有哪些垃圾回收算法?可达性分析法标记清除算法拷⻉算法标记压缩算法分代收集算法垃圾回收会经历两个阶段:标记可回收对象阶段 -> 可达性分析法垃圾清除阶段 -> 标记清除算法 拷⻉算法 标记压缩算法 分代收集算法标记可回收对象阶段标记可回收对象阶段使用的算法是可达性分析法可达性分析法: 从 GC Roots 开始向下搜索,搜索所⾛过的路径称为引⽤链。当⼀个对象到 GC Roots 没有任何引⽤链相连时,则证明此对象是不可⽤的,那么虚拟机就判断是可回原创 2022-02-23 18:08:21 · 404 阅读 · 0 评论 -
JVM基础 -> ⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?
⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?⾸先类加载器把字节码⽂件内容加载到⽅法区,当然类加载器这中间用双亲委派机制加载然后再根据加载完方法区中的类信息在堆区为对象分配内存丶初始化零值丶设置对象头丶执行 init 方法分配内存: 确定大小的内存从 Java 堆中划分出来初始化零值: 将分配到的内存空间都初始化为零,这样对象只定义,不初始化也可以用设置对象头: 对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等执行 init 方法: 最后就是原创 2022-02-22 23:52:45 · 907 阅读 · 0 评论 -
Java基础 ->什么是Java字节码?采⽤字节码的好处是什么?
什么是Java字节码?采⽤字节码的好处是什么?扩展名为.class的⽂件就是Java字节码Java字节码通过jvm虚拟机解释,同一个Java字节码不同的jvm执行路线,生成不同平台的⼆进制机器码,同一份代码可以跨平台使用Java中的编译器和解释器:Java中引⼊了虚拟机的概念,即在机器和编译程序之间加⼊了⼀层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序⼀个的共同的接⼝。编译程序只需要⾯向虚拟机,⽣成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的⼆进制机原创 2022-02-21 17:52:47 · 998 阅读 · 0 评论 -
JVM基础 -> Java中有哪些类加载器? 类加载器工作原理?
Java中有哪些类加载器? 类加载器工作原理?JDK⾃带有三个类加载器:bootstrap ClassLoader、ExtClassLoader、AppClassLoader。BootStrapClassLoader(引导类加载器):根类加载器,依赖于底层操作系统,由C编写而成默认负责加载jre\lib⽂件夹下的jar包和class⽂件。负责加载虚拟机的核心类库,如java.lang.*。Object类就是由根类加载器加载的。ExtClassLoader(标准扩展类加载器)原创 2022-02-22 16:34:21 · 2023 阅读 · 0 评论 -
JVM基础 -> 说说类加载器双亲委派模型
说说类加载器双亲委派模型双亲委派机制: 如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类(双亲)加载器完成。JVM中存在三个默认的类加载器:BootstrapClassLoader -> 根类加载器ExtClassLoader -> 扩展类加载器AppClassLoader -> 系统类加载器首先判断该类之前是否已加载,逐级向父类判断之前是否加载,之前加载过就结束若之前都没加载,则传自顶向下调用双亲加原创 2022-02-22 17:04:04 · 262 阅读 · 0 评论 -
JVM基础-> GC如何判断对象可以被回收
GC如何判断对象可以被回收引⽤计数法(已被淘汰):每个对象有⼀个引⽤计数属性,新增⼀个引⽤时计数加1,引⽤释放时计数减1,计数为0时可以回收目前主流的java虚拟机都摒弃掉了这种算法,最主要的原因是它很难解决对象之间相互循环引用的问题。尽管该算法执行效率很高。可达性分析法:从 GC Roots 开始向下搜索,搜索所⾛过的路径称为引⽤链。当⼀个对象到 GC Roots 没有任何引⽤链相连时,则证明此对象是不可⽤的,那么虚拟机就判断是可回收对象。目前主流的编程语言(java,C#等)的主原创 2022-02-22 17:52:22 · 485 阅读 · 0 评论 -
JVM基础 -> JVM中哪些是线程共享区
JVM中哪些是线程共享区堆区和⽅法区是所有线程共享的,栈、本地⽅法栈、程序计数器是每个线程独有的堆: 不用多说了,放对象的地方方法区: 类定义的成员变量丶常量丶静态变量丶方法都在这里栈: 程序运行才有的,会把运行时的方法压入栈,里面有局部变量等东西本地方法栈: 操作系统方法程序计数器: 标记代码走到哪里了...原创 2022-02-22 18:22:59 · 4197 阅读 · 0 评论 -
JVM基础 -> 你们项目如何排查JVM问题
你们项目如何排查JVM问题对于还在正常运⾏的系统:通过各个命令的结果,或者jvisualvm等⼯具来进⾏分析可以使⽤jmap来查看JVM中各个区域的使⽤情况可以通过jstack来查看线程的运⾏情况,⽐如哪些线程阻塞、是否出现了死锁可以通过jstat命令来查看垃圾回收的情况,特别是fullgc,如果发现fullgc⽐较频繁,那么就得进⾏调优了⾸先,初步猜测频繁fullgc(整体大面积垃圾回收)的原因如果频繁发⽣fullgc但是⼜⼀直没有出现内存溢出,系统运行的好好原创 2022-02-22 22:51:43 · 1067 阅读 · 0 评论