JZOJ8月8日提高组反思
Posted h-k-h
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JZOJ8月8日提高组反思相关的知识,希望对你有一定的参考价值。
JVM内存模型
- 堆:对象。
- 栈:局部变量,操作数栈,动态连接,方法的返回地址。
- 方法区:常量,静态变量,类信息。
- 本地方法栈:Native方法。
- 程序计数器:字节码的访问地址。
类加载过程
- 过程:1、加载:生成class对象;2、验证;3、准备:static变量分配内存和初始值;4、解析:符号引用替换为直接引用;5、初始化:父类没初始化需先初始化。(
家宴准解出
)
双亲委派机制
- 父类加载,不重复加载。
- 自定义--应用程序--扩展--启动。
分代回收
- 新生代(Eden/s1/s2),老年代,永久代/元空间。
- 晋升机制根据对象存活时间。
垃圾回收器
-
CMS(标记清除):初始化标记,并发标记,重新标记,标记清除,标记重置。
-
G1(复制+标记清除):新生代和老年代不再隔离。
full gc的时机
- 老年代/永久代空间不足。
- System.gc()方法。
- 晋升老年代的大小大于老年代的剩余空间。
性能调优
- 目的:减少gc,stw。
- 方法:设置堆的最大最小值,调整新生代与老年代的比例,配置高可以设置并发收集算法。
oom种类
- 对象太多没有释放。
- 线程创建太多没有释放。
- fd太多,一个进程1024个fd。
逃逸分析
- 依据:对象被赋值给堆中对象的字段或类的静态变量(其他线程访问时编译器无法追踪);位于不确定的代码中(保守处理)。
JVM调优的情况
- 线程死锁
- 锁竞争
- CPU过高
- 内存泄露
JVM指令与工具
- jps:查看java进程概述
- jstat -gcutil [pid] [时间间隔]:根据进程id查看进程的详细情况
- jstack [pid]:查看进程中的线程运行状况
- jmap -dump:file=[文件名] pid:将进程运行的状况dump到文件中,文件通过fastThread线上工具分析。
- jmap -heap [pid]:打印进程的堆内存信息
- jconsole和visual VM工具
以上是关于JZOJ8月8日提高组反思的主要内容,如果未能解决你的问题,请参考以下文章
;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk