--JVM调优参数设置 --jvm垃圾回收器

第一章 走进JVM的世界之 了解JVM基础



一、JVM是什么?

JVM是Java虚拟机(Java Virtual Machine)的缩写,它是Java语言的核心运行时环境之一。JVM是一种抽象的计算机,它能够将Java字节码翻译成底层操作系统能够识别的机器码,从而实现Java程序的跨平台运行。

JVM由三部分组成:类加载器、运行时数据区和执行引擎。其中,类加载器负责将Java字节码加载到内存中;运行时数据区包括方法区、堆、栈等,用于存储程序运行时的数据;执行引擎则负责执行Java字节码,并将其翻译成机器码。

JVM还提供了一些垃圾回收机制,可以自动管理内存,避免内存泄漏等问题。此外,JVM还支持多线程编程,可以提高程序的并发性能。


二、常见的JVM调优方法

JVM调优是指对Java虚拟机进行性能优化,以提高应用程序的运行效率和响应速度。以下是一些常见的JVM调优方法:

1.选择合适的垃圾回收器

不同的垃圾回收器有不同的优缺点,需要根据应用程序的特点选择合适的垃圾回收器。例如,如果应用程序需要低延迟,可以选择并行或CMS垃圾回收器;如果需要高吞吐量,可以选择G1垃圾回收器。

2.调整堆内存大小

堆内存的大小直接影响到应用程序的性能,需要根据应用程序的内存使用情况进行调整。可以通过增加或减少-Xms和-Xmx参数来调整堆内存大小。

3.调整新生代和老年代的比例

新生代和老年代的比例也会影响到垃圾回收的效率和频率。可以根据应用程序的特点进行调整,例如,如果应用程序有大量的短期对象,可以适当增加新生代的比例。

4.启用或禁用某些垃圾回收器参数

垃圾回收器的参数可以影响到垃圾回收的效率和频率,可以根据应用程序的特点启用或禁用某些参数。例如,可以启用-XX:+UseParallelGC参数来启用并行垃圾回收器。

5.使用线程池

线程池可以提高线程的利用率,减少线程创建和销毁的开销。可以使用Java提供的线程池API或者第三方库来实现线程池。

6.避免对象的频繁创建和销毁

对象的频繁创建和销毁会导致垃圾回收的频率增加,影响应用程序的性能。可以通过使用对象池或者缓存来避免对象的频繁创建和销毁。


三、JVM调优参数设置

1. 堆内存大小(-Xms和-Xmx)

堆内存是Java程序运行时占用的主要内存区域,可以通过调整这两个参数来优化堆内存的使用。

  • -Xms:初始堆内存大小,单位为字节。默认值为128MB。
  • -Xmx:最大堆内存大小,单位为字节。默认值为1024MB。

2. 新生代与老年代比例(-XX:NewRatio)

新生代和老年代的比例会影响垃圾回收的效率。通过调整这个参数,可以平衡新生代和老年代的内存使用。

  • -XX:NewRatio:新生代与老年代的比例,取值范围为1到1024。默认值为128。

标题3. 新生代大小(-XX:MaxNewSize)

新生代的大小会影响垃圾回收的效率。通过调整这个参数,可以控制新生代的内存使用。

  • -XX:MaxNewSize:新生代的最大大小,单位为字节。默认值为64MB。

4. 永久代大小

永久代是Java虚拟机中用于存储类元数据的内存区域。通过调整这两个参数,可以优化永久代的使用。

  • -XX:PermSize:永久代的初始大小,单位为字节。默认值为64MB。
  • -XX:MaxPermSize:永久代的最大大小,单位为字节。默认值为256MB。

5. 垃圾回收器

JVM垃圾回收器是Java虚拟机中用于自动管理内存的组件,它能够自动检测和清除不再使用的对象,以释放内存空间。JVM垃圾回收器主要有以下几种:

5.1. Serial收集器

单线程执行垃圾回收操作,适用于小型应用系统和客户端应用。

  • -XX:+UseSerialGC:使用串行垃圾回收器。

5.2.Parallel收集器

多线程执行垃圾回收操作,适用于多核CPU的服务器端应用。

  • -XX:+UseParallelGC:使用并行垃圾回收器。

5.3. CMS(Concurrent Mark Sweep)收集器

并发执行垃圾回收操作,适用于对响应时间要求较高的应用系统。

  • -XX:+UseConcMarkSweepGC

5.4. G1(Garbage-First)收集器

将堆划分为多个区域,并行执行垃圾回收操作,适用于大内存的应用系统。

  • -XX:+UseG1GC

5.5. ZGC(Z Garbage Collector)收集器

基于Region内存布局的低延迟垃圾回收器,适用于大内存、低延迟要求的应用系统。Z Garbage Collector是默认的垃圾回收器,除非你在启动参数中明确指定了其他垃圾回收器,否则它将自动被使用。

  • -XX:+UseZGC

5.6. Shenandoah收集器**

低延迟、吞吐量可伸缩的垃圾回收器,适用于大内存、高吞吐量要求的应用系统。

  • -XX:+UseShenandoahGC

6. 线程栈大小(-Xss)

线程栈大小影响线程的创建和执行效率。通过调整这个参数,可以优化线程栈的使用。

  • -Xss:线程栈大小,单位为字节。默认值为1MB。

7. 其他调优参数

这是一组Java虚拟机(JVM)的启动参数,用于配置JVM的内存分配和垃圾回收策略。具体解释如下:

  • -Xmn512m:设置新生代最小堆内存大小为512MB。
  • -Xms1024m:设置初始堆内存大小为2048MB。
  • -Xmx2048m:设置最大堆内存大小为2048MB。
  • -Xmn1536m:设置新生代最小堆内存大小为1536MB。
  • -Xss256k:设置线程栈大小为256KB。
  • -XX:CICompilerCount=4:设置编译器数量为4个。
  • -XX:ParallelGCThreads=4:设置并行垃圾回收器使用的线程数为4个。
  • -XX:MetaspaceSize=256m:设置元空间初始大小为256MB。
  • -XX:MaxMetaspaceSize=256m:设置元空间最大大小为256MB。
  • -XX:CompressedClassSpaceSize=64m:设置压缩类空间初始大小为64MB。
  • -XX:+UseG1GC:启用G1垃圾回收器。
  • -XX:G1ConcRefinementThreads=2:设置G1垃圾回收器的并发整理线程数为2个。
  • -XX:NativeMemoryTracking=detail:开启本地内存跟踪,显示详细的内存使用情况。
  • -Dfile.encoding=UTF-8:设置文件编码为UTF-8。

四.各个版本JDK中的使用的垃圾回收器

1. JDK 1.5及之前版本

使用Serial、Parallel和CMS垃圾收集器。

2. JDK 1.6

除了Serial、Parallel和CMS之外,还引入了G1垃圾收集器。

3. JDK 1.7

除了Serial、Parallel、CMS和G1之外,还引入了Concurrent Mark Sweep (CMS)垃圾收集器的并行版本。

4. JDK 1.8

除了Serial、Parallel、CMS、G1和并行CMS之外,还引入了默认的垃圾收集器为Parallel,并增加了新的Epsilon垃圾收集器。

5. JDK 9及以上版本

除了Serial、Parallel、CMS、G1、并行CMS和Epsilon之外,还引入了ZGC(低延迟垃圾收集器)和Shenandoah(低延迟高吞吐量垃圾收集器)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值