![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 67
JVM
WannaRunning
这个作者很懒,什么都没留下…
展开
-
CMS垃圾回收器的堆内存分配问题
项目中某个服务容器配置内存是4G,通过-XX:InitialRAMPercentage=75 控制JVM内存控制为容器的75%,大概2.5G左右不到。CMS中堆内存分配方式根据相关计算公式,如果机器CPU为4核,则年轻代 = 64M * 4 * 13 / 10 = 332.8M。,在默认情况下是这个比例没错,但是如果项目中使用CMS代替默认的GC回收器呢,这个比例还正确么?随着业务量的增长,单服务节点的高峰QPS不算攀高,发现高峰期极易发生FullGC。这个比例有个前提条件,就是之前的文章写的。原创 2023-06-03 21:00:03 · 703 阅读 · 0 评论 -
浅谈JDK8的默认垃圾回收器
JDK1.8中默认使用Parallel Scavenge作为年轻代的垃圾回收器。使用Parallel Old作为老年代的垃圾回收器(又称为PS MarkSweep)。Parallel Scavenge收集器又称为吞吐量优先收集器,和ParNew收集器类似,是一个新生代收集器。使用复制算法的并行多线程收集器。Parallel Scavenge是Java1.8默认的收集器,特点是并行的多线程回收,以吞吐量优先。吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)原创 2023-05-20 21:00:51 · 2431 阅读 · 0 评论 -
Arthas入门使用
Arthas 是一款线上监控诊断产品原创 2022-08-22 15:24:35 · 3273 阅读 · 0 评论 -
JVM调优之AdaptiveSizePolicy参数
AdaptiveSizePolicy即自适应大小策略,这是JVM GC Ergonomics(自适应调节策略)的一部分。如果开启 AdaptiveSizePolicy,则每次GC后会重新计算Eden、From和To区的大小,计算依据是 GC 过程中统计的 GC 时间、吞吐量、内存占用量。JDK1.8默认使用UseParallelGC垃圾回收器,该垃圾回收器默认启动了AdaptiveSizePolicyAdaptiveSizePolicy 动态调整 Eden、Survivor 区的大小,存在将 Su原创 2022-05-12 16:04:28 · 639 阅读 · 0 评论 -
JVM调优参数之UseContainerSupport
基于Docker等容器方式运行Java应用时,容器的资源管理使用了操作系统cgroup机制,但是JVM无法感知cgroup。也就是说在没有UseContainerSupport参数支持的JDK版本中,JVM是无法感知容器环境存在,对容器资源的限制比如内存或者cpu等都无法生效。在这种情况下,如果JVM申请的内存大于容器的内存,容器就会把当前进程kill掉,所以必须要让JVM感知到能使用的最大内存,这样可以及时进行GC。UseContainerSupport作用为了支持JVM感知cgroup..原创 2022-05-12 15:35:16 · 4095 阅读 · 0 评论 -
从CMS垃圾回收器分析常用的垃圾回收算法
CMS 的全称是 Mostly Concurrent Mark and Sweep Garbage Collector(主要并发标记清除垃圾收集器),它在年轻代使用复制算法,而对老年代使用标记-清除算法。那这种回收器有什么优点和缺点,为什么不同代使用不同算法?下面来了解一下标记(Mark)垃圾回收的第一步,就是找出活跃的对象;根据 GC Roots 遍历所有的可达对象,这个过程,就叫作标记。绿色的代表 GC Roots,红色的代表可以追溯到的对象;可以看到标记之后,仍然有多个灰色原创 2021-11-05 20:48:25 · 2001 阅读 · 0 评论 -
JVM分区
栈区栈分为java虚拟机栈和本地方法栈。Java虚拟机栈,它是线程私有的,生命周期与线程相同。原创 2021-06-03 15:17:27 · 120 阅读 · 0 评论 -
JAVA使用自定义异常的优化——重写fillInStackTrace方法
最近在看性能优化相关的东西,就看到了关于自定义业务异常的使用,观点是不建议,如果一定要使用,在不需要知道异常堆栈信息的情况下必须重写Throwable的fillInStackTrace()方法,这个方法是native修饰即JVM本地同步方法,native实现是将线程的栈帧信息记录到此 Throwable 对象中,也就是我们看到的发生在哪个类的哪一行代码处等信息。其实开发中很多时候为了省事都直接在Service层直接抛业务异常,controller捕获业务异常封装结果,至少有时候我是这么写的。这种情况建议原创 2021-03-07 15:07:06 · 1375 阅读 · 1 评论 -
服务器CPU高占用和JVM内存泄漏排查
jstack命令jstack能得到运行java程序的java stack和native stack的信息,可以轻松得知当前线程的运行情况。CPU占用100%分析思路是找到进程,进而找到占用CPU的线程。1.找到 cpu 占有率最高的 java 进程号top -c显示运行中的进程列表信息,shift + p使列表按 cpu 使用率排序显示top -c2.根据进程号找到 cpu 占有率最高的线程号,把线程的PID由 十进制 转成 十六进制。使用命令:top -Hp {.....原创 2021-03-08 18:07:08 · 270 阅读 · 0 评论 -
JVM调优和GC过程分析
方法区:又叫静态区,被所有的线程共享;方法区包含所有的class和static变量;方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。栈:Java中一个线程一个栈区,每一个栈中的元素都是私有的,不被其他栈所访问。栈有后进先出的特点,栈中的数据大小与生存期都是确定的,缺乏灵活性,但是,存取速度比堆要快,仅次于CPU中的寄存器。java中的8中基本数据类型,局部变量都是...原创 2019-11-18 15:03:27 · 256 阅读 · 0 评论