
JVM学习笔记
文章平均质量分 80
勉之~
遇事不怕,就怕没有解决的能力,不断提升自己,做一个勇往直前的人,Fighting!!!
展开
-
JVM监控调优之分析GC日志
JVM监控调优之分析GC日志MinorGC日志解读FullGC日志解读在线日志分析工具GCEasy分析工具网站原创 2021-08-11 20:53:58 · 139 阅读 · 0 评论 -
JVM性能监控与调优之运行时参数
JVM性能监控与调优之运行时参数JVM参数类型选型添加JVM参数选项(1)IDEA里进行添加(2)运行jar包在指令窗口输入指令例如:java -Xms50m -Xmx50m -XX:+PrintGCStamps -jar demo.jar(3)通过tomcat运行war包① 在Linux系统下,在tomcat/bin/catalina.sh中添加类似如下配置:JAVA_OPTS="-Xms512m -Xmx1024m"等参数② 在Windows系统下载Catalina.bat中添加原创 2021-08-10 21:51:58 · 219 阅读 · 0 评论 -
JVM监控及诊断工具之GUI的详解
JVM监控及诊断工具之GUI的详解JConsole的使用(1)启动在jdk的bin目录下,启动jconsole.exe命令即可或者在cmd命令窗口输入jconsole(2)连接方式① Local:使用JConsole连接本地正在运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户,JConsole使用文件系统的授权是通过RMI连接器连接到平台的MBean服务器上② Remote:使用下面的URL通过RMI连接器连接到一个JMX代理,service:jmx:rmi:///jndi原创 2021-08-09 22:02:44 · 1081 阅读 · 0 评论 -
JVM性能调优之JVM监控及诊断工具的命令行使用
JVM性能调优之JVM监控及诊断工具的命令行使用jps:查看当前正在运行的java进程(1)基本情况jps显示指定系统内所有的HotSpot虚拟机进程,用于查看运行的进程,对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID一致(2)使用情况:jps [option参数][[hostid参数]option参数:① -q:显示进程的ID② -l:显示全类名③ -m:输出虚拟机进程启动时传递给main()的参数④ -v:列出虚拟机进程启动时的JVM参数hostid参数:RMI注原创 2021-08-05 22:18:51 · 165 阅读 · 1 评论 -
JVM之性能调优三部曲思路
JVM之性能调优三部曲思路第一步:性能监控(1)概念性能监控是一种以非强行或入侵方式收集或查看应用运营性能数据的活动。监控通常是指一种在生产,质量评估或开发环境下实施的带有预防或主动性的活动。当应用相关人员提出性能问题却没有提供足够多的线索时,首先我们需要进行性能监控,然后是性能分析。(2)监控的各个方面① GC频繁② CPU load过高③ 出现OOM④ 内存溢出⑤ 死锁⑥ 程序响应时间较长第二步: 性能分析(1)概念性能分析是一种以侵入方式收集运行性能数据的活动,它会响应应用原创 2021-08-04 21:25:19 · 136 阅读 · 0 评论 -
JVM之类的加载器详解
JVM之类的加载器详解命名空间与类的唯一性(1)何为类的唯一性对于任意一个类,都需要有加载它的类加载器和这个类本身一同确认其在Java虚拟机中的唯一性,每个类加载器,都拥有一个独立的类名称空间:比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类源自同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这两个类就必定不相等(2)命名空间① 每个类加载器都有自己的命名空间,命名空间由该加载器及所有的父加载器所加载的类组成② 在用一个命名空原创 2021-07-14 22:03:24 · 265 阅读 · 2 评论 -
JVM之类的加载过程详解
JVM之类的加载过程详解类的生命周期概述Java中数据类型分为基本数据类型和引用数据类型,基本数据类型有虚拟机预先定义,引用数据类型需要进行类的加载(1) 类的整个生命周期如下图所示:(2)从类的使用过程看Loading(加载)阶段(1)加载完成的操作及二进制的获取① 加载的理解所谓加载就是将Java类的字节码文件加载到机器内存中,并在内存中构建出java 类的原型-类模板对象所谓类模板对象就是Java类在JVM内存中的一个快照,JVM把从字节码中解析出的常量池,类字段,类方法等信息原创 2021-07-12 15:03:52 · 249 阅读 · 0 评论 -
字节码指令集解析详解
字节码指令集解析详解加载与储存指令概述(1)作用加载和储存指令用于将数据从栈帧的局部变量表和操作数栈之间来回传递(2)常用指令上面所列举的指令助记符中,有一部分是以尖括号结尾的,这些指令助记符实际上代表了一组指令,这组指令都是某个带有一个操作数的通用指令的特殊形式,对于这若干组特殊指令来说,他们表面上没有操作数,不需要进行取操作数的动作,但操作数都隐含在指令中例如:iload_0:将局部变量表中索引为0的位置上的数据压入操作数栈中,一个字节iload 0:将局部变量表中索引为0的位置上的原创 2021-07-09 19:25:07 · 825 阅读 · 0 评论 -
JVM之Class文件结构
JVM之Class文件结构Class文件的总结构Class文件总体结构如下:① 魔数② Class文件版本③ 常量池④ 访问标志⑤ 类索引、父类索引、接口索引集合⑥ 字段表集合⑦ 方法表集合⑧ 属性表集合魔数-Class文件的标记① 每一个Class文件开头的4个字节的无符号整数称为魔数② 它的唯一作用是确定这个文件是否为一个能被虚拟机接受的有效合法的Class文件③ 魔数值固定为0xCAFEBABE,不会改变④ 如果一个Class文件不以0xCAFEBABE开头,虚拟机原创 2021-07-06 21:57:17 · 124 阅读 · 0 评论 -
JVM垃圾回收器详解
JVM垃圾回收器详解一 垃圾回收器的组合关系7款垃圾回收器与垃圾分代之间的关系垃圾收集器的组合关系说明:① 两个收集器间有连续表明它们可以搭配使用② 其中Serial Old作为CMS出现Concurrent Mode Failure失败的后备预案③ 红色虚线由于维护和兼容性测试的成本,在JDK8时将Serial+CMS,ParNew+Serial Old这两个组合声明为废弃,并在JDK9中中完全取消了这些组合的支持④ 绿色虚线在JDK14中,弃用了Parallel Scavenge和原创 2021-07-05 21:25:55 · 226 阅读 · 1 评论 -
垃圾回收相关概念概述
垃圾回收相关概念概述原创 2021-07-02 15:56:24 · 155 阅读 · 0 评论 -
JVM之垃圾回收算法
JVM之垃圾回收算法一 标记阶段引用计数算法的原理及优缺点(1)引用算法对每个对象保存一个整型的引用计数器属性,用于记录对象对象被引用的情况(2)只要有任意一个对象引用了对象,该对象的引用计数器就加一,引用失效则减一,当引用计数器的值为0,表示对象不可能再被使用,可进行回收(3)优点:实现简单,垃圾对象便于辨识,判定效率高,回收没有延迟性缺点:需要单独的字段存储计数器,增加存储空间的开销;每次赋值需要更新计数器,伴随加法和减法操作,增加了时间开销;无法处理循环引用的情况可达性分析算法与GC原创 2021-07-01 20:47:21 · 126 阅读 · 1 评论 -
JVM之字符串常量池详解
JVM之字符串常量池详解String的不可变性(1)String声明为final的,不能被继承(2)String在jdk8及以前内部定义final char [] value用于存储字符串数据,jdk9时改为byte[]加上编码标记,节约空间(3)String代表不可变的字符序列① 当对字符串重新赋值时,需要重写指定内存区域值,不能使用原有的value进行赋值② 当对现有字符串进行连接操作时,需要重新指定内存区域赋值,不能使用原有的value进行赋值③ 当调用String的replace()原创 2021-06-30 16:41:06 · 227 阅读 · 0 评论 -
JVM之执行引擎详解
JVM之执行引擎详解一 执行引擎概述执行引擎概述(1) 物理机的执行引擎是直接建立在处理器、缓存、指令集合操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,能够执行那些不被硬件直接支持的指令集格式(2)执行引擎的任务是将字节码指令解释编译为对应平台上的本地机器指令来让一个Java程序运行起来,使之在操作系统上直接运行执行引擎的工作过程(1)执行引擎在执行什么样的字节码指令完全依赖PC寄存器(2)每执行完一项指令操作后,PC寄存器机会更新下一条需要被执行的指令地址(3)方法在执原创 2021-06-29 22:29:18 · 428 阅读 · 1 评论 -
JVM运行时数据区详解
JVM运行时数据区详解一 运行时数据区包括方法区,堆区,栈区,PC寄存器和本地方法栈二 PC寄存器介绍(1)它是一块很小的内存空间,也是运行速度最快的存储区域(2)每个线程都有它自己的程序计数器,是线程私有的,生命周期和线程的生命周期一致(3)任何时间一个线程只有一个方法执行,也就是当前方法。程序计数器会储存当前线程正在执行的Java方法的JVM指令地址(4)JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟(5)它是程序控制流的指示器,分支、循环、跳转、异常处理和线程恢复等功能都需原创 2021-06-26 20:46:07 · 417 阅读 · 1 评论 -
JVM之类加载过程及双亲委派机制
JVM之类加载过程及双亲委派机制一 类加载详图类加载分为三大步:加载,链接和初始化,其中链接分为验证、准备和解析,类加载器分为引导类加载器、扩展类加载器和系统类加载器二 类加载过程加载(loading)(1)通过一个类的全限定名获取定义此类的二进制字节流(2)将字节流所代表的静态存储结构转化为方法区的运行时数据结构(3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问的入口链接(linking)(1)验证(Verify)确保Class文件原创 2021-06-21 16:31:35 · 109 阅读 · 0 评论 -
JVM与Java体系结构
JVM之基本介绍JVM的基本位置JVM是运行在操作系统上的,与硬件没有直接关系。JVM的整体结构HotSpot VM是目前市面上高性能虚拟机的代表之一,它采用解释器与即时编译器并存的架构。Java代码执行流程图JVM的架构模型Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种就是基于寄存器的指令集架构。(1)栈的指令集架构特点① 设计和实现更简单,适用于资源受限的系统② 避开了寄存器的分配难题,使用零地址指令方式分配③ 指令流中的指令大部分是零地址指令,其执行过原创 2021-06-19 20:50:27 · 87 阅读 · 0 评论