jvm
jvm
Latitia Gu
这个作者很懒,什么都没留下…
展开
-
JVM内存模型
一.JVM堆内存结构堆内存是所有线程共用的内存空间,JVM 将 Heap 内存分为年轻代(Young generation)和 老年代(Old generation, 也叫 Tenured)两部分。年轻代还划分为 3 个内存池,新生代(Eden space)和存活区(Survivor space), 在大部分 GC 算法中有 2 个存活区(S0, S1),在我们可 以观察到的任何时刻,S0 和 S1 总有一个是空的, 但一般较小,也不浪费多少空间。Non-Heap 本质上还是 Heap,只是一般原创 2022-05-06 05:32:04 · 494 阅读 · 0 评论 -
JVM分析调优指标
一.分配速率分配速率(Allocation rate)表示单位时间内分配的内存量。通常使用 MB/sec作 为单位。上一次垃圾收集之后,与下一次GC开始之前的年轻代使用量,两者的差 值除以时间,就是分配速率。分配速率过高就会严重影响程序的性能,在 JVM 中可能会导致巨大的 GC 开销二.提升速率...原创 2022-05-02 10:09:23 · 886 阅读 · 0 评论 -
内存溢出相关错误
一.OutOfMemoryError: Java heap space创建新的对象时,堆内存中的空间不足以存放新创建的对象产生的原因,很多时候就类似于将 XXL 号的对象,往 S 号的 Java heap space 里面塞。其实清楚了原因,问 题就很容易解决了:只要增加堆内存的大小,程序就能正常运行。另外还有一些情况是由代码问题导致的:• 超出预期的访问量/数据量:应用系统设计时,一般是有 “容量” 定义的,部署这么多机器,用来处理一定 流量的数据/业务。 如果访问量突然飙升,超过预期原创 2022-05-01 06:08:29 · 57 阅读 · 0 评论 -
JVM 线程堆栈数据分析
一.JVM线程模型示意图JVM 内部线程主要分为以下几种:• VM 线程:单例的 VMThread 对象,负责执行 VM 操 作;• 定时任务线程:单例的 WatcherThread 对象, 模拟 在 VM 中执行定时操作的计时器中断;• GC 线程:垃圾收集器中,用于支持并行和并发垃圾 回收的线程;• 编译器线程: 将字节码编译为本地机器代码;• 信号分发线程:等待进程指示的信号,并将其分配给 Java 级别的信号处理方法。二.JVM在GC过程中怎么暂停其他线程的?使用原创 2022-05-01 06:04:24 · 771 阅读 · 0 评论 -
垃圾回收之G1 GC
一.设计目标将 STW 停顿的时间和分布,变成 可预期且可配置的1)首先,堆不再分成年轻代和老年代,而是划分为多个(通常是 2048个)可以存放对象的小块堆区域(smaller heap regions)。 每个小块,可能一会被定义成 Eden 区,一会被指定为 Survivor 区或者Old 区。在逻辑上,所有的 Eden 区和 Survivor 区合起来 就是年轻代,所有的 Old 区拼在一起那就是老年代2)这样划分之后,使得 G1 不必每次都去收集整 个堆空间,而是以增量的方式来进行处原创 2022-04-29 09:50:26 · 610 阅读 · 0 评论 -
垃圾回收之ZGC/Shenandoah GC
1.特点1)GC 最大停顿时间不超过 10ms2)堆内存支持范围广,小至几百 MB 的堆空间,大至 4TB 的超大堆内 存(JDK13 升至 16TB) 3)与 G1 相比,应用吞吐量下降不超过 15%4)当前只支持 Linux/x64 位平台,JDK15 后支持 MacOS 和 Windows 系统2.参数配置...原创 2022-04-29 09:42:33 · 546 阅读 · 0 评论 -
垃圾回收之GC对比
一.各个 GC 对比二.常用的 GC 组合(1)Serial+Serial Old 实现单线程的低延迟 垃圾回收机制;(2)ParNew+CMS,实现多线程的低延迟垃 圾回收机制;(3)Parallel Scavenge和Parallel Scavenge Old,实现多线程的高吞吐量垃圾 回收机制。三.GC 如何选择选择正确的 GC 算法,唯一可行的方式就是去尝试,一般性的指导原则:1. 如果系统考虑吞吐优先,CPU 资源都用来最大程度处理业务,用 Parallel .原创 2022-04-29 09:35:55 · 297 阅读 · 0 评论 -
垃圾回收之并行GC
1.特点年轻代和老年代的垃圾回收都会触发 STW 事件。在年轻代使用 标记-复制(mark-copy)算法,在老年代使用 标记-清除-整理(mark-sweepcompact)算法。-XX:ParallelGCThreads=N 来指定 GC 线程数, 其默认值为 CPU 核心数。 并行垃圾收集器适用于多核服务器,主要目标是增加吞吐量。因为对系统资源的有效使用,能达到 更高的吞吐量:• 在 GC 期间,所有 CPU 内核都在并行清理垃圾,所以总暂停时间更短;• 在两次 GC 周期的间隔期原创 2022-05-09 05:46:56 · 240 阅读 · 0 评论 -
垃圾回收之串行GC
1.特点串行 GC 对年轻代使用 mark-copy(标记-复制) 算法,对老年代使用 mark-sweep-compact(标记-清除整理)算法。两者都是单线程的垃圾收集器,不能进行并行处理,所以都会触发全线暂停(STW),停止所有的应用线程。 因此这种 GC 算法不能充分利用多核 CPU。不管有多少 CPU 内核,JVM 在垃圾收集时都只能使用单个核心。CPU 利用率高,暂停时间长。简单粗暴,就像老式的电脑,动不动就卡死。该选项只适合几百 MB 堆内存的 JVM,而且是单核 CPU 时比原创 2022-04-29 08:55:44 · 78 阅读 · 0 评论 -
垃圾回收之CMS GC
一.六个阶段阶段 1: Initial Mark(初始标记)这个阶段伴随着 STW 暂停。初始标记的目标是标记所有的 根对象,包括根对象直接引用的对象,以及被年轻代中所 有存活对象所引用的对象(老年代单独回收)。阶段 2: Concurrent Mark(并发标记)在此阶段,CMS GC 遍历老年代,标记所有的存活对象,从 前一阶段 “Initial Mark” 找到的根对象开始算起。 “并发标 记”阶段,就是与应用程序同时运行,不用暂停的阶段。阶段 3: Concurre.原创 2022-04-28 06:06:25 · 2226 阅读 · 0 评论 -
JVM垃圾回收机制
一.内存池划分二.GC 的一般原理对象分配在新生代的 Eden 区, 标记阶段 Eden 区存活的对象就会复制到存活区;注意:为什么是复制,不是移动???两个存活区 from 和 to,互换角色。对象存活到一定周期会提升到老年代。老年代默认都是存活对象,采用移动方式: 1. 标记所有通过 GC roots 可达的对象; 2. 删除所有不可达对象; 3. 整理老年代空间中的内容,方法是将所有的存 活对象复制,从老年代空间开始的地方依次存 放。三.GC的三种算法1.清除算法原创 2022-04-28 06:01:52 · 260 阅读 · 0 评论 -
JVM 图形化工具
一.jconsole在命令行输入 jconsole 即可打开 本地 JVM 可以直接选择 远程 JVM 可以通过 JMX 方式连接二.jvisualvm在命令行输入 jconsole 即可打开 本地 JVMhttps://visualvm.github.io/download.htmlhttps://visualvm.github.io/download.html三.jmc在命令行输入 jmc即可打开 本地 JVM,看飞行记录器Oracle Java Mission Contr.原创 2022-04-28 04:56:35 · 231 阅读 · 0 评论 -
JVM 命令行工具
一.概览二.jstat用法jstat -gcutil pid 1000 1000jstat -gc pid 1000 1000二.jmap用法常用选项就 3 个:-heap 打印堆内存(/内存池)的配置和 使用信息。-histo 看哪些类占用的空间最多, 直方图。-dump:format=b,file=xxxx.hprof Dump 堆内存。演示:jmap -heap pidjmap -histo pidjmap -dump:format=b,f.原创 2022-04-26 06:10:03 · 162 阅读 · 0 评论 -
JVM 类加载器
一.类的生命周期1. 加载(Loading):找 Class 文件2. 验证(Verification):验证格式、依赖3. 准备(Preparation):静态字段、方法表4. 解析(Resolution):符号解析为引用5. 初始化(Initialization):构造器、静态变 量赋值、静态代码块6. 使用(Using)7. 卸载(Unloading)二.类的加载时机1. 当虚拟机启动时,初始化用户指定的主类,就是启动执行的 main 方法所在的类;2. .原创 2022-04-24 06:37:12 · 178 阅读 · 0 评论 -
java命令行
编译:javac demo/jvm0104/HelloByteCode.java查看字节码:javap -c demo.jvm0104.HelloByteCode更详细地查看字节码:javap -c -verbose demo.jvm0104.HelloByteCode原创 2022-04-23 06:29:32 · 331 阅读 · 0 评论 -
JVM基础知识
一.编程语言的特点二.java语言的特点三. 不同语言跨平台的区别四.什么是字节码?原创 2022-04-23 06:22:46 · 213 阅读 · 0 评论