既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 打印堆快照: jmap -dump:file=./dumpfile.dump 进程pid
- 查看特定类所占用的情况: jmap -histo:live 进程pid | grep 类名
Q: 用jmap检查内存泄漏实例
我分了3次,每个1h调用jmap查看进程的内存实例,查看该时刻各对象数量
第一次查看情况如下:
第二次隔了2各小时,查看情况如下:
请问哪个对象可能有内存泄漏风险?
A:
ObjectA可能有泄露, 因为他的对象数量增加最快,说明对象一直在增加且很多无法进行gc释放。
§ jhat
全称: JVM Heap Analysis Tool
和jmap配合, 可以解析jmap生成的堆快照, 支持生成1个web进程供我们分析和查看。
命令用法:
- jhat -J-Xmx515M dumpfile.dump
此时就会启动1个webServer,然后我们去访问就行了
§ jdb
全称:Java Debugger
作用:用来对core文件和正在运行的Java进程进行实时地调试,类似于c++里的gdb
常见用法:
- 启动进程并调试: jdb -classpath . Test
- 至二级调试某进程: jdb -attach 8000 -sourcepath /Users/wefit/Development/study/java/jtest/src/
§ jcmd
作用:多功能的工具,可以用它来导出堆、查看Java进程、导出线程信息、执行GC、还可以进行采样分析,可以理解为1个性能调优时用的工具。
常见命令:
- 查看 当前机器上所有的 jvm 进程信息: jcmd -l
- 查看指定进程的性能统计信息: jcmd pid PerfCounter.print
- 列出当前运行的 java 进程可以执行的操作: jcmd PID help
- 查看线程堆栈信息: jcmd PID Thread.print
- 查看堆内存信息: jcmd PID GC.heap_dump FILE_NAME
§ jps
简单记法: JVM process status
全名:Java Virtual Machine Process Status Tool
作用: 显示 当前系统用户 的 所有 Java进程情况及其进程号
常用命令:
- 查看进程jvm参数: jps -v
- 输出程序main class的完整package名或程序的jar文件完整路径名: jps -l
- 输出传递给main方法的参数: jps -m
§ jinfo
jvm infomation
作用:和jps功能类似, 但是支持根据指定pis查看指定进程
- 可以查看JVM参数、系统参数、调整jvm参数
- 但不支持查看java程序的内存使用情况
§ javap
把java字节码文件反汇编为Java源码文件。
§ javac
java编译工具
javac的执行过程:
§ JDK可视化工具
§ jconsole
可监控jvm,即可监控本地jvm也可监控远程jvm,管理应用程序,可以检查死锁等诸多问题。
§ jvisualvm
Q:
- jvisualvm可以监控远程服务器的运行状态
- 可以在java程序运行起来后再运行, 通过某些协议连接到java进程中。
- 运行时, 可以不需要配置配置环境、虚拟机参数等。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
里获取](https://bbs.csdn.net/topics/618668825)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!