---
### jvm学习与实战
《深入理解 Java 虚拟机》阅读笔记
https://github.com/TangBean/understanding-the-jvm
JVM 底层原理最全知识总结
https://github.com/doocs/jvm
尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)学习笔记
https://github.com/vectorxxxx/NOTE_JVM
jvm底层原理解析:
https://github.com/Programming-With-Love/JVMStudy
https://github.com/cucumber/cucumber-jvm
jvm案例:
https://github.com/JeffLi1993/jvm-core-learning-example
《Spring Boot 2.x 核心技术实战》
https://github.com/JeffLi1993/springboot-core-action-book-demo
https://github.com/JeffLi1993/springboot-learning-example
spring cloud 实践学习案例,是 spring cloud 初学者及核心技术巩固的最佳实践。
https://github.com/JeffLi1993/springcloud-learning-example
https://github.com/JeffLi1993/java-core-learning-example
https://github.com/JeffLi1993/fast-framework
https://github.com/aragozin/jvm-tools
https://github.com/bjmashibing/JVM
深入JVM虚拟机全书脑图
https://github.com/crazyweeds/JVM
《深入理解Java虚拟机(第3版)》样例代码&勘误
https://github.com/fenixsoft/jvm_book
https://github.com/deephacks/awesome-jvm
https://github.com/jvm-bloggers/jvm-bloggers
JUC、JMM核心知识点笔记
https://github.com/MaJesTySA/JVM-JUC-Core
jvm监控:
https://github.com/patric-r/jvmtop
Console-based JVM monitoring tool
https://github.com/ajermakovics/jvm-mon
《自己动手写Java虚拟机》随书源代码(还链接到其他作者实现的jvm)
https://github.com/zxh0/jvmgo-book
A toy JVM written in Go
https://github.com/zxh0/jvm.go
基于C++实现的jvm:
https://github.com/ArosyW/JVM
使用 JDK8 实现 JVM(Java Virtual Machine)
https://github.com/guxingke/mini-jvm
https://github.com/zhangkari/jvm
https://github.com/zachaxy/JVM
混沌实验的执行器
https://github.com/chaosblade-io/chaosblade-exec-jvm
Cucumber JVM with Selenium Java
https://github.com/machzqcq/CucumberJVMExamples
java内存泄漏的案例:
https://github.com/francistao/LearningNotes/blob/master/Part2/JavaSE/Java%E4%B8%AD%E7%9A%84%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F.md
---
---
### jvm class loader
```
A class loader is an object that is responsible for loading classes,
is also responsible for locating resources.
classLoader.getClassLoader();
the classLoader of an array;
JVM内置的ClassLoader:
BootstrapClassLoader,PlatformClassLoader,SystemClassLoader;
Class<?> loadClass(String name, boolean resolve);
Loads the class with the specified binary name. The default implementation of this method searches for classes in the following order:
Invoke findLoadedClass(String) to check if the class has already been loaded.
Invoke the loadClass method on the parent class loader. If the parent is null the class loader built into the virtual machine is used, instead.
Invoke the findClass(String) method to find the class.
If the class was found using the above steps, and the resolve flag is true, this method will then invoke the resolveClass(Class) method on the resulting Class object.
Subclasses of ClassLoader are encouraged to override findClass(String), rather than this method.
Class<?> loadClass(String name,boolean resolve)
default implementation:
1,findLoadedClass(name);
2,parentLoadClass(name);
3,findClass(name);
4,resolveClass(clazz);
Converts an array of bytes into an instance of class Class. Before the Class can be used it must be resolved.
Class<?> defineClass(String name, byte[] b, int off, int len);
Links the specified class;
用于对 Class 进行 链接,也就是把单一的 Class 加入到有继承关系的类树中。如果你想在类被加载到 JVM 中时就被链接(Link),那么可以在调用 defineClass() 之后紧接着调用一个 resolveClass() 方法,当然你也可以选择让 JVM 来解决什么时候才链接这个类(通常是真正被实实例化的时候)。
void resolveClass(Class<?> c);
Finds the resource with the given name.
URL getResource(String name);
Enumeration<URL> getResources(String name);
URL findResource(String name);
Enumeration<URL> findResources(String name);
InputStream getResourceAsStream(String name);
```

```
Class.forName(String name,bool initialize,ClassLoader classLoader);
```
---
### java命令行
```
java <jdk定义的参数> -jar <MainJar> <用户自定义参数>
```
---
### 排查、解决问题的思维方法
复现问题,分析原因,调研解决方案;
平时基本不出现,偶然出现的某种异常,很可能是环境或硬件故障;
数据库异常要考虑硬盘异常,日志;
排查系统故障要考虑定位整个链路,细致分析每个节点,逐步缩小范围;
汇报:问题,解决方法,效果,提炼;
---
jvm异常排查:
```
尝试用visualvm监控jvm;
visualvm,arthas,jmc,jfr,jprofiler,jcmd,jstack;
heap_dump--visualvm,jmap,jhat,mat;
gc--jstat;
gc日志分析:gceasy,gcviewer,visualvm;
```
jvm参数:
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/tutorial-Xlog/html/index.html
jdk11的jvm参数:
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/tutorial-Xlog/html/index.html
---
---
### JVM异常退出
https://blog.csdn.net/BASK2312/article/details/131210493

这三类场景中,正常关闭和异常关闭,JVM 可以感知。可以通过 ShutdownHook 或者 SignalHandler 做一些善后工作。
强制关闭 JVM 则感知不到,无法做善后的工作,退出后会造成哪些影响都很难预估;
---
arthas排查jvm案例:
https://blog.csdn.net/weixin_31257709/article/details/131300641
https://blog.csdn.net/java_lujj/article/details/126885226?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-126885226-blog-131300641.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-126885226-blog-131300641.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=2
https://blog.csdn.net/qq_45443475/article/details/127305299?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-127305299-blog-126885226.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-127305299-blog-126885226.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=1
https://blog.csdn.net/z2926781/article/details/126657938?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-126657938-blog-113002161.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-126657938-blog-113002161.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=2
https://blog.csdn.net/weixin_42070243/article/details/133272167?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-133272167-blog-126657938.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-133272167-blog-126657938.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=5
https://lizz6.blog.csdn.net/article/details/132599118?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-132599118-blog-113002161.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-132599118-blog-113002161.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=5
https://blog.csdn.net/beiduofen2011/article/details/124135665
https://blog.csdn.net/lanzhupi/article/details/114416203?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-114416203-blog-112450485.235^v38^pc_relevant_anti_t3_base&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://blog.csdn.net/aop_ioc/article/details/129862439?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-129862439-blog-126657938.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-5-129862439-blog-126657938.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=7
https://blog.csdn.net/cmw1085215666/article/details/129446061?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-129446061-blog-126657938.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-129446061-blog-126657938.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=8
https://lizz6.blog.csdn.net/article/details/132599118?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-132599118-blog-113002161.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-132599118-blog-113002161.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=5
https://blog.csdn.net/qq_43692950/article/details/122698295?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-122698295-blog-131300641.235^v38^pc_relevant_anti_t3_base&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://blog.csdn.net/qq_43692950/article/details/122698295?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-122698295-blog-131300641.235^v38^pc_relevant_anti_t3_base&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://blog.csdn.net/AiMaiShanHuHai/article/details/104049997?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-104049997-blog-131300641.235^v38^pc_relevant_anti_t3_base&spm=1001.2101.3001.4242.3&utm_relevant_index=7
https://blog.csdn.net/qq_43692950/article/details/122688520
https://blog.csdn.net/zhuqiuhui/article/details/128513480?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-128513480-blog-131300641.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-10-128513480-blog-131300641.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=14
https://www.zhihu.com/question/484689143
arthas:
观察总体情况:dashboard;
排查cpu/线程问题:thread,profiler(火焰图);
内存问题:profiler;
排查堆内存问题:heapdump;
排查直接内存问题:启动时添加jvm参数NMT;
查看方法调用问题:trace,stack,monitor,watch,tt;
热加载:jad,mc,retransform/redefine;
类加载:sc,sm;
jmc教程:
https://docs.oracle.com/en/java/java-components/jdk-mission-control/8/user-guide/installing-jdk-mission-control-and-supported-plugins.html#GUID-AE96396D-391A-4CA1-A7D1-68A01CC6F015
https://zhuanlan.zhihu.com/p/126567196
java的内存异常排查方案:
https://www.zhihu.com/question/484689143
https://blog.csdn.net/u012811805/article/details/104737895/
mat:
https://zhuanlan.zhihu.com/p/585668729
https://zhuanlan.zhihu.com/p/627285895
https://blog.csdn.net/taiyuanwuyin/article/details/53404124
https://cloud.tencent.com/developer/article/1398524
### 性能分析工具:
perf,gperftools
https://zhuanlan.zhihu.com/p/646157809
https://zhuanlan.zhihu.com/p/539840046
---
springboot-devtools:
https://zhuanlan.zhihu.com/p/404274941
https://zhuanlan.zhihu.com/p/621159321
https://zhuanlan.zhihu.com/p/539897820
Tomcat源码解读系列(四)——Tomcat类加载机制概述
https://www.iteye.com/blog/lengyun3566-1683972
tomcat日志:
https://mp.weixin.qq.com/s?__biz=MzU3MTAzNTMzMQ==&mid=2247487447&idx=1&sn=25420305c8d0254c0c530a0b5a3ab94e&chksm=fce7147bcb909d6d4d3fd0f9282e45e115402cf4676fe8d0dfe8690f877f09f1c29eb2d2a7d8&scene=27
https://www.cnblogs.com/wang-yaz/p/10030357.html
https://blog.csdn.net/web15285868498/article/details/124347503
---
### jvm参数案例
```
-XX:MaxDirectMemorySize=400m -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/uih-log/uap-report/cetus/gc/ -Xlog:gc*:/home/uih-log/uap-report/cetus/gc/gc.log -XX:+PrintGCDetails -XX:+UseG1GC -XX:ErrorFile=/home/uih-log/uap-report/cetus/gc/err.log
-XX:NewRatio=n
-Xms2G -Xmx2G -Xlog:gc*=info,gc+heap=debug,gc+age=trace,safepoint:/logs/gc_%t.log:time,level,tags:filecount=5,filesize=20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/
-XX:SurvivorRatio=3
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./gc_dump/gc.hprof
java -Xmx256M -XX:MaxDirectMemorySize=128M -Xss1M -Dcom.sun.management.jmxremote.port=38010 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.6.128.1 -jar BootApp.jar --server.port=60090
```
---
### jdk的默认jvm配置查看:
https://www.jb51.net/program/285712bd3.htm#_label1
https://developer.aliyun.com/article/1252371
```
//jdk.version<=8;
java -XX:+PrintGCDetails -version
//jdk.version>=9
java -Xlog:gc* -version
```
---
### 测试排查问题的案例:
需要明确如下问题:
1,800MB内存可支持多少dicom删除;
2,实现指定的dicom并发删除,需要多少内存;
3,技术指标不变,系统资源有限指定,代码如何优化;
---
jmc:
https://www.cnblogs.com/jmcui/archive/2020/03/19/12523822.html
https://blog.csdn.net/qq359605040/article/details/119992385
https://blog.csdn.net/weixin_35890852/article/details/114063041?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-114063041-blog-119992385.235^v39^pc_relevant_3m_sort_dl_base2&spm=1001.2101.3001.4242.3&utm_relevant_index=7
https://zhuanlan.zhihu.com/p/65325962
jvm内存模型:
https://zhuanlan.zhihu.com/p/490465757
https://zhuanlan.zhihu.com/p/58387104
https://zhuanlan.zhihu.com/p/452175089
Java 应用线上问题排查思路、工具小结
https://zhuanlan.zhihu.com/p/140742113
https://zhuanlan.zhihu.com/p/426496473
https://zhuanlan.zhihu.com/p/565918672
https://zhuanlan.zhihu.com/p/65325962?utm_source=wechat_session
netty+websocket:
https://www.cnblogs.com/jmcui/p/9600533.html
---
### JMC
[jmc](./my_docs/jvm_tools.md)
---
### JMX,Java Management Extensions
管理和监控系统资源的标准化框架;
https://blog.csdn.net/zhangwei_david/article/details/84725205
https://mikechen.cc/17310.html
https://www.modb.pro/db/77634
https://blog.csdn.net/weixin_45866849/article/details/123476439
https://www.liaoxuefeng.com/wiki/1252599548343744/1282385687609378
https://baijiahao.baidu.com/s?id=1668247436055457456&wfr=spider&for=pc
https://blog.csdn.net/DH719491759/article/details/116585911?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-116585911-blog-123476439.235^v39^pc_relevant_3m_sort_dl_base2&spm=1001.2101.3001.4242.4&utm_relevant_index=8
---
### 应用系统优化
硬件,操作系统,数据库(mysql,redis),数据库访问组件,应用程序(按规范即可);
### 优秀的技术专家
发现痛点,解决痛点,汇报;
业务,行业,竞对分析;
### 硬件性能问题
需要考虑两个方面:容量,io速率;
cpu,内存容量,内存io,硬盘io,网卡io;
进程、线程;
### jdk官方教程可在jdk安装目录下的README.html找到
https://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.html#FileSyntax
### The Basics of Java Security
https://www.baeldung.com/java-security-overview
---
### Linux内核源码剖析—TCP/IP实现
### jvm,agent:
https://unstopable.blog.csdn.net/article/details/128416710?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-128416710-blog-8073172.235%5Ev39%5Epc_relevant_3m_sort_dl_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-128416710-blog-8073172.235%5Ev39%5Epc_relevant_3m_sort_dl_base2&utm_relevant_index=3&ydreferer=aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Fobmd6dzc3L2FydGljbGUvZGV0YWlscy84MDczMTcyP3NwbT0xMDAxLjIxMDEuMzAwMS42NjUwLjMmdXRtX21lZGl1bT1kaXN0cmlidXRlLnBjX3JlbGV2YW50Lm5vbmUtdGFzay1ibG9nLTIlN0VkZWZhdWx0JTdFQmxvZ0NvbW1lbmRGcm9tQmFpZHUlN0VSYXRlLTMtODA3MzE3Mi1ibG9nLTUxOTU2ODg4LjIzNSU1RXYzOSU1RXBjX3JlbGV2YW50XzNtX3NvcnRfZGxfYmFzZTImZGVwdGhfMS11dG1fc291cmNlPWRpc3RyaWJ1dGUucGNfcmVsZXZhbnQubm9uZS10YXNrLWJsb2ctMiU3RWRlZmF1bHQlN0VCbG9nQ29tbWVuZEZyb21CYWlkdSU3RVJhdGUtMy04MDczMTcyLWJsb2ctNTE5NTY4ODguMjM1JTVFdjM5JTVFcGNfcmVsZXZhbnRfM21fc29ydF9kbF9iYXNlMiZ1dG1fcmVsZXZhbnRfaW5kZXg9NA%3D%3D&ydreferer=aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Fobmd6dzc3L2FydGljbGUvZGV0YWlscy84MDczMTcyP3NwbT0xMDAxLjIxMDEuMzAwMS42NjUwLjMmdXRtX21lZGl1bT1kaXN0cmlidXRlLnBjX3JlbGV2YW50Lm5vbmUtdGFzay1ibG9nLTIlN0VkZWZhdWx0JTdFQmxvZ0NvbW1lbmRGcm9tQmFpZHUlN0VSYXRlLTMtODA3MzE3Mi1ibG9nLTUxOTU2ODg4LjIzNSU1RXYzOSU1RXBjX3JlbGV2YW50XzNtX3NvcnRfZGxfYmFzZTImZGVwdGhfMS11dG1fc291cmNlPWRpc3RyaWJ1dGUucGNfcmVsZXZhbnQubm9uZS10YXNrLWJsb2ctMiU3RWRlZmF1bHQlN0VCbG9nQ29tbWVuZEZyb21CYWlkdSU3RVJhdGUtMy04MDczMTcyLWJsb2ctNTE5NTY4ODguMjM1JTVFdjM5JTVFcGNfcmVsZXZhbnRfM21fc29ydF9kbF9iYXNlMiZ1dG1fcmVsZXZhbnRfaW5kZXg9NA%3D%3D
### JVM实战合集:
https://blog.csdn.net/basycia/category_6304603.html
### jdk8:
https://www.oracle.com/java/technologies/downloads/archive/
https://www.oracle.com/java/technologies/javase/8u-relnotes.html
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
---
---