文章 62
浏览 15135
什么,JVM竟然带颜色??

什么,JVM竟然带颜色??

背景 最近因为线上出现了一个 jvm 的问题,最终原因是反射过多创建了类对象,而设置的 MetaSpace 过下,导致溢出了,最终虽然结合网上和自己的经验,一段骚操作解决了,不过也萌发了我对 jvm 的理解,虽然在网上听了太多的垃圾回收算法/垃圾回收器,但是回收算法具体是怎么样实现的,刚好最近有幸偶然看了下 JVM 深入理解虚拟机(三)这版书和结合网上技术大牛的讲解,说到了三色标记,基于此写篇博客记录下 三色标记 天空一声巨响,三色标记就闪亮登场,jvm 说,我需要点颜色,give me some color see see ,于是三色标记就出来(开个玩笑,三色标记不是具体的颜色,而是一个形象的抽象,emmm) 三色标记简介 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。漏标的问题主要引入了三色标记算法来解决。 三色标记法是一种垃圾回收法,它可以让 JVM 不发生或仅短时间发生 STW(Stop The World),从而达到清除 JVM 内存垃圾的目的。 三色标记算法是把 Gc roots 可达性分析遍历对象过程中遇到的对....

G1&ZGC垃圾收集器介绍

G1&ZGC垃圾收集器介绍

G1收集器(-XX:+UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征. G1将Java堆划分为多个大小相等的独立区域( Region ),JVM目标是不超过 2048 个Region(JVM源码里TARGET_REGION_NUMBER 定义),实际可#### 以超过该值,但是不推荐。 一般Region大小等于堆大小除以2048,比如堆大小为4096M,则Region大小为2M,当然也可以用参数"-XX:G1HeapRegionSize"手动指定Region大 小,但是推荐默认的计算方式。 G1保留了年轻代和老年代的概念,但不再是物理隔阂了,它们都是(可以不连续)Region的集合。 默认年轻代对堆内存的占比是5%,如果堆大小为4096M,那么年轻代占据200MB左右的内存,对应大概是100个Region,可以通过“- XX:G1NewSizePercent”设置新生代初始占比,在系统运行中,JVM会不停的给年轻代增加更多的Region,但是最多....

JVM调优工具详解及调优实战

JVM调优工具详解及调优实战

前置启动程序 事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用 Jmap 此命令可以用来查看内存信息,实例个数以及占用内存大小 jmap -histo 14660 #查看历史生成的实例 jmap -histo:live 14660 #查看当前存活的实例,执行过程中可能会触发一次full gc 打开log.txt,文件内容如下: num:序号 instances:实例数量 bytes:占用空间大小 class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][] 堆内存dump 1 jmap -dump:format=b,file=eureka.hprof 14660 也可以设置内存溢出自动导出dump文件(内存很大的时候,可能会导不出来) 1. -XX:+HeapDumpOnOutOfMemoryError 2. -XX:HeapDumpPath=./ (路径) 示例代码: public class OOMTest { publ......

人民有信仰 民族有希望 国家有力量