随笔分类 - JVM调优
jvm调优以及jvm简介
摘要:下载 地址: https://eclipse.dev/mat/downloads.php 注意: 1.12.0 Release需要JDK11 参数配置 在配置的部分,我们主要配置的是ParseHeapDump.sh脚本中的内存参数。 在脚本的最后一行的最后面,加上如下的参数 -vmargs -Xmx
阅读全文
摘要:简介 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率 CPU飙升定位 CPU飙升问题一般就是几个常用命令
阅读全文
摘要:常用配置参数 jar包启动配置命令 java -Xmx8g -Xms8g -XX:+UseG1GC -jar /home/pgcp/pgcp-0.0.1-SNAPSHOT.jar tomcat启动配置参数 在/bin/catalina.sh中/cygwin=false前加入下面一句 JAVA_OPT
阅读全文
摘要:###数据结构 java对象和数组是存放在堆中的,那么这些instance的数据结构是什么呢? 对象头 第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。 第二部分是klass,类型指针,虚拟机通
阅读全文
摘要:###简介 字符串在不同的JDK版本中,存放的位置不同,创建方式不同,存放的位置也不同。 ###存放位置 JDK1.7以下,无论何种方法创建String对象,位置都位于方法区。 JDK1.8及1.8以上,new String("Hello")创建位于堆中,String s3="world"创建则位于
阅读全文
摘要:###常用JVM查看信息命令 top 观察内存使用情况、CPU占用率, top -Hp 进程ID 观察进程中的线程,哪个线程CPU和内存占比高, jstack 进程ID 定位线程状况,重点关注:WAITING BLOCKED。 ###常用工具使用 jconsole 远程连接 JDK自带界面 线上不使
阅读全文
摘要:###名词解释 动态编译(dynamic compilation) "在运行时进行编译",与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。 JIT编译(just-in-time compilation) 狭
阅读全文
摘要:###简介 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟
阅读全文
摘要:###内存溢出和内存泄漏 内存溢出(Out Of Memory) 就是申请内存时,JVM没有足够的内存空间。通俗说法就是去蹲坑发现坑位满了。 内存泄露 (Memory Leak) 就是申请了内存,但是没有释放,导致内存空间浪费。通俗说法就是有人占着茅坑不拉屎。 ###垃圾定义 没有任何引用指向的一个
阅读全文
摘要:###类加载过程 加载时机 使用new实例化对象时,读取和设置类的静态变量、静态非字面值常量(静态字面值常量除外)时,调用静态方法时。 对内进行反射调用时。 当初始化一个类时,如果父类没有进行初始化,需要先初始化父类。 启动程序所使用的main方法所在类。 当使用1.7的动态语音支持时。 加载阶段
阅读全文
摘要:###G1(Garbage-First) G1是一种服务端应用使用的垃圾收集器,目标是用在多核、大内存的机器上,它在大多数情况下可以实现指定的GC暂停时间,同时还能保持较高的吞吐量。 特点 压缩空闲空间不会延长GC的暂停时间。 内存模型 每个分区都可能是年轻代也可能是老年代,但是在同一时刻只能属于某
阅读全文
摘要:###简介 CPU为了提高指令执行效率,会在一条指令执行过程中(比去内存读数据(慢100倍)),去同时执行另一条指令,前提是,两条指令没有依赖关系。 ###CPU保证不乱序 MESI--CPU缓存一致性协议(Inter的CPU) ####概念 Modified(被修改) 该缓存行只被缓存在该CPU的
阅读全文