Java8相关的Jvm参数学习

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: java启动默认参数详细

最近学习了JVM知识,针对Jdk8的一些Jvm参数整理了一下。以备后用。

常用jvm参数列表

指数

说明

内存配置相关

-Xms

表示新生代初始内存的大小,应该小于-Xms的值;

-Xmx

表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;

-XX:NewSize=10m

新生代内存大小,表示新生代初始内存的大小,应该小于-Xms的值;

-XX:MaxNewSize=10m

表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值;

-XX:MaxDirectMemorySize=10m

为NIO的direct-buffer分配时指定最大的内存大小。默认是0,意思是JVM自动选择direct-buffer的大小。

-XX:MaxMetaspaceSize

指定元数据区大小

-XX:MetaspaceSize

元数据区会在达到指定大小时发生垃圾回收,默认20.8M左右(x86下开启c2模式)

-XX:MinMetaspaceFreeRatio

当内存剩余比例小于这个值时垃圾回收会频繁一些, 默认40%。

-XX:MaxMetaspaceFreeRatio

当内存剩余比例大于这个值时垃圾回收频率会低一点,默认70%。

-XX:StringTableSize=N

指定常量池大小

-XX:+PrintStringTableStatistics

JVM进程退出时会打印StringTable统计信息

-Xsssize

设置thread stack大小同[-XX:ThreadStackSize],一般默认的几个系统参数如下:
Linux/x64: 1024 KB
OS: 1024 KB

GC相关

-verbose:gc

展示每个GC事件的信息

-XX:+PrintGC

展示每个GC事件的信息,包含-verbose:gc

-XX:+PrintGCDetails

程序产生GC时,打印垃圾回收的详细信息,包含-XX:+PrintGC

-Xloggc:filename

设置gc日志文件,gc相关信息会重定向到该文件。这个配置如果和-verbose:gc同时出现,会覆盖-verbose:gc参数。

-XX:+UseGCLogFileRotation

启用GC日志文件的自动转储

-XX:NumberOfGCLogFiles=1

GC日志文件的循环数目

-XX:GCLogFileSize=1M

控制GC日志文件的大小

-XX:+PrintGCDateStamps

输出gc的触发日期

-XX:+PrintGCTimeStamps

输出gc的触发时间

-verbose:jni

开启展示JNI调用信息。

-XX:+HeapDumpBeforeFullGC

发生fullGC前做heap dump

-XX:+HeapDumpAfterFullGC

发生fullGC后做heap dump

-XX:+HeapDumpOnOutOfMemoryError

参数表示当JVM发生OOM时,自动生成DUMP文件

-XX:HeapDumpPath=heapdump.hprof

${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof

-XX:ErrorFile=filename

当不可恢复的错误发生时,错误信息记录到哪个文件。默认是在当前目录的一个叫做hs_err_pid pid.log的文件。如果指定的目录没有写权限,这时候文件会创建到/tmp目录下。

-XX:ConcGCThreads=2

设置支持并发GC的线程数。默认值依赖于给JVM的CPU数目。

-XX:CMSTriggerRatio=50

设置一个在CMS开始前的内存的触发百分比,针对的是由-XX:MinHeapFreeRatio分配的内存。默认是80。

-XX:ParallelGCThreads=threads

并行GC时的线程数。默认值是CPU数。

-XX:+PrintGC

打印每次GC的消息,默认是关闭的。

-XX:+PrintGCApplicationConcurrentTime

打印上次GC暂停到目前的时间。默认不打印。

-XX:+PrintGCApplicationStoppedTime

打印GC暂停的时间长度。默认不打印。

-XX:+UseG1GC

设置使用G1作为GC收集器。G1比较推荐在大堆应用场景下使用(大于6GB)。

-XX:+UseSHM

在Linux环境下支持JVM使用共享内存来设置大页。


推荐默认开启的参数为:

java -Xms1024M -Xmx2048M XX:MetaspaceSize=125m -XX:MaxMetaspaceSize=256m -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=2 -XX:GCLogFileSize=1M -XX:+PrintGCDetails -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintStringTableStatistics -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof  -jar xxx.jar

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
27天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
34 10
|
30天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
83 4
|
30天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
30 4
|
30天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
52 1
|
1月前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
2月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
2月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
2月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
72 0
|
3月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
76 1
|
3月前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
179 1

热门文章

最新文章