jvm学习总结

1.虚拟机

操作系统虚拟机,vmware、visual box等;

程序虚拟机,java虚拟机

2.Java虚拟机组成结构

类加载子系统(方法区(类信息)、堆(java实例对象)、直接内存(nio));垃圾回收系统;栈(局部变量、方法参数等)、本地方法栈(系统指令)、寄存器(执行指令);执行引擎(执行字节码)

3.垃圾回收算法

引用计数法(引用循环问题,不使用);

复制算法(适用存活对象少、垃圾对象多);

标记清除算法(产生磁盘碎片);

标记清除压缩算法(标记清除后进行压缩,无磁盘碎片);

分区算法(按区回收,减少系统停顿时间)

4.垃圾回收器种类

串行垃圾收集器(适用单核cpu);

并行垃圾收集器(适合多核cpu);

并发垃圾收集器(多核,效率高于并行垃圾收集器);

G1垃圾收集器;

5.堆、垃圾收集参数配置

新生代:复制算法(eden、from、to);

老年代:标记清除、标记压缩、分区算法

-Xms1024m -Xmx1024m配置堆内存大小;

-Xss指定线程栈大小;

-Xmn设置新生代大小(一般设置为整个堆空间的1/3 1/4),-XX:SurvivorRatio=2(设置eden/from=eden/to),-XX:NewRatio=老年代/新生代;

-XX:PermSize配置永久区(jdk1.7之前,即方法区大小),jdk1.8之后,变更为元数据区,默认只受系统可用内存限制,可以通过-XX:MaxMetaspaceSize

-XX:MaxDirectMemorySize设置直接内存大小,默认为-Xmx大小;

-XX:+PrintGC 打印GC日志;

-XX:+PrintGCDetails打印gc详细日志;

-verbose:class跟踪类的加载和卸载;

-XX:+TraceClassLoading跟踪类的加载,-XX:+TraceClassUnloading跟踪累的卸载;

-XX:+PrintClassHistogram运行时打印查看系统中类的分布情况,按ctrl+break键;

-XX:+PrintVMOptions打印虚拟机接受到的命令行显式参数;

-XX:+PrintCommandLineFlags打印传递给虚拟机的显式和隐式参数;

-XX:+PrintFlagsFinal打印所有的系统参数的值。

 

-XX:+UseSerialGC在新生代和老年代使用串行收集器;

-XX:PretenureSizeThreshold设置大对象直接进入老年代的阈值;

-XX:MaxTenuringThreshold设置对象进入老年代的年龄最大值。

 

-XX:+UseParNewGC在新生代使用并行收集器;

-XX:+UseParallelOldGC在老年代使用并行回收器;

-XX:ParallelGCThreads设置用于垃圾回收的线程数;

-XX:MaxGCPauseMillis设置最大垃圾收集停顿时间;

-XX:GCTimeRatio =n系统将花费1/(1+n)的时间用于垃圾回收;

-XX:+UseAdaptiveSizePolicy打开自适应GC策略。

 

-XX:+UseConcMarkSweepGC新生代使用并行收集器,老年代使用CMS+串行收集器;

-XX:ParallelCMSThreads设定CMS的线程数;

-XX:CMSInitiatingOccupancyFraction设置CMS收集器在老年代空间被使用多少后触发,默认68%;

-XX:+UseCMSCompactAtFullCollection 设置CMS收集器在完成垃圾回收后是否进行一次压缩;

-XX:CMSFullGCsBeforeCompaction设定多少次CMS垃圾回收后进行一次压缩;

-XX:+CMSClassUnloadingEnable允许对元数据区进行垃圾回收;

-XX:CMSInitiatingPermOccupancyFraction当永久去占用率达到这一百分比时启动CMS回收;

-XX:UseCMSInitiatingOccupancyOnly只在达到阈值时进行垃圾回收;

 

-XX:+UseG1GC;

-XX:MaxGCPauseMillis最大垃圾收集停顿时间;

-XX:GCPauseIntervalMillis设置停顿时间间隔;

 

-XX:+UseTLab开启TLAB分配;

-XX:+PrintTLAB;

-XX:TLABSize;

-XX:+ResizeTLAB自动调整TLAB大小

 

-XX:+DisableExplicitGC禁用显示GC;

-XX:+ExplicitGCInvokesConcurrent使用并发方式处理显示GC

6.性能监控命令及工具

jps

jmap -dump

jstat -gc

jstack pid

MAT(memory analyzer)

jconsole

7.类加载过程

加载(1.读取字节码文件;2.存入方法区;3.创建java.lang.Class类实例)、连接(验证(语法、语义等验证)、准备(分配内存空间)、解析(符号引用转换为直接引用))、初始化(赋值)

8.热部署热加载

classloader动态加载类对象

 

 

https://www.jianshu.com/p/0f1f5adffdc1

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值