
JVM系列
通过BAT强制性考试系列: JVM垃圾收集器的7个功能,优缺点和使用场景
通过BAT强制考试系列: 4种垃圾收集算法,垃圾收集机制和JVM总结
通过BAT强制考试系列: JVM内存模型和JVM参数配置的深入详细说明
JVM内存调整

对JVM内存进行系统级调整的主要目的是减少GC的频率和Full GC的数量.
1. 完整GC
整个堆将被排序,包括Young,Tenured和Perm. Full GC速度很慢,因为它需要回收整个堆,因此应尽可能减少Full GC的数量.
2. 启用GC的原因
1)终身代已满

调整时,请尝试让对象在年轻一代的GC中回收,让这些对象在年轻一代中生存更长的时间,并且不要创建太大的对象和数组,以免直接在对象中创建对象. 老一辈.
2)空间不足,无法持续生成Pemanet
增加Perm Gen空间,避免过多的静态对象,并控制年轻一代与老一代的比例
3)明确调用System.gc()
请勿手动触发垃圾回收,请尝试依赖JVM自身的机制
在调整JVM的过程中,大部分工作是对FullGC的调整. 下面详细描述了相应的JVM调整方法和步骤.
JVM性能调整方法和步骤

1. 监视GC的状态
根据每个区域的实际内存划分和GC执行时间,使用各种JVM工具查看当前日志,分析当前JVM参数设置以及分析当前堆内存快照和gc日志,是否进行优化.
一个例子: 系统崩溃之前的一些现象:

此后,系统将无法响应新请求,并将逐渐达到OutOfMemoryError的临界值. 这时,有必要分析JVM内存快照转储.
2. 生成堆转储文件
通过JMX MBean生成当前的堆信息. 该大小是3G(整个堆的大小)hprof文件. 如果未启动JMX,则可以使用Java jmap命令生成文件.
3. 分析转储文件
打开此3G堆信息文件. 显然,普通的Window系统没有这么大的内存. 必须借助高配置Linux和一些工具将其打开:
注意: 文件太大. 建议使用Eclipse的特殊静态内存分析工具Mat打开分析.
4. 分析结果并确定是否需要优化
如果参数设置合理,系统没有超时日志,GC频率不高以及GC时间不高,则无需优化GC. 如果GC时间超过1-3秒或频繁使用GC,则必须对其进行优化.
注意: 如果满足以下指标,则通常不需要GC:
5. 调整GC类型和内存分配
如果内存分配太大或太小,或者使用的GC收集器速度很慢,则应首先调整这些参数,并首先找到一台或几台用于beta的计算机,然后将优化的计算机与未优化的计算机进行比较. 机器的性能,并做出有针对性的最终选择.

6. 不断的分析和调整
通过不断的反复试验,分析并找到最合适的参数. 如果找到最合适的参数,则这些参数将应用于所有服务器.

cms参数优化步骤过程
让我继续介绍JVM的关键参数配置(仅供参考).
JVM调整参数参考
1. 关于JVM堆设置,最小值和最大值通常可以由-Xms -Xmx限制. 为了防止垃圾收集器在最小和最大之间缩小堆并产生额外的时间,通常将最大值和最小值设置为相同的值;
2. 年轻一代和老一代将根据默认比率(1: 2)分配堆内存. 可以通过调整两者之间的比例NewRadio或生成集合来调整两者之间的大小.
例如对于年轻一代,通过-XX: newSize -XX: MaxNewSize设置绝对大小. 同样,为了防止年轻一代缩小堆,我们通常将-XX: newSize -XX: MaxNewSize设置为相同大小.
3. 将年轻一代和老一代设为合理是合理的
1)较大的后代将不可避免地导致较小的后代. 年轻的一代将延长普通GC的期限,但会增加每个GC的时间;小的后代会导致更频繁的Fulls GC

2)较小的年轻一代将不可避免地导致较大的老年一代,较小的年轻一代将导致普通GC的出现非常频繁,但是每个GC的时间将缩短. 大型的后代将减少Full GC的频率
如何选择应取决于应用程序对象生命周期的分布: 如果应用程序具有大量临时对象,则应选择较大的年轻代;如果存在较多的持久对象,则应适当增加旧一代. 但是许多应用程序没有这种明显的特征.
选择应基于以下两点:
(1)遵循尽可能少的Full GC的原则,让旧一代缓存尽可能多的常用对象. JVM的默认比率是1: 2.
(2)通过观察一段时间的应用程序,以查看其他老一代在高峰时间将占用多少内存,而不影响Full GC,例如,根据实际情况增加年轻一代,例如,您可以将比例控制为1: 1. 但是,至少有1/3的增长空间应该留给老一辈.
4. 在配置良好的计算机(例如多核,大内存)上,您可以为旧版本选择并行收集算法: -XX: + UseParallelOldGC.
5. 线程堆栈设置: 默认情况下,每个线程将打开1M堆栈以存储堆栈帧,调用参数,局部变量等. 对于大多数应用程序,此默认值太大,通常256K即可.
理论上,在内存相同的情况下,减少每个线程的堆栈可以生成更多的线程,但这实际上受操作系统的限制.
更多高并发架构设计主题

如何获取信息
跟随+转发后,可以获得私密消息关键字[高并发性!]
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-300847-1.html
郑秀晶美炸了
竟然有五条优质高蛋白