Jvm虚拟机知识

########二Jvm虚拟机知识详解##############################
一.Java HotSpot™ 64-bit client VM改成 server VM
jdk1.7 --> jdk/jre/lib/i386

二.jvm结构
jvm结构图:

类加载子系统:
负责从文件系统或者网络中加载Class信息。
方法区:
存放类信息和常量池信息
java栈:
每一个java虚拟机线程都一个私的java栈。
java栈中保存着局部变量、方法参数。
java堆:
存放java对象实例。主要有:年轻代(Eden、s0、s1)、老年代(old)、持有代(permanen)

直接内存:
java的NIO库允许java程序使用直接内存。
直接内存是在java堆外的、直接向系统申请的内存空间。
读写频繁的场合使用。
本地方法栈:
本地方法栈则用于本地方法的调用(通常使用C编写)。
垃圾回收系统:
次收集器(serial、 ParNew、 Parallel Scavenge)
全收集器(cms、 serial old、 Parall old )
G1

PC寄存器:
是每一个线程私的空间。
如果当前方法是本地方法,PC寄存器的值就是undefined。
如果当前方法不是本地方法,PC寄存器就会指向当前正在被执行的指令。

执行引擎:
Java HotSpot Client VM(-client)
Java HotSpot Server VM(-server)

三.jvm堆结构图及分代
jvm堆结构图:

jvm堆分代:
新生代:
HotSpot将新生代划分为块,一块较大的Eden(伊甸空间和两块较小的Survivor(幸存者空间,默认比例为8:1:1。
当Eden区没足够的空间进行分配时,虚拟机将发起一次Minor GC。
老年代:
在新生代中经历了多次(具体看虚拟机配置的阀值GC后仍然存活下来的对象会进入老年代中。
进行GC的频率低,回收速度比较慢。
永久代:
永久代存储类信息、常量、静态变量、即时编译器编译后的代码等数据。
Java虚拟机规范指出可以不进行垃圾收集,一般而言不会进行垃圾回收。

四.垃圾回收常见算法
(1)引用计数算法:
此算法最致命的是无法处理循环引用的问题。
(2)复制算法:

(3)标志清除算法:

(4)标记整理:

五.jvm垃圾收集器
次收集器
serial[串行收集器,单个gc线程。复制算法。]、
ParNew[并行收集器,多个gc线程。复制算法。]、
Parallel Scavenge[ParNew类似。关注系统吞吐量(运行用户代码时间/(运行用户代码时间+垃圾收集时间))]
全收集器
Concurrent Mark Sweep
[
并发收集器,标志清除算法。GC过程分为以下4个步骤:
1.初始标记(CMS initial mark)
2.并发标记(CMS concurrent mark: GC Roots Tracing过程)
3.重新标记(CMS remark)
4.并发清除(CMS concurrent sweep: 已死对象将会就地释放, 注意:此处没压缩)
]
serial old[串行收集器,单个gc线程。标记整理算法]
Parall old[使用多线程和“标记-整理”算法, 吞吐量优先]
G1[分区收集]


六.JVM优化
(1)JDK常用JVM优化相关命令
jvisualvm
jdk中最强大运行监视和故障处理工具
监控内存泄漏、跟踪垃圾回收、执行时内存分析、cup分析、线程分析。
(2)visualgc插件
已下载->添加插件->安装。
(3)JVM常见参数
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:设置年轻代大小
-Xss: 设置每个线程的Java栈大小
-XX:NewSize=n:设置年轻代大小。如:为3,表示年轻代与年老代比值为1:3。
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小
-XX:MaxTenuringThreshold:设置垃圾最大年龄

发布了20 篇原创文章 · 获赞 0 · 访问量 1197

猜你喜欢

转载自blog.csdn.net/jinhuding/article/details/104993579