堆大小设置
回收器选择
JVM给了三种选择:串行收集器,并行收集器,并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器.默认 情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数.JDK5.0以后,JVM会根据当前系统配置进行判断.
吞吐量优先的并行收集器
如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等.
典型配置:
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
-XX:+UseParallelGC:选择垃圾收集器为并行收集器.此配置仅对年轻代有效.即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集.
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收.此值最好配置与处理器数目相等.
常见配置汇总
堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小
收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集线程数.
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)
并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU情况.
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.
调优总结
年轻代大小选择
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择).在此种情况下,年轻代收集发生的频率也是最小的.同时,减少到达年老代的对象.
吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度.因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用.
年老代大小选择
响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数.如果堆设置小了,可以会造成内存碎 片,高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间.最优化的方案,一般需要参考以下数据获得:
1.并发垃圾收集信息
2.持久代并发收集次数
3.传统GC信息
4.花在年轻代和年老代回收上的时间比例
5.减少年轻代和年老代花费的时间,一般会提高应用的效率
- public static String getMemUsage() {
- long free = java.lang.Runtime.getRuntime().freeMemory();
- long total = java.lang.Runtime.getRuntime().totalMemory();
- StringBuffer buf = new StringBuffer();
- buf.append("[Mem: used ").append((total-free)>>20)
- .append("M free ").append(free>>20)
- .append("M total ").append(total>>20).append("M]");
- return buf.toString();
- }
google一下,大概就说JVM是这样来操作内存:
堆内存分配
JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4.默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时, JVM会减少堆直到-Xms的最小限制.因此服务器一般设置-Xms,-Xmx相等以避免在每次GC 后调整堆的大小.
非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4.
JVM内存限制(最大值)
首先JVM内存首先受限于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系.简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是 2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制了
JVM内存的调优
1. Heap设定与垃圾回收Java Heap分为3个区,Young,Old和Permanent.Young保存刚实例化的对象.当该区被填满时,GC会将对象移到Old区.Permanent区则负责保存反射对象,本文不讨论该区.JVM的Heap分配可以使用-X参数设定,
-Xms
初始Heap大小
-Xmx
java heap最大值
-Xmn
young generation的heap大小
JVM有2个GC线程.第一个线程负责回收Heap的Young区.第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区.Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能.
为什么一些程序频繁发生GC?有如下原因:
- 程序内调用了System.gc()或Runtime.gc().
- 一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC.
- Java的Heap太小,一般默认的Heap值都很小.
- 频繁实例化对象,Release对象.此时尽量保存并重用对象,例如使用StringBuffer()和String().
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态.许多Server端的Java程序每次GC后最好能有65%的剩余空间.经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值.为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2].
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2].
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间.并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作.
2.Heap大小并不决定进程的内存使用量.进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等.
2.Stack的设定
每个线程都有他自己的Stack.
-Xss
每个线程的Stack大小
Stack的大小限制着线程的数量.如果Stack过大就好导致内存溢漏.-Xss参数决定Stack大小,例如-Xss1024K.如果Stack太小,也会导致Stack溢漏.
3.硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量.
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC.这种情况你可以增加机器的内存,来减少Swap空间的使用[2].
4.4种GC
第一种为单线程GC,也是默认的GC.,该GC适用于单CPU机器.
第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序.第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程.-XX:+UseParallelGC参数启动该GC.
第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间.这种GC可以在Old区的回收同时,运行应用程序.-XX:+UseConcMarkSweepGC参数启动该GC.
第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间.这种GC可以在Young区回收的同时,回收一部分Old区对象.-Xincgc参数启动该GC.
4种GC的具体描述参见[3].
参考文章:
1. JVM Tuning. http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp#garbage-collection
2. Performance tuning Java: Tuning steps
http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html
3. Tuning Garbage Collection with the 1.4.2 JavaTM Virtual Machine .
http://java.sun.com/docs/hotspot/gc1.4.2/
在HotSpot JVM 中有三种概念,分别代表了不同代中发生的GC 动作。
Minor GC:指发生在新生代的垃圾收集动作,由于新生代中对象生命周期较短,更新速度迅速,所以Minor GC 也会比较频繁,Minor GC 的回收速度也比较快。Minor GC 通常使用copying 算法,此算法一般为最有效的。
Major GC:指发生在老年代或永久代的垃圾收集动作,出现了Major GC,通常会伴随至少一次的 Minor GC(但有的收集策略会只有Major GC)。MajorGC 的速度一般会比比较慢。
Full GC:指对堆内存整体进行垃圾收集(包含新生代,老年代,永久代),有时可以理解为仅是Major GC,又可以理解为Major GC + Minor GC,因为概念理解上的差异我们理解Full GC 为清理所有内存即可。
下面是内存及GC 的相关参数:
内存相关设置(32位系统Heap 最大支持2GB,64位以上无限制)
-Xms:初始堆(Heap)大小,默认3670k。当空闲堆内存小于40%时,JVM 就会增大堆内存直到-Xmx 所设置的最大值,可以通过-XX:MinHeapFreeRatio=n 设置其比例。
-Xmx:最大堆(Heap)大小,默认64m。当空闲堆内存大于70%时,JVM 会减少堆内存直到-Xms 所设置的最小值,可以通过-XX:MaxHeapFreeRatio=n 设置其比例。
-Xmn:新生代大小,增大新生代后会相应减小老年代大小。此值对系统性能影响较大,Java 官方推荐配置为整个堆大小的3/8。
-Xss:设置每个线程栈的大小。Java1.5 以后每个线程栈默认大小为1M,之前每个线程栈默认大小为256K。可以根据应用的线程所需内存大小进行调整。一般情况下默认值已经能满足绝大部分情景的应用,如果想更进一步优化则需要非常细致的测试。在相同物理内存下,减小这个值能生成更多的线程,进程中可容纳线程数量与很多因素有关,感兴趣的可以详细了解下,据说可以达到6500个以上。
-XX:MinHeapFreeRatio=40:如果发现空闲堆内存占到整个预估上限值的40%,则增大上限值。
-XX:MaxHeapFreeRatio=70:如果发现空闲堆内存占到整个预估上限值的70%,则收缩预估上限值。
-XX:NewRatio=2:设置年轻代和老年代的比值。例如:n=3,则表示年轻代与老年代比值为1:3,年轻代占整个年轻代与老年代之和的1/4。
-XX:SurvivorRatio=8:Eden 与Survivor 的占用比例。例如8表示,一个survivor 区占用 1/8 的Eden 内存,即1/10的新生代内存,此处需注意年轻代有2个survivor 区,所以比例为1:10。
-XX:TargetSurvivorRatio=50:实际使用的survivor 空间大小占比。默认是47%,最高90%。
-XX:MaxPermSize=64m:设置持久代(即方法区)占整个堆内存的最大值。
-XX:MaxTenuringThreshold=0:设置对象最大年龄。即对象在在Eden 与Survivor 区之间被复制的次数,每被复制一次就增加1岁,默认值为15。如果设置为0的话,则Eden 中对象不经过Survivor 区直接进入老年代。
收集器设置
-XX:-DisableExplicitGC:禁止在运行期显式地调用System.gc(),开启该选项后,GC 的触发时机将由Garbage Collector 全权掌控,默认:关闭。
-XX:+ScavengeBeforeFullGC:在Full GC前触发一次Minor GC,默认:启用。
-XX:+UseGCOverheadLimit:限制GC的运行时间。如果GC耗时过长,就抛OutOfMemoryError。
-XX:ParallelGCThreads=n:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseTLAB:启用线程本地缓存区(Thread Local)。
-XX:+UseSerialGC:使用串行收集器。
-XX:+UseParallelGC:使用并行收集器。
-XX:+UseParallelOldGC:使用并行压缩收集器。
-XX:+UseConcMarkSweepGC:使用CMS 收集器。
G1收集器设置
-XX:+UseG1GC:使用G1收集器。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间,这是一个理想目标,JVM 将尽最大努力来实现它。
GC 日志设置
-XX:+PrintGC:开启GC日志打印。
-XX:+PrintGCDetails:打印GC回收的详细信息。
-XX:+PrintGCTimeStamps:打印GC停顿耗时。
-Xloggc:<filename>:输出GC 详细日志信息至指定文件。
-XX:+UseGCLogFileRotation:开启GC 日志文件切分功能,前置选项 -Xloggc。
-XX:NumberOfGClogFiles=1:设置切分GC 日志文件数量,文件命名格式:.0, .1, ..., .n-1。
-XX:GCLogFileSize=8K:GC日志文件切分大小。
参数的意义基本已经了解,下面就讲一讲如何使我们的程序运行的更快,更稳定。
1.内存相关设置
(1)首先是操作系统的选择,在32位操作系统下JVM 只支持最大2GB Heap 大小,所以这大大的局限了程序的运行性能。然而在64位操作系统下则没有任何限制,所以推荐使用64位操作系统。
(2)然后是硬件方面,可以根据经济情况相应增加CPU 数量及物理内存大小,这样利用并行收集器可以带来很高的垃圾清理效率。
(3)Heap 相关参数设置,大型的应用系统常常会被两个问题困扰:一个是启动缓慢,因为初始Heap 非常小,必须由很多major 收集器来调整内存大小;另一个更加严重的问题就是默认的Heap 最大值对于应用程序来说“太可怜了”。根据以下经验法则(即拇指规则,指根据经验大多数情况下成立,但不保证绝对):
1)给于虚拟机更大的内存设置,往往默认的64mb 对于现代系统来说太小了。
2)将-Xms 与-Xmx 设置为相同值,这样做的好处是GC 后不用再频繁的根据内存使用情况去动态修改Heap 内存大小了,而且只有当内存使用达到-Xmx 设置的最大值时才会触发垃圾收集,这给GC 及系统减轻了负担。
3)设置过堆大小之后,可以根据程序创建对象的频率来调整新生代的内存大小,如果程序中创建新对象的频率比较搞可以适当调大新生代,但不要盲目调整,因为新生代的大小对JVM 及系统性能影响较大,Java 官方推荐配置为整个堆大小的3/8,此值可以通过非标准参数-Xmn 直接调整大小或不稳定参数-XX:NewRatio=2 间接调整新生代与老年代的大小比值。
4)线程中栈的大小调整也是如此,需要比较谨慎及细致的测试之后修改。
2.GC 收集器的选择
在HotSpot JVM 中有大致5类收集器:串行收集器,并行收集器,并行压缩收集器,CMS 收集器,G1收集器。其中并行被并行压缩收集器所替代,CMS 收集器被G1收集器所替代,所以可供选择的只剩下三种。
(1)串行收集器(Serial Collector)
在同一时间只会执行一件垃圾清理任务,非常适用于单线程,单CPU 架构的程序,串行收集器的开销也比较小,在老年代中使用mark-sweep-compact(标记—扫描-压缩)算法, 对于堆内存不是很大的程序比较适用。
串行收集器适用场景:客户端程序(-client)和单线程比较小的应用。可以声明-XX:+UseSerialGC 选项使用串行收集器。
(2)并行压缩收集器(Parallel Compacting Collector)
并行压缩收集器是在J2SE1.5后引入,与并行收集器(并行收集器又被称作吞吐量收集器)最大的不同是对老年代的回收使用了不同的算法,并行压缩收集器最终会取代并行收集器。并行压缩收集器最大的优点就是在消耗部分硬件性能及多CPU 支持下可以做到更短的stop-the-world 暂停,使回收效率更高从而增加了程序的吞吐量。
并行压缩收集器适用场景:程序稳定长期运行,希望任何时候我们的程序都能得到响应,即使程序执行速度缓慢,例如一些后台程序。硬件水平较高,例如多CPU,多物理内存的服务器可以选择并行压缩收集器。可以声明-XX:+UseParallelOldGC 选项使用并行压缩收集器。
(3)CMS 收集器(Concurrent Mark-Sweep (CMS) Collector)
在很多应用中,更加注重快速的相应时间而不是吞吐量。新生代的垃圾回收通常不会造成长时间的应用程序中断,但是,对于老年代,特别是当Heap 已使用量比较大的时候会导致长时间的程序中断(虽然这种情况不常发生)。Hotspot JVM 引入CMS 的目的就是为了解决这个问题。
CMS 收集器适用场景(G1同理):对于老年代使用率比较高的应用程序适合CMS 收集器,对停顿时间有较严格要求的程序也比较适合使用CMS 收集器。所以CMS 收集器多用于应用服务器程序上,例如web系统等。这类系统的共同特点就是响应时间一般较短,否则容易造成用户体验差的评价。可以声明-xx:+UseConcMarkSweepGC 选项使用CMS。如果你还想让CMS 运行与增量模式下,则可声明–XX:+CMSIncrementalMode 选项启用增量模式。增量模式指的是把收集器的工作分成多个时间块,然后在两次新生代的回收期间加以运行,这种方式可以更进一步减少暂停的时间。
3.GC 日志的使用
然后来看一段非常简单的代码:
- public class GCTest {
- public static void main(String[] args){
- for (;;) {
- System.gc();
- }
- }
- }
Java 代码编译后,在控制台输入如下命令来运行此程序:
- java -server -verbose:gc GCTest
- 或
- java -server -XX:+PrintGC GCTest
[GC 160K->160K(125312K), 0.0004590 secs]
[Full GC 160K->160K(125312K), 0.0063689 secs]
.....
从运行结果我们可以看到GC 的执行情况,-verbose:gc 与-XX:+PrintGC 两个参数的作用相同,都是打印GC 基本信息,但基本信息中可参考的内容基本没有。
需要更加详细的GC 信息输出,可以使用-XX:+PrintGCDetails 参数,来打印GC 详情信息:
- java -server -XX:+PrintGCDetails Contacts
[Full GC (System) [PSYoungGen: 0K->0K(38144K)] [PSOldGen: 160K->160K(87168K)] 160K->160K(125312K) [PSPermGen: 2937K->2937K(21248K)], 0.0055359 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC [PSYoungGen: 654K->32K(38144K)] 814K->192K(125312K), 0.0002939 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
.....
(执行class 文件)
java [-options] -jar jarfile [args...]
(执行jar 文件)
除了将GC 信息直接打印到控制台外更常用的做法是以文件的形式存储日志信息,利用-Xloggc:<file> 来实现:
- java -server -XX:+PrintGCDetails -Xloggc:d:\gc.log GCTest
GC 打印的日志信息有固定的格式,可以将每条日志拆分成几部分来分析。
Minor GC:
Full GC:
日志中已经包含了上面所说的几种不同内存中的GC 执行情况,可以很方便的了解那部分内存使用出现了问题,这样就可以集中解决出现问题的部分。
4.其他(会不断补充)
(1)避免使用大对象
所谓大对象就是指,需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串及数组。大对象对虚拟机的内存分配来说就是一个"bad message",经常出现大对象容易导致内存还有不少空间时就提前触发垃圾收集以获取足够的连续空间来“安置”它们。
这样的大对象如果只是使用1次的话,那么可想而知会对内存造成多么大的浪费,而且为了“挽回”这种过失,GC 会不断的去清理这些大对象所占用的内存空间,进而大致了程序运行的缓慢,所以在编码阶段就应该去重点注意这方面的问题不要为了开发方便而将很多“无关”的东西塞到一个对象中。
http://286.iteye.com/blog/1937030
相关推荐
JVM调优总结 -Xms -Xmx -Xmn -Xss JVM 调优是 Java virtual machine 的性能优化,通过调整 JVM 的参数来提高 Java 应用程序的性能。其中,-Xms、-Xmx、-Xmn、-Xss 是四个重要的参数,分别控制 JVM 的初始堆大小、...
### Java JVM 参数 `-Xms`、`-Xmx`、`-Xmn`、`-Xss` 调优总结 #### 一、概述 本文档主要介绍Java虚拟机(JVM)中四个重要的参数:`-Xms`、`-Xmx`、`-Xmn` 和 `-Xss` 的含义、作用以及如何通过这些参数来优化JVM的性能...
在JVM中,内存管理是至关重要的,而`-Xms`, `-Xmx`, `-Xmn`, `-Xss`等参数则直接影响着Java应用程序的性能和稳定性。这些参数是用来调整JVM堆内存和线程栈大小的。 1. `-Xms`: 这个参数用于设置JVM启动时初始的堆...
### JVM调优总结:Xms、Xmx、Xmn、Xss 在Java虚拟机(JVM)的运行过程中,合理的参数配置对于提高程序性能至关重要。本文将对JVM调优中的几个关键参数进行深入解析,包括-Xms、-Xmx、-Xmn和-Xss等,帮助开发者更好...
本文主要围绕四个核心JVM参数:-Xms、-Xmx、-Xmn和-Xss进行深入讲解,并结合实际配置示例来阐述其作用和调优策略。 1. `-Xms` 和 `-Xmx`: 这两个参数用于设定JVM堆内存的最小和最大值。例如,`-Xms3550m`表示初始...
可以通过注册表或`TomcatW.exe`图形界面调整服务启动时的内存参数,也可以直接在`startup.bat`脚本中添加`JAVA_OPTS='-Xms1024 -Xmx1024m'`或`set JAVA_OPTS=-server -Xms1024m -Xmx1536m -XX:MaxNewSize=1024m -XX:...
2. **编辑catalina.bat**:在Tomcat的bin目录下,直接修改catalina.bat文件,替换或添加`-Xmx`, `-Xms`, `-Xmn`, `-Xss`等参数,以达到特定的内存设置需求。 3. **利用注册表**:对于Windows环境下的Tomcat,还可以...
JVM参数调优是提升Java应用程序性能的关键环节,尤其是在高并发、大数据量的环境中,合适的JVM配置可以显著改善系统的响应速度和稳定性。 在进行JVM调优时,我们主要关注以下几个核心方面: 1. **内存设置**:JVM...
- `-Xmx` 和 `-Xms` 用于设定JVM的最大堆(`Max Heap Size`)和最小堆(`Initial Heap Size`)。保持它们相等可以避免内存频繁调整导致的性能波动。 - `-Xmn` 设定年轻代(`Young Generation`)的大小,通常与应用中创建...
JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,Java 通过使用 Java 虚拟机屏蔽了与具体平台相关的 信息,使得 Java...JVM 实用参数系列一共包括八篇文章,由浅入深,从编译器、垃圾回 收、内存调优等方面介绍 JVM。
java -Xmx128m -Xms64m -Xmn32m -Xss16m Test 2. 在集成开发环境下(如 eclipse)启动并使用 JVM 可以通过修改 eclipse.ini 文件来设置 JVM 内存分配。例如: -vmargs -Xms40m -Xmx256m -XX:PermSize=56m -XX:...
本文将总结JVM性能调优的经验和技巧,并提供一些实用的配置参数和建议。 一、堆大小设置 堆大小是JVM性能调优中的一个关键参数。堆大小的设置直接影响到系统的性能和稳定性。堆大小有三方面限制:相关操作系统的...
- `-Xmx` 和 `-Xms` 参数分别用于设置JVM的最大堆内存和初始堆内存。例如,`-Xmx3550m` 和 `-Xms3550m` 表示最大和初始堆内存都为3550MB。通常建议设置这两个值相同,以避免垃圾回收后内存重新分配带来的性能影响。...
例如,“-Xms”和“-Xmx”分别用于设置JVM的初始堆内存和最大堆内存,“-Xss”用于设置线程堆栈大小,“-Xmn”用于设置年轻代内存大小。而“-XX”参数中,“-XX:MaxPermSize”用于设置方法区的最大内存大小。 除了...
- `-Xmx` 和 `-Xms` 参数用于设置JVM的最大堆内存和初始堆内存。它们应设置为相同的值以避免内存分配导致的性能开销。例如,`-Xmx3550m` 和 `-Xms3550m` 表示最大和初始堆内存均为3.5GB。 - `-Xss` 参数定义每个...
Java Virtual Machine (JVM) 是运行Java程序的核心环境,其性能优化很大程度上依赖于正确的JVM参数配置。合理配置JVM参数不仅可以显著提升应用程序的运行效率,还能避免因内存溢出等问题导致的系统崩溃。本文将深入...
set JAVA_OPTS=-server -Xmn512m -Xms1024m -Xmx2048m -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking ``` JVM基础参数配置 JVM基础参数配置是指通过各种参数来优化JVM的性能。常用的参数包括-server、-Xms...
本文将围绕“Tomcat-JVM参数调优”这一主题,详细介绍相关的配置方法及注意事项,尤其关注如何通过调整JVM参数来提高系统的并发处理能力。 #### 二、基础概念理解 在深入了解调优方法之前,我们需要先对一些基础...