JVM原理(只是简单描述,但知识点全面)

来源:互联网 发布:鹰眼监控软件注册机 编辑:程序博客网 时间:2024/06/12 22:13

PS:下面的内容是来自“深入JVM内核—原理、诊断与优化”视频教程,只是简单整理,详细内容可以看回视频和PPT

 

1. JVM运行机制

1  JVM启动流程


2  JVM基本结构


3  内存模型


4  编译和解释运行的概念

解释运行

a)        解释执行以解释方式运行字节码

b)        解释执行的意思是:读一句执行一句

编译运行(JIT)

c)        将字节码编译成机器码

d)        直接执行机器码

e)        运行时编译

f)         编译后性能有数量级的提升

2. 常用JVM配置参数

1  Trace跟踪参数

2  堆的分配参数

3  栈的分配参数

-Xss

1  通常只有几百K

2  决定了函数调用的深度

3  每个线程都有独立的栈空间

4  局部变量、参数 分配在栈上

3. GC 算法与种类

1  GC的概念

                   GarbageCollection 垃圾收集

                   1960年 List 使用了GC

                   Java中,GC的对象是堆空间和永久区

2  GC算法

                   引用计数法(没有被Java采用)

                            老牌垃圾回收算法

                            通过引用计算来回收垃圾

                            使用者

                                      COM

                                     ActionScript3

                                     Python

                   标记清除

                            标记-清除算法是现代垃圾回收算法的思想基础。

                   标记压缩

                            标记-压缩算法适合用于存活对象较多的场合,如老年代。

                   复制算法

                            与标记-清除算法相比,复制算法是一种相对高效的回收方法

 

3  可触及性

4  Stop-The-World

                   Java中一种全局暂停的现象

                   全局停顿,所有Java代码停止,native代码可以执行,但不能和JVM交互

                   多半由于GC引起

                            Dump线程

                            死锁检查

                            堆Dump

4. GC参数

1  堆的回顾

2  串行收集器

                   最古老,最稳定

                   效率高

                   可能会产生较长的停顿

                   -XX:+UseSerialGC

                            新生代、老年代使用串行回收

                            新生代复制算法

                            老年代标记-压缩

3  并行收集器

                   1)ParNew

                            -XX:+UseParNewGC

                                     新生代并行

                                     老年代串行

                            Serial收集器新生代的并行版本

                            复制算法

                            多线程,需要多核支持

                            -XX:ParallelGCThreads限制线程数量

                   2)Parallel收集器

                            类似ParNew

                            新生代复制算法

                            老年代 标记-压缩

                            更加关注吞吐量

                            -XX:+UseParallelGC

                                     使用Parallel收集器+ 老年代串行

                            -XX:+UseParallelOldGC

                                     使用Parallel收集器+ 并行老年代

 

                            -XX:MaxGCPauseMills

                                     最大停顿时间,单位毫秒

                                     GC尽力保证回收时间不超过设定值

                            -XX:GCTimeRatio

                                     0-100的取值范围

                                      垃圾收集时间占总时间的比

                                     默认99,即最大允许1%时间做GC

                            这两个参数是矛盾的。因为停顿时间和吞吐量不可能同时调优

        

4  CMS收集器

                   ConcurrentMark Sweep 并发标记清除

                   标记-清除算法

                   与标记-压缩相比

                   并发阶段会降低吞吐量

                   老年代收集器(新生代使用ParNew)

                   -XX:+UseConcMarkSweepGC

5  Tomcat实例演示

5. 类装载器

 1  class装载验证流程

                   1)加载

                   2)链接

                            1.验证

                            2.准备(例如:分配内存)

                            3.解析(例如:符号引用替换为直接引用)

                   3)初始化

 

 2  什么是类装载器ClassLoader

                   ClassLoader是一个抽象类

                   ClassLoader的实例将读入Java字节码将类装载到JVM中

                   ClassLoader可以定制,满足不同的字节码流获取方式

                   ClassLoader负责类装载过程中的加载阶段

3  JDK中ClassLoader默认设计模式

                   BootStrapClassLoader (启动ClassLoader)

                   ExtensionClassLoader (扩展ClassLoader)

                   AppClassLoader (应用ClassLoader/系统ClassLoader)

                   CustomClassLoader(自定义ClassLoader)

 

                   每个ClassLoader都有一个Parent作为父亲

4  打破常规模式

5  热替换

                   当一个class被替换后,系统无需重启,替换的类立即生效

6. 1)系统性能监控

1  linux性能监控工具:

           1. sysstat(需要安装yum installsysstat)

 

2  windwos性能监控工具:

           1. 任务管理(windwos自带)

           2. perfmon(windwos自带)

           3. process explorer(需要安装)

           4. pslist 命令行工具(需要安装)

6. 2)Java自带的工具

         1.jps 列出java进程,类似于ps命令

         2.jinfo 可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数

         3.jmap 生成java应用程序的堆快照和对象的统计信息

         4.dump 把堆信息导出到文件,命令:jmap -dump:format=b,file=c:\heap.hprof 2972

         5.jstack 打印线程dump,jstack 120 >>C:\a.txt

         6.jconsole 图形化监控工具

         7.visual vm

7. Java堆分析

1  堆、永久区、线程栈、直接内存都会引起内存溢出(OOM)

2  使用MAT和Visual VM工具分析内存溢出(OOM)的原因

8. 锁

         1)线程安全

         2)对象头Mark

 

         1)偏向锁

         2)轻量级锁

         3)自旋锁

 

         1)减少锁持有时间

         2)减小锁粒度

         3)锁分离

         4)锁粗化

         5)锁消除

         6)无锁

 

         不是Java语言层面的锁优化方法

         内置于JVM中的获取锁的优化方法和获取锁的步骤:

                1)偏向锁可用会先尝试偏向锁

                2)轻量级锁可用会先尝试轻量级锁

                3)以上都失败,尝试自旋锁

                4)再失败,尝试普通锁,使用OS互斥量在操作系统层挂起

9. Class文件结构

1     语言无关性

2     文件结构

                   1)魔数

                   2)版本     

                   3)常量池

                   4)访问符

                   5)类、超类、接口

                   6)字段

                   7)方法

                   8)属性

10. JVM字节码执行

1  javap

2  简单的字节码执行过程

3  常用的字节码

4  使用ASM生成Java字节码

5  JIT及其相关参数

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 hcg值正常孕酮低怎么办 20号染色体三体怎么办 14号染色体三体怎么办 怀孕七个月不想要了怎么办 胎儿性染色体45x怎么办 16号染色体偏多怎么办 大拇指又短又宽怎么办 削山药皮皮肤痒怎么办 脊柱侧弯20度怎么办 27岁脊柱侧弯怎么办 右侧侧脑室增宽怎么办 左侧脑室增宽该怎么办 腿上的血管堵塞怎么办 做b超看不清骶尾怎么办 孕中期羊水过少怎么办 心脏办膜关闭不全怎么办 9个月胎儿脑积水怎么办 怀孕三个月胎盘低置怎么办 怀孕第一个月打针了怎么办 唐氏筛查神经管缺陷高风险怎么办 门诊处方笺丢了怎么办 孕中期睡觉手麻怎么办 怀孕2个月了没胎心胎芽怎么办 怀孕腿疼的厉害怎么办 孕妇老是失眠多梦怎么办 孕妇会失眠多梦怎么办 怀孕5个月睡不着怎么办 6个月孕妇失眠怎么办 彩超脉络丛囊肿怎么办 双侧脉络丛囊肿怎么办 唐筛神经管缺陷高风险怎么办 雌激素低怎么办吃什么东西补 我怀了狗的孩子怎么办 结婚2年不要孩子怎么办 备孕一直没怀孕怎么办 刚生的婴儿打嗝怎么办 小孩40天黄疸高怎么办 婴儿身高长得慢怎么办 四个月的宝宝哭怎么办 孕39周羊水偏多怎么办 孕39周羊水浑浊怎么办