# 39_jvm_projs **Repository Path**: linux2014/39_jvm_projs ## Basic Information - **Project Name**: 39_jvm_projs - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-25 - **Last Updated**: 2023-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- ### 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 getResources(String name); URL findResource(String name); Enumeration findResources(String name); InputStream getResourceAsStream(String name); ``` ![](./my_docs/class_loader.png) ``` Class.forName(String name,bool initialize,ClassLoader classLoader); ``` --- ### java命令行 ``` java -jar <用户自定义参数> ``` --- ### 排查、解决问题的思维方法 复现问题,分析原因,调研解决方案; 平时基本不出现,偶然出现的某种异常,很可能是环境或硬件故障; 数据库异常要考虑硬盘异常,日志; 排查系统故障要考虑定位整个链路,细致分析每个节点,逐步缩小范围; 汇报:问题,解决方法,效果,提炼; --- 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 ![](./my_docs/jvm_err_exit.png) 这三类场景中,正常关闭和异常关闭,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 --- ---