第五章:调优案例分析与实战

本文是深入理解Java虚拟机-读书笔记系列的文章,查看所有文章目录可以点击该超链接查看。

1. 高性能硬件上的程序部署策略

一个PV比较大的网站,有时候长时间失去响应,这是由于GC造成。JVM默认使用PS这种吞吐量优先收集器,一次full GC停顿高达14秒。程序设计导致大量较大的文档数据驻留在内存。

心得:如果full GC比较少、绝大多数对象的存活时间都比较短,才建议使用较大的堆。否则GC的开销会比较大,有较长的时间停顿。

2. 集群间同步导致的内存溢出

由于集群同步大量数据,导致数据过多,而超过内存限制。

心得:

发生OOM的时候自动生成堆du......

第四章:虚拟机性能监控与故障处理工具

本文是深入理解Java虚拟机-读书笔记系列的文章,查看所有文章目录可以点击该超链接查看。

这部分的内容之前我有文章写过了,具体可以查看:

JVM调优排错工具jps、jstack、jmap、jhat、jstat、jvisualvm等的使用

PS: jhat在JAVA9中要被移除,该命令的功能可以用其他命令代替,所以可以不用看了。

关于《深入理解Java虚拟机》的书中第四章,以下内容可以了解下:

HSDIS反汇编插件: 工具下载的话可以去HLLVM看看,具体用法可以参考书上的P112-P114的内容

书上没有详细写thread dump和heap dump如何操......

第三章:jvm中的垃圾收集器

1. jvm垃圾收集器概览

垃圾收集器是垃圾收集算法的具体实现。本节讨论的收集器基于JDK 1.7 update 14之后。由下图可知,现在都采取这样的分代收集方式。有实现连接的收集器说明可以搭配使用。现在还没有最好的垃圾收集器,他们各有优劣。

2. Serial收集器

最基本、发展历史最悠久的收集器,是Client模式下默认的新生代收集器。运行示意图如下。

......

第三章:java内存分配与回收

1. 概览

具体对象的内存分配规则取决于垃圾收集器的组合,还有JVM内存相关的参数设定。本节讨论几种常见的内存分配与回收策略。

2. 对象优先在Eden分配

Eden区没有足够空间进行分配,将会进行一次Minor GC。Minor GC在新生代回收,发生在老年代的full GC一般比minor GC慢10倍

3. 大对象优先在老年代分配

要尽量避免朝生夕死的大对象。设置参数

-XX: PretenureSizeThreshold可以使得超过这个大小的直接在老年代分配,而且这个参数只对Serial和ParNew收集器有效。可以在ParNew+CMS场景试用。该参数单位是......

第三章:HotSpot算法实现分析

1. 枚举根节点

可达性分析对执行时间的敏感体现在GC停顿上,这项工作必须再一个能确保一致性的快照中进行。这里“一致性”指在整个分析期间整个系统看起来就像被冻结在某个时间点上,不可以出现分析过程中对象引用关系还在不断变化的情况。这导致GC进行必须停顿所有Java执行线程,这个称为“Stop The World”。当然执行系统停顿下来后,不需要一个不漏地检查完所有执行上下文和全局的引用位置,VM通过一组OopMap数据结构可以得知哪些地方存放着对象的引用,减少可达性分析代价。

2. 安全点(Safe Point)

为每一条指令都生成对应OopMap会占用额外空间,因此VM只在特定位......