您的位置:首页 > 编程语言 > Java开发

JVM调优简述

2016-04-15 10:06 363 查看
  JVM调优是所有初级程序员向高级迈入的必经之路,而这个过程又需要许多JVM内存知识。下面就总结一二,和大家分享一下:

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:跟踪常量池信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm java 内存