【读书笔记】实战JAVA虚拟机JVM故障诊断与性能优化 读书笔记


在这里插入图片描述

1.概述

20210302-20210308 几日读取了实战JAVA虚拟机JVM故障诊断与性能优化 这本书。下面是一些读书笔记。

1.1 第一章:初探java虚拟机

第一章主要讲解了java虚拟机相关的内容,并不是很深入,但是有一点讲的非常好,1.5.1小节中整数在java虚拟机中的表示,这个解惑了。

  1. 对于原码来说,绝对值相同的正数和负数只有符号位不同
  2. 反码就是在源码的基础上,符号位不变,其余取反
  3. 负数的补码就是反码加1,整数的补码就是源码本身。

好处

  1. 可以统一数字0的表示,由于0既非正数,又非负数,使用原码表示时符号位难以确定,把0归入正数和负数得到的原码编码是不停的,但是使用补码的时候,两者是相同的。可以解决0存储的问题
  2. 使用补码可以简化正数的加减法计算,将减法视为甲方,实现统一,实现正数和负数加法的统一。补码相加没无需区别正数和负数,就能得到正确结果。

然后是浮点数的表示。

1.2 认识java虚拟机的基本结构

这一章主要讲解了Java虚拟机的基本结构,其中,对Java堆、Java 栈和方法区做了较为完整的说明。同时,也对如何设置Java虚拟机参数做了简要说明。对于具体的虚拟机参数,本章并未给出太多信息,但在本书的后续章节,将会逐步介绍一些实用的虚拟机参数。

1.3 常用Java虚拟机参数

本章主要介绍了一些常用的Java虚拟机参数,如垃圾回收跟踪参数、类加载跟踪参数等。同时也详细介绍了堆空间的配置方法以及方法区、Java 栈和直接内存的配置。此外,本章还介绍了系统发生内存溢出错误后的信息获取和补救方法。最后,简要介绍了虚拟机的Server 和Client运行模式。

1.4 垃圾回收器

本章主要介绍了垃圾回收的理论基础,包括一些 主要的垃圾回收算法思想。同时,也介绍了与垃圾回收相关的基本概念,如可触及性、可达对象、新生代、老年代等,并且给出了一个有关垃圾回收带来系统停顿的案例。希望读者能熟读这些内容,为将来了解Java的垃圾回收器打下一个良好的基础。

这一章简单易懂,而且比较深入,其中主要讲解的强引用,虚引用,finalize以及相关案例佐证,讲解的是非常详细的。建议看看。

1.5 垃圾收集器以及内存分配

讲解的比较细致,原理加上实战,让你对比系统Jvm参数对性能的影响,代码较多,建议自己手打代码。

1.6 性能监控工具

top命令,vmsta命令(这个命令没有使用过)、iostat命令(这个命令没有使用过)、pidsta(这个命令没有使用过)

然后讲解了windows下的性能监控工具,任务管理器是最强大的,然后后perform新年监控工具。这个不常使用。然后收Process Explore进程管理工具,pslist(windows下面的命令行工具)

jdk性能监控工具。jps、jstat、jinfo命令jmap命令、jhat命令jstck命令、jstatd命令,jcom命令,hprof性能统计工具,扩展jps命令,这个没试过。

图形化虚拟机监控攻击JConsole,可视化性能监控工具Visual VM,Thread Dump和分析,内存快照分析,Btrace介绍(这个没有玩过)
虚拟机诊断工具 Mission Control ,MBean服务器。飞行记录器(Flight Recorder)

1.7 分析Java堆

内存溢出,永久区溢出,字符串详解、string字符串内存泄漏、String常量池的位置

虚拟机内窥镜,MAT 这个没怎么仔细搞过。

深堆和浅堆的区别。支配树,第一次听说。

tomcat内存溢出。QQL类sql语句,这一点比较复杂,没看。

1.8 锁与并发

对象头和锁,偏向锁、轻量级锁、锁膨胀、自旋锁、锁消除、

锁在应用层的优化思路介绍

CAS原理介绍、原子操作。

java内存模型

1.9 CLass文件结构

这一章很多指令,难以看懂,很乏味,但是很有用,建议多来十几次争取看懂,我是跳着看的。

ASM字节码操作,这里很多案例建议每个手打一遍学习。

1.10 Class装载系统

讲解了类加载的每个过程。

classLoader双亲委派模式。弊端,破坏。

热替换的实现。

1.11 字节码执行

很多指令,难懂。

同步控制

再次学习ASM,这几个案例非常的实用,很好。

最后是新特性的指令介绍。

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/114545588