JVM调优简述
2016-04-15 10:06
363 查看
JVM调优是所有初级程序员向高级迈入的必经之路,而这个过程又需要许多JVM内存知识。下面就总结一二,和大家分享一下:
JVM内存构成:方法区、java栈、本地方法栈、程序计数器、堆
方法区存放的内容:类信息,常量池,静态字段,方法;方法区只是逻辑上的概念,它的存放时存放在堆内的,也就是持久代中。这种叫法就相当于大名叫方法区,小名叫持久代。
java栈:运行JVM时用到的方法会以栈桢的方式存入java栈中,运行完成后弹出。
本地方法栈:和java栈用法没有区别,只是它存放的是Native方法。
程序计数器:记录每个线程运行代码的行号,因为每个线程不能互相影响,所以每个线程都会有自己的计数器。
堆:存储java运行时生成的各种对象。我们如果进行内存优化的对象也就是堆内存。
堆的构成:持久代、年轻代、老年代
年轻代构成:1个Eden区和2个Survior区
2) UseParallelGC 并行收集器:仅对年轻代是并行收集,老年代还是串行执行。
3) UseConcMarkSweepGC(CMSGC)并发收集器 :优点:适用于响应时间优先的应用,减少用户等待时间。缺点:mark和sweep时会产生很多的碎片,因此要间隔一段时间就需要进行一次整理,否则遇到大对象没有连续空间提空存放,会触发串行GC。
-Xss:单个线程栈的大小,越小支持的线程数越多
-Xms:初始化堆大小
-Xmx:最大堆大小
-Xmn:设置年轻代大小
-XX:SurvivorRatio:Eden区与Survior区比值,默认为8,即s1:s2:eden=1:1:8
-XX:NewRatio:设置年老代与年轻代的比值
-XX:MaxPermSize:持久代最大大小
-XX:ParallelGCThreads:执行垃圾回收的线程数,一般与Cpu的核数相同
-XX:+UseConcMarkSweepGC:选择CMS垃圾回收机制
-XX:+UseCMSCompactAtFullCollection:对年老代的进行压缩,这个就是针对CMS碎片过多进行的配置
-XX:-PrintGC:打印GC结果
-XX:-TraceClassResolution:跟踪常量池信息
1.JVM内存模型
JVM内存模型如下图所示:JVM内存构成:方法区、java栈、本地方法栈、程序计数器、堆
方法区存放的内容:类信息,常量池,静态字段,方法;方法区只是逻辑上的概念,它的存放时存放在堆内的,也就是持久代中。这种叫法就相当于大名叫方法区,小名叫持久代。
java栈:运行JVM时用到的方法会以栈桢的方式存入java栈中,运行完成后弹出。
本地方法栈:和java栈用法没有区别,只是它存放的是Native方法。
程序计数器:记录每个线程运行代码的行号,因为每个线程不能互相影响,所以每个线程都会有自己的计数器。
堆:存储java运行时生成的各种对象。我们如果进行内存优化的对象也就是堆内存。
堆的构成:持久代、年轻代、老年代
年轻代构成:1个Eden区和2个Survior区
2.JVM的常用垃圾收集方式
1)UseSerialGC 串行收集器:一旦执行垃圾回收,终端所有用户的线程直到GC完成。优点:适合低配置的机器,用户交互少,后台任务多的系统;2) UseParallelGC 并行收集器:仅对年轻代是并行收集,老年代还是串行执行。
3) UseConcMarkSweepGC(CMSGC)并发收集器 :优点:适用于响应时间优先的应用,减少用户等待时间。缺点:mark和sweep时会产生很多的碎片,因此要间隔一段时间就需要进行一次整理,否则遇到大对象没有连续空间提空存放,会触发串行GC。
3.JVM参数调优
常用参数:-Xss:单个线程栈的大小,越小支持的线程数越多
-Xms:初始化堆大小
-Xmx:最大堆大小
-Xmn:设置年轻代大小
-XX:SurvivorRatio:Eden区与Survior区比值,默认为8,即s1:s2:eden=1:1:8
-XX:NewRatio:设置年老代与年轻代的比值
-XX:MaxPermSize:持久代最大大小
-XX:ParallelGCThreads:执行垃圾回收的线程数,一般与Cpu的核数相同
-XX:+UseConcMarkSweepGC:选择CMS垃圾回收机制
-XX:+UseCMSCompactAtFullCollection:对年老代的进行压缩,这个就是针对CMS碎片过多进行的配置
-XX:-PrintGC:打印GC结果
-XX:-TraceClassResolution:跟踪常量池信息
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树