总结:深入理解java虚拟机(一)

本人jvm小白,前段时间想学习下jvm的知识,于是找到了《深入理解java虚拟机——jvm高级特性与最佳实践》这本书,目前看了将近一半了,觉得这本书比较适合jvm初级接触者,能从中学习到许多基础的东西;

下面就将第一阶段看的内容总结一下:
(1)第一部分:走进java
这一部分是介绍了java的发展史和jvm的发展史

a)
JDK:java程序设计语言 + jvm + java api类库
JRE:jvm + java api类库
要想pc上跑java代码,只要jre就可以了,开发的话需要jdk

b)java所包含的东西和java发展史
《总结:深入理解java虚拟机(一)》
《总结:深入理解java虚拟机(一)》

c)jvm发展史
目前最优秀的2款jvm是JRockit和HotSpot,目前都被Oracle收购了,目前已经慢慢将JRockit的优点向HotSpot转移,整合到一个了;

d)作者展望了一下java未来的发展趋势
模块化(jigsaw) + 混合语言 + 并行 + 丰富的语法 + 64位虚拟机
看来预测的比较准确呢

e)编译jdk,有兴趣的可以试一下~

(2)第二部分:自动内存管理机制
这一部分主要介绍了java内存区域,gc,虚拟机故障处理和调优

a)java虚拟机运行时数据区
《总结:深入理解java虚拟机(一)》

b)常见异常
OOM:OutOfMemoryError
堆溢出,虚拟机栈和本地方法栈溢出,方法区和运行时常量区溢出,本机直接内存溢出

c)怎样判断对象可以回收
引用计数法:难解决对象间循环引用
可达性分析法:可解决循环应用问题

d)垃圾回收算法有哪些
标记清除
复制
标记整理
标记清除整理
分代收集

e)垃圾收集器
Serial
ParNew
Parallel Scavenge

CMS
Serial Old
Parallel Old

G1
《总结:深入理解java虚拟机(一)》

f)gc的一些配置参数
VM_OPTS=”-Duser.timezone=GMT+08
-XX:-UseAdaptiveSizePolicy
-Xmx3072m
-Xms2304m
-Xmn1152m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:SurvivorRatio=8
-Xss1m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=KaTeX parse error: Expected ‘EOF’, got ‘\ ‘ at position 26: …R}/oomheap.bin \̲ ̲-XX:+UseParNewG…{JVMLOG_DIR}/gc-KaTeX parse error: Expected ‘EOF’, got ‘\ ‘ at position 10: DATE.log \̲ ̲-XX:ErrorFile={JVMLOG_DIR}/hs_error%p.log
-Xnoclassgc”

g)虚拟机的一些辅助工具
命令行工具:命令行
jps查看进程
《总结:深入理解java虚拟机(一)》
jstat主要用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等
《总结:深入理解java虚拟机(一)》
《总结:深入理解java虚拟机(一)》
jinfo查看虚拟机的各项参数信息
《总结:深入理解java虚拟机(一)》
jmap用于生成堆快照(heapdump)
《总结:深入理解java虚拟机(一)》
《总结:深入理解java虚拟机(一)》
jhat是用来分析dump文件的一个微型的HTTP/HTML服务器(然而实际中我们很少使用这个工具,因为一般服务器上设置的堆、栈内存都比较大,生成的dump也比较大,直接用jhat容易造成内存溢出)

jstack用于JVM当前时刻的线程快照:jstack -l 4436
《总结:深入理解java虚拟机(一)》
可视化工具:
jconsole
《总结:深入理解java虚拟机(一)》
jvisualvm
《总结:深入理解java虚拟机(一)》

h)调优案例
这一部分内容要亲身经历才能体会,我也遇到过几次线上问题,每次都好难找出原因QAQ

ig牛逼!

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/github_36301064/article/details/83959880
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞