文件大小:20.68 MB
文件类型:pdf
发布时间:2023-01-03 12:34:26
需资源分:2
下载次数:0
Tag:JAVA 虚拟机
::资源简介::
实战Java虚拟机
内容简介
前言
目录
第01章 初探Java虚拟机
1_1 知根知底_追溯Java的发展历程
1_1_1 那些依托Java虚拟机的语言大咖们
1_1_2 Java发展史上的里程碑
1_2 跨平台的真相_Java虚拟机来做中介
1_2_1 理解Java虚拟机的原理
1_2_2 看清Java虚拟机的种类
1_3 一切看我的_Java语言规范
1_3_1 词法的定义
1_3_2 语法的定义
1_3_3 数据类型的定义
1_3_4 Java语言规范总结
1_4 一切听我的_Java虚拟机规范
1_5 数字编码就是计算机世界的水和电
1_5_1 整数在Java虚拟机中的表示
1_5_2 浮点数在Java虚拟机中的表示
1_6 抛砖引玉_编译和调试虚拟机
1_7 小结
第02章 认识Java虚拟机的基本结构
2_1 谋全局者才能成大器_看穿Java虚拟机的架构
2_2 小参数能解决大问题_学会设置Java虚拟机的参数
2_3 对象去哪儿_辨清Java堆
2_4 函数如何调用_出入Java栈
2_4_1 局部变量表
2_4_2 操作数栈
2_4_3 帧数据区
2_4_4 栈上分配
2_5 类去哪儿了_识别方法区
2_6 小结
第03章 常用Java虚拟机参数
3_1 一切运行都有迹可循_掌握跟踪调试参数
3_1_1 跟踪垃圾回收_读懂虚拟机日志
3_1_2 类加载/卸载的跟踪
3_1_3 系统参数查看
3_2 让性能飞起来_学习堆的配置参数
3_2_1 最大堆和初始堆的设置
3_2_2 新生代的配置
3_2_3 堆溢出处理
3_3 别让性能有缺口_了解非堆内存的参数配置
3_3_1 方法区配置
3_3_2 栈配置
3_3_3 直接内存配置
3_4 Client和Server二选一_虚拟机的工作模式
3_5 小结
第04章 垃圾回收概念与算法
4_1 内存管理清洁工_认识垃圾回收
4_2 清洁工具大PK_讨论常用的垃圾回收算法
4_2_1 引用计数法[Reference Counting]
4_2_2 标记清除法[Mark-Sweep]
4_2_3 复制算法[Copying]
4_2_4 标记压缩法[Mark-Compact]
4_2_5 分代算法[Generational Collecting]
4_2_6 分区算法[Region]
4_3 谁才是真正的垃圾_判断可触及性
4_3_1 对象的复活
4_3_2 引用和可触及性的强度
4_3_3 软引用_可被回收的引用
4_3_4 弱引用_发现即回收
4_3_5 虚引用_对象回收跟踪
4_4 垃圾回收时的停顿现象_Stop-The-World案例实战
4_5 小结
第05章 垃圾收集器和内存分配
5_1 一心一意一件事_串行回收器
5_1_1 新生代串行回收器
5_1_2 老年代串行回收器
5_2 人多力量大_并行回收器
5_2_1 新生代ParNew回收器
5_2_2 新生代ParallelGC回收器
5_2_3老年代ParallelOldGC回收器
5_3 一心多用都不落下_CMS回收器
5_3_1 CMS主要工作步骤
5_3_2 CMS主要的设置参数
5_3_3 CMS的日志分析
5_3_4 有关Class的回收
5_4 未来我做主_G1回收器
5_4_1 G1的内存划分和主要收集过程
5_4_2 G1的新生代GC
5_4_3 G1的并发标记周期
5_4_4 混合回收
5_4_5 必要时的Full GC
5_4_6 G1日志
5_4_7 G1相关的参数
5_5 回眸_有关对象内存分配和回收的一些细节问题
5_5_1 禁用System_gc()
5_5_2 System_gc()使用并发回收
5_5_3 并行GC前额外触发的新生代GC
5_5_4 对象何时进入老年代
5_5_5 在TLAB上分配对象
5_5_6 方法finalize()对垃圾回收的影响
5_6 温故又知新_常用的GC参数
5_7 动手才是真英雄_垃圾回收器对Tomcat性能影响的实验
5_7_1 配置实验环境
5_7_2 配置进行性能测试的工具JMeter
5_7_3 配置Web应用服务器Tomcat
5_7_4 实战案例1_初试串行回收器
5_7_5 实战案例2_扩大堆以提升系统性能
5_7_6 实战案例3_调整初始堆大小
5_7_7 实战案例4_使用ParrellOldGC回收器
5_7_8 实战案例5_使用较小堆提高GC压力
5_7_9 实战案例6_测试ParallelOldGC的表现
5_7_10 实战案例7_测试ParNew回收器的表现
5_7_11 实战案例8_测试JDK1_6的表现
5_7_12 实战案例9_使用高版本虚拟机提升性能
5_8 小结
第06章 性能监控工具
6_1 有我更高效_Linux下的性能监控工具
6_1_1 显示系统整体资源使用情况_top命令
6_1_2 监控内存和CPU_vmstat命令
6_1_3 监控IO使用_iostat命令
6_1_4 多功能诊断器_pidstat工具
6_2 用我更高效_Windows下的性能监控工具
6_2_1 任务管理器
6_2_2 perfmon性能监控工具
6_2_3 Process Explorer进程管理工具
6_2_4 pslist命令_Windows下也有命令行工具
6_3 外科手术刀_JDK性能监控工具
6_3_1 查看Java进程_jps命令
6_3_2 查看虚拟机运行时信息_jstat命令
6_3_3 查看虚拟机参数_jinfo命令
6_3_4 导出堆到文件_jmap命令
6_3_5 JDK自带的堆分析工具_jhat命令
6_3_6 查看线程堆栈_jstack命令
6_3_7 远程主机信息收集_jstatd命令
6_3_8 多功能命令行_jcmd命令
6_3_9 性能统计工具_hprof
6_3_10 扩展jps命令
6_4 我是你的眼_图形化虚拟机监控工具JConsole
6_4_1 JConsole连接Java程序
6_4_2 Java程序概况
6_4_3 内存监控
6_4_4 线程监控
6_4_5 类加载情况
6_4_6 虚拟机信息
6_5 一目了然_可视化性能监控工具Visual VM
6_5_1 Visual VM连接应用程序
6_5_2 监控应用程序概况
6_5_3 Thread Dump和分析
6_5_4 性能分析
6_5_5 内存快照分析
6_5_6 BTrace介绍
6_6 来自JRockit的礼物_虚拟机诊断工具Mission Control
6_6_1 MBean服务器
6_6_2 飞机记录器[Flight Recorder]
6_7 小结
第07章 分析Java堆
7_1 对症才能下药_找到内存溢出的原因
7_1_1 堆溢出
7_1_2 直接内存溢出
7_1_3 过多线程导致OOM
7_1_4 永久区溢出
7_1_5 GC效率低下引起的OOM
7_2 无处不在的字符串_String在虚拟机中的实现
7_2_1 String对象的特点
7_2_2 有关String的内存泄漏
7_2_3 有关String常量池的位置
7_3 虚拟机也有内窥镜_使用MAT分析Java堆
7_3_1 初识MAT
7_3_2 浅堆和深堆
7_3_3例解MAT堆分析
7_3_4支配树[Dominator Tree]
7_3_5 Tomcat堆溢出分析
7_4 筛选堆对象_MAT对OQL的支持
7_4_1 Select子句
7_4_2 From子句
7_4_3 Where子句
7_4_4 内置对象与方法
7_5 更精彩的查找_Visual VM对OQL的支持
7_5_1 Visual VM的OQL基本语法
7_5_2 内置heap对象
7_5_3 对象函数
7_5_4 集合/统计函数
7_5_5 程序化OQL分析Tomcat堆
7_6 小结
第08章 锁与并发
8_1 安全就是锁存在的理由_锁的基本概念和实现
8_1_1 理解线程安全
8_1_2 对象头和锁
8_2 避免残酷的竞争_锁在Java虚拟机中的实现和优化
8_2_1 偏向锁
8_2_2 轻量级锁
8_2_3 锁膨胀
8_2_4 自旋锁
8_2_5 锁消除
8_3 应对残酷的竞争_锁在应用层的优化思路
8_3_1 减少锁持有时间
8_3_2 减小锁粒度
8_3_3 锁分离
8_3_4 锁粗化
8_4 无招胜有招_无锁
8_4_1 理解CAS
8_4_2 原子操作
8_4_3 新宠儿LongAddr
8_5 将随机变为可控_理解Java内存模型
8_5_1 原子性
8_5_2 有序性
8_5_3 可见性
8_5_4 Happens-Before原则
8_6 小结
第09章 Class文件结构
9_1 不仅跨平台,还能跨语言_语言无关性
9_2 虚拟机的基石_Class文件
9_2_1 Class文件的标志_魔数
9_2_2 Class文件的版本
9_2_3 存放所有常数_常量池
9_2_4 Class的访问标记[Access Flag]
9_2_5 当前类、父类和接口
9_2_6 Class文件的字段
9_2_7 Class文件的方法基本结构
9_2_8 方法的执行主体_Code属性
9_2_9 记录行号_LineNumberTable属性
9_2_10 保存局部变量和参数_LocalVariableTable属性
9_2_11 加快字节码校验_StackMapTable属性
9_2_12Code属性总结
9_2_13 抛出异常_Exceptions属性
9_2_14 用实例分析Class的方法结构
9_2_15 我来自哪里_SourceFile属性
9_2_16 强大的动态调用_BootstrapMethods属性
9_2_17内部类_InnerClasses属性
9_2_18 将要废弃的通知_Deprecated属性
9_2_19Class文件总结
9_3 操作字节码_走进ASM
9_3_1 ASM体系结构
9_3_2 ASM之Hello World
9_4 小结
第10章 Class装载系统
10_1 来去都有序_看懂Class文件的装载流程
10_1_1 类装载的条件
10_1_2 加载类
10_1_3 验证类
10_1_4 准备
10_1_5 解析类
10_1_6 初始化
10_2 一切Class从这里开始_掌握ClassLoader
10_2_1 认识ClassLoader,看懂类加载
10_2_2 ClassLoader的分类
10_2_3 ClassLoader的双亲委托模式
10_2_4 双亲委托模式的弊端
10_2_5 双亲委托模式的补充
10_2_6 突破双亲模式
10_2_7 热替换的实现
10_3 小结
第11章 字节码执行
11_1 代码如何执行_字节码执行案例
11_2 执行的基础_Java虚拟机常用指令介绍
11_2_1 常量入栈指令
11_2_2 局部变量压栈指令
11_2_3 出栈装入局部变量表指令
11_2_4 通用型操作
11_2_5 类型转换指令
11_2_6 运算指令
11_2_7 对象/数组操作指令
11_2_8 比较控制指令
11_2_9 函数调用与返回指令
11_2_10 同步控制
11_2_11 再看Class的方法结构
11_3 更上一层楼_再看ASM
11_3_1 为类增加安全控制
11_3_2 统计函数执行时间
11_4 谁说Java太刻板_Java Agent运行时修改类
11_4_1 使用-javaagent参数启动Java虚拟机
11_4_2 使用Java Agent为函数增加计时功能
11_4_3 动态重转换类
11_4_4 有关Java Agent的总结
11_5 与时俱进_动态函数调用
11_5_1 方法句柄使用实例
11_5_2 调用点使用实例
11_5_3 反射和方法句柄
11_5_4 指令invokedynamic使用实例
11_6 跑得再快点_静态编译优化
11_6_1 编译时计算
11_6_2 变量字符串的连接
11_6_3 基于常量的条件语句裁剪
11_6_4 switch语句的优化
11_7 提高虚拟机的执行效率_JIT及其相关参数
11_7_1 开启JIT编译
11_7_2 JIT编译阈值
11_7_3 多级编译器
11_7_4 OSR栈上替换
11_7_5 方法内联
11_7_6 设置代码缓存大小
11_8 小结
::下载地址::
>> 评论