JVM内存大小配置方式

合集下载

mvn jvm 参数

mvn jvm 参数

Maven JVM 参数简介Maven是一个流行的构建工具,用于管理Java项目的构建过程。

在使用Maven构建项目时,我们可以通过配置JVM参数来优化构建和运行过程。

本文将介绍Maven JVM参数的作用、常用参数及其用法,以及如何在Maven项目中配置这些参数。

Maven JVM 参数的作用JVM参数是用于配置Java虚拟机的一种方式,它们可以影响Java程序的运行行为和性能。

在Maven项目中,我们可以通过配置JVM参数来控制Maven构建过程中的内存分配、垃圾回收策略、线程数等,以提高构建效率和性能。

常用的 Maven JVM 参数以下是一些常用的Maven JVM参数及其用法:•-Xms:设置Java堆的初始内存大小。

例如,-Xms512m表示将初始内存大小设置为512MB。

•-Xmx:设置Java堆的最大内存大小。

例如,-Xmx1024m表示将最大内存大小设置为1GB。

•-XX:PermSize:设置永久代的初始内存大小。

永久代是Java 8之前用于存储类信息的区域。

例如,-XX:PermSize=256m表示将永久代的初始内存大小设置为256MB。

•-XX:MaxPermSize:设置永久代的最大内存大小。

例如,-XX:MaxPermSize=512m表示将永久代的最大内存大小设置为512MB。

•-XX:MaxMetaspaceSize:设置元空间的最大内存大小。

元空间是Java 8及其之后版本中取代永久代的区域。

例如,-XX:MaxMetaspaceSize=256m表示将元空间的最大内存大小设置为256MB。

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

并行垃圾回收器使用多个线程来加速垃圾回收过程。

例如,-XX:+UseParallelGC表示启用并行垃圾回收器。

•-XX:+UseConcMarkSweepGC:启用并发标记清除垃圾回收器。

并发标记清除垃圾回收器可以在垃圾回收的同时执行应用程序。

maven jvm参数

maven jvm参数

Maven JVM参数是在运行Maven时,用于配置Java虚拟机(JVM)的参数。

这些参数可以帮助优化Maven的性能和内存使用。

以下是一些常用的Maven JVM参数:1. `-Xms`:设置初始堆内存大小。

例如:`-Xms256m`表示初始堆内存大小为256兆字节。

2. `-Xmx`:设置最大堆内存大小。

例如:`-Xmx1024m`表示最大堆内存大小为1024兆字节。

3. `-XX:PermSize`:设置永久代内存大小。

例如:`-XX:PermSize=128m`表示永久代内存大小为128兆字节。

4. `-XX:MaxPermSize`:设置最大永久代内存大小。

例如:`-XX:MaxPermSize=512m`表示最大永久代内存大小为512兆字节。

5. `-XX:MetaspaceSize`:设置元空间内存大小。

例如:`-XX:MetaspaceSize=128m`表示元空间内存大小为128兆字节。

6. `-XX:MaxMetaspaceSize`:设置最大元空间内存大小。

例如:`-XX:MaxMetaspaceSize=512m`表示最大元空间内存大小为512兆字节。

7. `piler.source=1.8`:指定Maven编译器使用的Java版本。

例如:`piler.source=1.8`表示使用Java 1.8版本进行编译。

8. `piler.target=1.8`:指定Maven编译器使用的Java目标版本。

例如:`piler.target=1.8`表示使用Java 1.8版本作为目标版本进行编译。

在运行Maven时,可以通过在命令行中添加这些参数来配置JVM。

例如:```bashmvn clean install -Xms256m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m piler.source=1.8 piler.target=1.8```。

JVM内存设置方法

JVM内存设置方法

JVM内存设置方法JVM(Java虚拟机)是Java程序的运行环境,它负责执行Java字节码,并管理程序的内存。

在运行Java程序时,合理地设置JVM的内存大小是非常重要的,它会影响程序的性能和稳定性。

下面是一些关于JVM内存设置的方法和注意事项:1. 初始堆大小(-Xms)和最大堆大小(-Xmx):初始堆大小指定了JVM初始时分配的堆内存大小,最大堆大小则指定了堆内存的上限。

可以通过在启动命令中加上-Xms和-Xmx参数来设置堆内存大小,例如:```java -Xms256m -Xmx512m MyApp```这样就设置了初始堆大小为256MB,最大堆大小为512MB。

2.堆内存的大小选择:堆内存的大小应根据应用程序的需求和服务器硬件条件来选择。

如果堆内存过小,可能会导致OutOfMemoryError;如果堆内存过大,可能会导致频繁的垃圾回收,影响程序的性能。

可以通过监控JVM的堆使用情况来判断是否需要调整堆内存的大小。

可以使用JVM自带的JVisualVM工具或第三方的工具如G1GC日志分析工具进行监控。

3.堆内存的分代设置:堆内存分为新生代(Young Generation)、老年代(Old Generation)和永久代(Permanent Generation,JDK8及之前的版本)/元空间(Metaspace,JDK8及之后的版本)。

新生代用于存储新创建的对象,老年代用于存储长时间存活的对象,永久代/元空间用于存储类和方法等信息。

可以通过设置堆内存的分代比例来调整堆内存的大小,例如:```-XX:NewRatio=2```这样就将堆内存的新生代和老年代的大小比例设置为1:2、可以根据应用程序的特点和需求进行调整。

4.非堆内存的设置:非堆内存包括方法区、直接内存等。

可以通过设置参数来调整非堆内存的大小,例如:```-XX:MaxMetaspaceSize=256m```这样就设置了元空间的最大大小为256MB。

jvm xmn 设置规则

jvm xmn 设置规则

jvm xmn 设置规则JVM Xmn 设置规则。

JVM(Java虚拟机)的性能优化是Java应用程序开发中非常重要的一部分。

其中,Xmn 是 JVM 中用于设置新生代内存大小的参数。

在本文中,我们将讨论一些关于 JVM Xmn 设置的规则和最佳实践。

1. 了解 Xmn 参数。

Xmn 参数用于设置 JVM 的新生代内存大小。

新生代是 JVM内存中用于存放新创建的对象的区域。

通过设置 Xmn 参数,可以控制新生代的大小,从而影响垃圾回收的性能和效率。

2. 设置 Xmn 大小。

通常情况下,建议将 Xmn 大小设置为整个堆内存的 1/3 到1/4。

例如,如果堆内存大小为 1GB,那么可以将 Xmn 设置为256MB 到 333MB。

这样可以确保新生代内存有足够的空间来存放新创建的对象,同时也可以减少垃圾回收的频率和时间。

3. 考虑应用程序的特性。

在设置 Xmn 参数时,需要考虑应用程序的特性和内存使用情况。

一些应用程序可能会频繁地创建大量的临时对象,而另一些应用程序则可能更注重长期对象的管理。

根据应用程序的特性,可以调整 Xmn 的大小来更好地适应实际情况。

4. 监控和调优。

一旦设置了 Xmn 参数,就需要监控应用程序的内存使用情况,并根据实际情况进行调优。

可以通过监控工具来观察新生代的内存使用情况和垃圾回收的频率,从而及时调整 Xmn 的大小以获得更好的性能和效率。

总之,JVM Xmn 设置是优化 Java 应用程序性能的重要一环。

通过了解 Xmn 参数、设置合适的大小、考虑应用程序特性并进行监控和调优,可以有效地提升应用程序的性能和稳定性。

希望本文提供的规则和最佳实践能够帮助开发人员更好地进行 JVM Xmn 参数的设置和优化。

java jvm参数

java jvm参数

java jvm参数
Java 虚拟机(JVM)参数是用来配置 Java 虚拟机运行时环境的一组参数。

它们可以用来控制 JVM 的内存使用情况,调整垃圾回收器的行为,debugging,启用额外的错误检查等等。

1、-Xms:设置JVM初始内存大小,默认是物理内存的1/64。

2、-Xmx:设置JVM最大可用内存大小,一般设置为物理内存的1/4或1/8。

3、-Xss:设置JVM单个线程栈内存大小,通常为
512K到1024K之间。

4、-XX:+UseSerialGC:开启串行垃圾收集器,使用单线程工作,可以提高性能,但是应用程序也会受到影响。

5、-XX:+PrintGCDetails:打印出垃圾回收的详细信息,方便进行性能调优。

6、-XX:MaxPermSize:设置持久代的最大内存大小,默认情况下,持久代的内存大小取决于MaxHeapSize的值。

7、-XX:NewRatio:设置新生代和老年代的比例,默认情况下是2,即新生代是老年代的一半。

8、-XX:SurvivorRatio:设置Eden区和Survivor区的比例,默认情况下是8,即Eden区是Survivor区的八分之一。

JVM参数配置及详解-Xms-Xmx-Xmn-Xss调优总结

JVM参数配置及详解-Xms-Xmx-Xmn-Xss调优总结

JVM参数配置及详解-Xms-Xmx-Xmn-Xss调优总结堆⼤⼩设置JVM 中最⼤堆⼤⼩有三⽅⾯限制: ①、相关操作系统的数据模型(32-bt还是64-bit)限制; ②、系统的可⽤虚拟内存限制; ③、系统的可⽤物理内存限制. 32位系统下,⼀般限制在1.5G~2G;64为操作系统对内存⽆限制.在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最⼤可设置为1478m. 堆内存逻辑上分为三部分:新⽣区+养⽼区+永久代 物理上分为两部分:新⽣+养⽼ Jdk1.7之前,有永久代,但已经逐步“去永久代” Jdk1.8之后,⽆永久代,由元空间替代典型设置:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k①、-Xmx3550m:设置JVM最⼤可⽤内存为3550M.②、-Xms3550m:设置JVM促使内存为3550m.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存.③、-Xmn2g:设置年轻代⼤⼩为2G.整个堆⼤⼩=年轻代⼤⼩ + 年⽼代⼤⼩ + 持久代⼤⼩.持久代⼀般固定⼤⼩为64m,所以增⼤年轻代后,将会减⼩年⽼代⼤⼩.此值对系统性能影响较⼤,Sun官⽅推荐配置为整个堆的3/8.④、-Xss128k:设置每个线程的堆栈⼤⼩.JDK5.0以后每个线程堆栈⼤⼩为1M,以前每个线程堆栈⼤⼩为256K.更具应⽤的线程所需内存⼤⼩进⾏调整.在相同物理内存下,减⼩这个值能⽣成更多的线程.但是操作系统对⼀个进程内的线程数还是有限制的,不能⽆限⽣成,经验值在3000~5000左右.java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0①、-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年⽼代的⽐值(除去持久代).设置为4,则年轻代与年⽼代所占⽐值为1:4,年轻代占整个堆栈的1/5②、-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的⼤⼩⽐值.设置为4,则两个Survivor区与⼀个Eden区的⽐值为2:4,⼀个Survivor 区占整个年轻代的1/6③、-XX:MaxPermSize=16m:设置持久代⼤⼩为16m.④、-XX:MaxTenuringThreshold=0:设置垃圾最⼤年龄.如果设置为0的话,则年轻代对象不经过Survivor区,直接进⼊年⽼代. 对于年⽼代⽐较多的应⽤,可以提⾼效率.如果将此值设置为⼀个较⼤值,则年轻代对象会在Survivor区进⾏多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论.回收器选择JVM给了三种选择:串⾏收集器,并⾏收集器,并发收集器,但是串⾏收集器只适⽤于⼩数据量的情况,所以这⾥的选择主要针对并⾏收集器和并发收集器.默认情况下,JDK5.0以前都是使⽤串⾏收集器,如果想使⽤其他收集器需要在启动时加⼊相应参数.JDK5.0以后,JVM会根据当前系统配置进⾏判断.吞吐量优先的并⾏收集器如上⽂所述,并⾏收集器主要以到达⼀定的吞吐量为⽬标,适⽤于科学技术和后台处理等.典型配置:java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20①、-XX:+UseParallelGC:选择垃圾收集器为并⾏收集器.此配置仅对年轻代有效.即上述配置下,年轻代使⽤并发收集,⽽年⽼代仍旧使⽤串⾏收集.②、-XX:ParallelGCThreads=20:配置并⾏收集器的线程数,即:同时多少个线程⼀起进⾏垃圾回收.此值最好配置与处理器数⽬相等.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC①、-XX:+UseParallelOldGC:配置年⽼代垃圾收集⽅式为并⾏收集.JDK6.0⽀持对年⽼代并⾏收集.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100①、-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间,如果⽆法满⾜此时间,JVM会⾃动调整年轻代⼤⼩,以满⾜此值.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy①、-XX:+UseAdaptiveSizePolicy:设置此选项后,并⾏收集器会⾃动选择年轻代区⼤⼩和相应的Survivor区⽐例,以达到⽬标系统规定的最低相应时间或者收集频率等,此值建议使⽤并⾏收集器时,⼀直打开.响应时间优先的并发收集器如上⽂所述,并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间.适⽤于应⽤服务器,电信领域等.典型配置:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC①、-XX:+UseConcMarkSweepGC:设置年⽼代为并发收集.测试中配置这个以后,-XX:NewRatio=4的配置失效了,原因不明.所以,此时年轻代⼤⼩最好⽤-Xmn设置.②、-XX:+UseParNewGC:设置年轻代为并⾏收集.可与CMS收集同时使⽤.JDK5.0以上,JVM会根据系统配置⾃⾏设置,所以⽆需再设置此值.java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection①、-XX:CMSFullGCsBeforeCompaction=5:由于并发收集器不对内存空间进⾏压缩,整理,所以运⾏⼀段时间以后会产⽣"碎⽚",使得运⾏效率降低.此值设置运⾏多少次GC以后对内存空间进⾏压缩,整理.②、-XX:+UseCMSCompactAtFullCollection:打开对年⽼代的压缩.可能会影响性能,但是可以消除碎⽚辅助信息JVM提供了⼤量命令⾏参数,打印信息,供调试使⽤.主要有以下⼀些:-XX:+PrintGC输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs][Full GC 121376K->10414K(130112K), 0.0650971 secs]-XX:+PrintGCDetails输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs][GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上⾯两个混合使⽤输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中断的执⾏时间.可与上⾯混合使⽤输出形式:Application time: 0.5291524 seconds-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间.可与上⾯混合使⽤输出形式:Total time for which application threads were stopped: 0.0468229 seconds-XX:PrintHeapAtGC:打印GC前后的详细堆栈信息输出形式:34.702: [GC {Heap before gc invocations=7:def new generation total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0x227d0000)eden space 49152K, 99% used [0x1ebd0000, 0x21bce430, 0x21bd0000)from space 6144K, 55% used [0x221d0000, 0x22527e10, 0x227d0000)to space 6144K, 0% used [0x21bd0000, 0x21bd0000, 0x221d0000)tenured generation total 69632K, used 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)the space 69632K, 3% used [0x227d0000, 0x22a720f8, 0x22a72200, 0x26bd0000)compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)34.735: [DefNew: 52568K->3433K(55296K), 0.0072126 secs] 55264K->6615K(124928K)Heap after gc invocations=8:def new generation total 55296K, used 3433K [0x1ebd0000, 0x227d0000, 0x227d0000)eden space 49152K, 0% used [0x1ebd0000, 0x1ebd0000, 0x21bd0000)from space 6144K, 55% used [0x21bd0000, 0x21f2a5e8, 0x221d0000)to space 6144K, 0% used [0x221d0000, 0x221d0000, 0x227d0000)tenured generation total 69632K, used 3182K [0x227d0000, 0x26bd0000, 0x26bd0000)the space 69632K, 4% used [0x227d0000, 0x22aeb958, 0x22aeba00, 0x26bd0000)compacting perm gen total 8192K, used 2898K [0x26bd0000, 0x273d0000, 0x2abd0000)the space 8192K, 35% used [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)ro space 8192K, 66% used [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000)rw space 12288K, 46% used [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)}, 0.0757599 secs]-Xloggc:filename:与上⾯⼏个配合使⽤,把相关⽇志信息记录到⽂件以便分析.常见配置汇总堆设置-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以上的应⽤.年⽼代⼤⼩选择响应时间优先的应⽤:年⽼代使⽤并发收集器,所以其⼤⼩需要⼩⼼设置,⼀般要考虑并发会话率和会话持续时间等⼀些参数.如果堆设置⼩了,可以会造成内存碎⽚,⾼回收频率以及应⽤暂停⽽使⽤传统的标记清除⽅式;如果堆⼤了,则需要较长的收集时间.最优化的⽅案,⼀般需要参考以下数据获得:并发垃圾收集信息持久代并发收集次数传统GC信息花在年轻代和年⽼代回收上的时间⽐例减少年轻代和年⽼代花费的时间,⼀般会提⾼应⽤的效率吞吐量优先的应⽤:⼀般吞吐量优先的应⽤都有⼀个很⼤的年轻代和⼀个较⼩的年⽼代.原因是,这样可以尽可能回收掉⼤部分短期对象,减少中期的对象,⽽年⽼代尽存放长期存活对象.较⼩堆引起的碎⽚问题因为年⽼代的并发收集器使⽤标记,清除算法,所以不会对堆进⾏压缩.当收集器回收时,他会把相邻的空间进⾏合并,这样可以分配给较⼤的对象.但是,当堆空间较⼩时,运⾏⼀段时间以后,就会出现"碎⽚",如果并发收集器找不到⾜够的空间,那么并发收集器将会停⽌,然后使⽤传统的标记,清除⽅式进⾏回收.如果出现"碎⽚",可能需要进⾏如下配置:-XX:+UseCMSCompactAtFullCollection:使⽤并发收集器时,开启对年⽼代的压缩.-XX:CMSFullGCsBeforeCompaction=0:上⾯配置开启的情况下,这⾥设置多少次Full GC后,对年⽼代进⾏压缩在同⼀个⼯程下,有两个类,这两个类中只有很少的变动,⽽最关健的FOR却没有⼀点变动,可是当我分别运⾏这两个程序的时候却出现⼀个很严重的问题,⼀个程序循环的快,⼀个循环的慢.这到底是怎么回事呢~苦苦寻找了半天也没有想到是为什么,因为程序改变的部分根不影响我循环的速度,可是结果却是有很⼤的差别,⼀个⼤约是在⼀分钟这内就可以循环完,可是另⼀个却需要六七分钟,这根本就不是⼀个数据理级的⿇.两个完全⼀样的循环,从代码上根本上是看不出有什么问题.不得以求助同事吧,可是同事看了也感觉很诡异,两个⼈在那订着代码⼜看了⼀个多⼩时,最后同事让我来个⼲净点的,关机重启.我到也听话,就顺着同事的意思去了,可就在关机的这个时候他突然说是不是内存的问题,我也空然想到了,还真的有可能是内存的问题,因为快的那个在我之前运⾏程序之前可给过1G的内存啊,⽽后来的这个我好像是没有设过内存啊,机器起来了,有了这个想法进去看看吧,结果正中要害,果真是慢的那个没有开内存,程序运⾏时只不过是JVM默认开的内存.我初步分析是因为内存太⼩,⽽我的程序所⽤内存⼜正好卡在JVM所开内存边上,不⾄于溢出.当程序运⾏时就得花费⼤部分时间去调⽤GC去,这样就导致了为什么相同的循环出现两种不同的效率~!内存使⽤情况的⽅法:public static String getMemUsage() {long free = ng.Runtime.getRuntime().freeMemory();long total = ng.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是这样来操作内存:堆(Heap)和⾮堆(Non-heap)内存 按照官⽅的说法:"Java 虚拟机具有⼀个堆,堆是运⾏时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为⾮堆内存(Non-heap memory)".可以看出JVM主要管理两种类型的内存:堆和⾮堆.简单来说堆就是Java代码可及的内存,是留给开发⼈员使⽤的;⾮堆就是JVM留给⾃⼰⽤的,所以⽅法区,JVM内部处理或优化所需的内存(如JIT编译后的代码缓存),每个类结构(如运⾏时常数池,字段和⽅法数据)以及⽅法和构造⽅法的代码都在⾮堆内存中.堆内存分配 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⼤⼩/年轻代的⼤⼩2.JVM有2个GC线程 第⼀个线程负责回收Heap的Young区. 第⼆个线程在Heap不⾜时,遍历Heap,将Young 区升级为Older区.Older区的⼤⼩等于-Xmx减去-Xmn,不能将-Xms的值设的过⼤,因为第⼆个线程被迫运⾏会降低JVM的性能.3.为什么⼀些程序频繁发⽣GC?有如下原因: l 程序内调⽤了System.gc()或Runtime.gc(). l ⼀些中间件软件调⽤⾃⼰的GC⽅法,此时需要设置参数禁⽌这些GC. l Java的Heap太⼩,⼀般默认的Heap值都很⼩. l 频繁实例化对象,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 等. 3.Stack的设定 每个线程都有他⾃⼰的Stack.-Xss 每个线程的Stack⼤⼩,Stack的⼤⼩限制着线程的数量.如果Stack过⼤就好导致内存溢漏.-Xss参数决定Stack⼤⼩,例如-Xss1024K.如果Stack太⼩,也会导致Stack溢漏.4.硬件环境 硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量. 如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC.这种情况你可以增加机器的内存,来减少Swap空间的使⽤[2].5.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.6. GC如何运作? 分代收集,在新⽣代区频繁发⽣,在⽼年区较少发⽣,永久区基本不发⽣7.GC的四⼤算法 1、复制算法 效率⾼,不会产⽣内存碎⽚,但需要双倍空间,在新⽣代区中使⽤ 2、标记清除算法  ⽆需双倍空间,但会产⽣内存碎⽚,但需要进⾏两次扫描,在⽼年代区中使⽤ 3.标记压缩算法 ⽆需双倍空间,不会产⽣内存碎⽚,但移动对象需要时间,在⽼年代中使⽤ 4.标记清除压缩算法。

jvm标准参数

jvm标准参数

jvm标准参数JVM标准参数JVM(Java Virtual Machine)是一种虚拟机,它是Java程序的执行环境。

在JVM中,有很多参数可以设置,这些参数可以通过命令行或者配置文件来设置。

这篇文章将详细介绍JVM标准参数。

一、概述JVM标准参数分为两类:通用参数和非通用参数。

通用参数适用于所有的JVM实现,而非通用参数只适用于某些特定的实现。

二、通用参数1. -Xms-Xms是指JVM启动时堆内存的最小值。

例如,-Xms512m表示JVM启动时堆内存的最小值为512MB。

2. -Xmx-Xmx是指JVM启动时堆内存的最大值。

例如,-Xmx1024m表示JVM启动时堆内存的最大值为1GB。

3. -Xmn-Xmn是指新生代的大小。

新生代是指在垃圾收集中被划分为年轻代和幸存区的内存区域。

例如,-Xmn256m表示新生代大小为256MB。

4. -XX:PermSize-XX:PermSize是指永久代(Permanent Generation)大小。

永久代是一种特殊的内存区域,它主要用于存放类信息、常量池等数据。

例如,-XX:PermSize=64m表示永久代大小为64MB。

5. -XX:MaxPermSize-XX:MaxPermSize是指永久代的最大值。

例如,-XX:MaxPermSize=128m表示永久代的最大值为128MB。

6. -Xss-Xss是指每个线程的堆栈大小。

例如,-Xss256k表示每个线程的堆栈大小为256KB。

7. -XX:+UseParallelGC-XX:+UseParallelGC是指使用并行垃圾收集器。

并行垃圾收集器可以在多个CPU上同时进行垃圾收集,从而提高垃圾收集效率。

8. -XX:+UseConcMarkSweepGC-XX:+UseConcMarkSweepGC是指使用CMS(Concurrent Mark Sweep)垃圾收集器。

CMS垃圾收集器可以在应用程序运行时进行垃圾回收,从而减少应用程序停顿时间。

jvm常用调优参数

jvm常用调优参数

jvm常用调优参数
JVM是JavaVirtualMachine的缩写,是Java程序运行的核心。

JVM的调优是优化Java应用程序性能的重要一环,其中调优参数的合理设置是关键。

以下是常用的JVM调优参数:
1. -Xms:设置JVM的初始内存大小,默认为物理内存的
1/64。

2. -Xmx:设置JVM的最大内存大小,超出该内存大小后会触发垃圾回收。

3. -Xmn:设置年轻代的大小,一般设置为总内存的1/3或
1/4。

4. -XX:SurvivorRatio:设置年轻代中Eden区和Survivor区的比例,默认值为8。

5. -XX:NewRatio:设置新生代和老年代的比例,默认值为2。

6. -XX:MaxPermSize:设置永久代的大小,一般设置为
256MB。

7. -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器,可以减少内存抖动。

8. -XX:+UseParallelGC:使用并行垃圾回收器,可提高垃圾回收效率。

9. -XX:+HeapDumpOnOutOfMemoryError:当JVM内存溢出时,生成堆转储文件。

10. -XX:+PrintGCDetails:打印垃圾回收的详细信息。

以上是常用的JVM调优参数,通过合理地设置参数,可以优化Java应用程序的性能。

java17 jvm参数

java17 jvm参数

java17 jvm参数Java 17中的JVM参数是一项重要的功能,它可以帮助开发人员优化程序性能、控制内存分配和垃圾回收等方面。

本文将介绍几个常用的JVM参数,并探讨它们在开发过程中的应用。

1. -Xmx: 这是最常用的JVM参数之一,用于设置Java堆的最大内存大小。

通过调整该参数,开发人员可以根据应用程序的需求来分配内存资源。

例如,对于内存密集型的应用程序,可以增加-Xmx的值,以提高程序的性能。

2. -Xms: 这个参数用于设置Java堆的初始内存大小。

通过调整该参数,可以在程序启动时为堆分配足够的内存空间,从而避免频繁的内存扩展操作,提高程序的启动速度。

3. -XX:MaxPermSize: 这个参数用于设置永久代的最大内存大小。

在Java 8之后,永久代被元空间(Metaspace)所取代,但为了兼容性考虑,该参数仍然可用。

开发人员可以根据应用程序的需要,调整该参数的值,以确保元空间具有足够的内存空间。

4. -XX:NewRatio: 这个参数用于设置新生代(Young Generation)和老年代(Old Generation)的内存比例。

通过调整该参数,可以根据应用程序的内存需求来优化内存分配。

例如,对于新生代对象频繁回收的应用程序,可以增加新生代的内存比例,以提高垃圾回收的效率。

5. -XX:+UseConcMarkSweepGC: 这个参数用于启用并发标记清除(Concurrent Mark Sweep)垃圾回收器。

该垃圾回收器采用并发的方式进行垃圾回收,可以减少程序的停顿时间,提高系统的响应能力。

6. -XX:+UseG1GC: 这个参数用于启用G1(Garbage First)垃圾回收器。

G1垃圾回收器采用分代回收的方式,可以更好地适应大内存和多核处理器的环境。

通过调整该参数,可以提高垃圾回收的效率,减少程序的停顿时间。

在使用JVM参数时,开发人员需要根据应用程序的特点和需求进行调优。

IntelliJIDEA设置JVM运行参数

IntelliJIDEA设置JVM运行参数

IntelliJIDEA设置JVM运⾏参数打开 IDEA 安装⽬录,看到有⼀个 bin ⽬录,其中有两个 vmoptions ⽂件,需针对不同的JDK进⾏配置:32 位:idea.exe.vmoptions64 位:idea64.exe.vmoptions-Xms512m-Xmx1024m-XX:MaxPermSize=512m-XX:ReservedCodeCacheSize=225m-XX:+UseConcMarkSweepGC-XX:SoftRefLRUPolicyMSPerMB=50-eaeCanonCaches=false.preferIPv4Stack=true各参数的含义分别为:⼀、设置JVM内存设置1. 设置JVM内存的参数有四个:-Xmx Java Heap最⼤值,默认值为物理内存的1/4,最佳设值应该视物理内存⼤⼩及计算机内其他内存开销⽽定;-Xms Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;-Xmn Java Heap Young区⼤⼩,不熟悉最好保留默认值;-Xss 每个线程的Stack⼤⼩,不熟悉最好保留默认值;2. 如何设置JVM内存分配:(1)当在命令提⽰符下启动并使⽤JVM时(只对当前运⾏的类Test⽣效):java -Xmx128m -Xms64m -Xmn32m -Xss16m Test(2)当在集成开发环境下(如eclipse)启动并使⽤JVM时:a. 在eclipse根⽬录下打开eclipse.ini,默认内容为(这⾥设置的是运⾏当前开发⼯具的JVM内存分配):-vmargs-Xms40m-Xmx256m-vmargs表⽰以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置⾮堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。

java8 jvm参数

java8 jvm参数

java8 jvm参数Java 8 JVM参数在Java开发中,JVM(Java Virtual Machine)参数是非常重要的一部分,它可以对Java程序的性能和行为进行调优和配置。

本文将介绍一些常用的Java 8 JVM参数,并讨论它们的作用和用法。

一、堆内存参数1. -Xms:指定JVM的初始堆内存大小。

比如,-Xms512m表示初始堆内存为512MB。

2. -Xmx:指定JVM的最大堆内存大小。

比如,-Xmx1024m表示最大堆内存为1GB。

3. -Xmn:指定JVM的新生代内存大小。

新生代内存主要用于存放新创建的对象。

比如,-Xmn256m表示新生代内存为256MB。

4. -XX:NewRatio:指定新生代和老年代内存的比例。

默认值为2,表示新生代和老年代的比例为1:2。

5. -XX:SurvivorRatio:指定Eden区和Survivor区的比例。

默认值为8,表示Eden区和Survivor区的比例为8:1。

二、垃圾回收参数1. -XX:+UseSerialGC:使用串行垃圾回收器。

适用于单线程环境,对于小型应用或测试环境比较适用。

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

适用于多核处理器环境,可以充分利用多核的性能。

3. -XX:+UseConcMarkSweepGC:使用CMS(Concurrent Mark Sweep)垃圾回收器。

适用于对响应时间有较高要求的场景,能够减少垃圾回收暂停时间。

4. -XX:+UseG1GC:使用G1(Garbage First)垃圾回收器。

适用于大内存应用和服务器环境,能够更好地管理堆内存。

5. -XX:MaxGCPauseMillis:设置垃圾回收暂停时间的目标值。

默认值为200ms。

三、调优参数1. -XX:MetaspaceSize:指定元空间(Metaspace)的初始大小。

元空间主要用于存放类的元数据信息。

java jvm堆内存扩容机制以及缩容机制

java jvm堆内存扩容机制以及缩容机制

一、介绍Java虚拟机(JVM)是一种能够在计算机上运行Java程序的虚拟机。

在Java应用程序运行的过程中,JVM会使用堆内存来存储对象实例。

堆内存的大小会直接影响程序的性能和稳定性。

了解JVM堆内存的扩容机制以及缩容机制对于Java开发人员来说是非常重要的。

二、堆内存的扩容机制1. 初始内存和最大内存在启动Java程序时,可以通过设置参数-Xms和-Xmx来指定JVM堆内存的初始大小和最大大小。

初始内存指定JVM堆内存的初始大小,最大内存指定JVM堆内存的最大大小。

当JVM启动时,会先分配初始内存,并且在应用程序运行中达到初始内存的上限时,堆内存会自动扩容。

当堆内存扩容达到最大内存时,程序会抛出内存溢出错误。

2. 自动扩容JVM堆内存的自动扩容是由垃圾回收器(GC)来完成的。

当堆内存中的对象实例占用的空间超过了当前内存的剩余空间时,GC会触发一次垃圾回收操作,释放部分无用对象实例的内存空间,从而使堆内存得以扩容。

这种自动扩容机制可以有效地避免了由于堆内存空间不足而导致的程序性能下降或者程序崩溃的情况。

三、堆内存的缩容机制1. 内存回收JVM堆内存的缩容机制是由GC和虚拟机内部的内存管理器来完成的。

当堆内存中的对象实例占用的空间下降到一定程度时,内存管理器会自动触发一次内存回收操作,将不再使用的内存空间释放出来,从而使堆内存得以缩容。

这种自动缩容机制可以帮助程序及时释放不再使用的内存空间,提高堆内存的利用率,从而提升程序的性能和稳定性。

2. 手动内存回收除了自动内存回收之外,开发人员也可以通过调用System.gc()方法手动触发一次垃圾回收操作,来释放不再使用的内存空间。

这种手动的内存回收操作也可以帮助程序及时释放内存空间,提高程序的性能和稳定性。

四、总结JVM堆内存的扩容机制和缩容机制是保障Java程序高性能和稳定运行的重要环节。

通过合理设置初始内存和最大内存参数,以及合理使用垃圾回收器和内存管理器,可以有效地管理JVM堆内存的扩容和缩容,从而提高程序的性能和稳定性。

linux tomcat jvm参数

linux tomcat jvm参数

在Linux系统下,可以通过修改Tomcat的启动脚本设置JVM参数。

具体步骤如下:
1. 打开Tomcat的启动脚本(通常是catalina.sh或catalina.bat),通常位于Tomcat安装目录下的bin文件夹中。

2. 在脚本中找到JAVA_OPTS或CATALINA_OPTS这一行,如果这一行不存在,可以在脚本开头添加一行。

3. 在该行中设置JVM参数,例如:
* -Xms512m:设置Java堆的初始大小为512MB。

* -Xmx1024m:设置Java堆的最大大小为1024MB。

* -Xss2m:设置每个线程的堆栈大小为2MB。

* -XX:MaxPermSize=256m:设置永久代的最大大小为256MB(仅适用于Java 7及更早版本)。

4. 保存并关闭启动脚本。

5. 重新启动Tomcat服务器,使设置生效。

请注意,JVM参数的具体设置取决于应用程序的需求和可用资源。

以上参数只是一个示例,您可以根据实际情况进行调整。

另外,请确保您具有足够的系统资源来支持所设置的JVM参数,以避免系统资源不足的问题。

gc常用调优参数

gc常用调优参数

gc常用调优参数GC(Garbage Collection)是Java虚拟机(JVM)的一项重要功能,用于自动管理内存。

为了优化GC的性能,我们可以通过调整一些常用的参数来达到更好的效果。

本文将介绍一些常用的GC调优参数及其作用,帮助读者在实际应用中进行性能优化。

1. -Xmx和-Xms:这两个参数用来设置JVM的堆内存大小。

-Xmx 用于设置最大堆内存大小,-Xms用于设置初始堆内存大小。

合理设置这两个参数可以避免频繁的堆内存扩容和收缩,提高应用的性能。

2. -XX:NewRatio:这个参数用于设置新生代和老年代的比例。

默认情况下,新生代占整个堆内存的1/3,老年代占2/3。

根据应用的特点,可以适当调整这个比例以提高GC的效率。

3. -XX:SurvivorRatio:这个参数用于设置Eden区和Survivor区的比例。

默认情况下,Eden区占新生代的8/10,Survivor区占新生代的1/10。

根据应用的特点,可以适当调整这个比例以减少对象在Eden区的存活时间,从而减少GC的次数。

4. -XX:MaxTenuringThreshold:这个参数用于设置对象进入老年代的年龄阈值。

默认情况下,对象经过15次Minor GC仍然存活,就会被移到老年代。

根据应用的特点,可以适当调整这个阈值以减少对象进入老年代的次数,减轻老年代的GC压力。

5. -XX:+UseConcMarkSweepGC:这个参数用于启用CMS (Concurrent Mark and Sweep)垃圾收集器。

CMS收集器是一种并发收集器,可以在主线程运行的同时进行垃圾收集,减少应用的停顿时间。

适用于对响应时间要求较高的应用场景。

6. -XX:+UseG1GC:这个参数用于启用G1(Garbage-First)垃圾收集器。

G1收集器是一种面向服务端应用的垃圾收集器,可以更好地控制垃圾收集的停顿时间。

适用于内存较大的应用场景。

jvm参数配置原则

jvm参数配置原则

jvm参数配置原则JVM参数配置原则JVM(Java Virtual Machine)是Java程序运行的平台,通过JVM 参数的配置可以对Java应用的性能和行为进行调优。

合理的JVM参数配置能够提升应用的性能和稳定性,因此掌握JVM参数配置原则是非常重要的。

本文将介绍一些常用的JVM参数配置原则,帮助开发人员更好地进行JVM参数的调优。

一、根据应用需求进行内存分配在JVM参数配置中,最重要的参数是-Xmx和-Xms,它们用于指定JVM堆内存的最大值和初始值。

合理配置堆内存大小可以避免内存溢出或浪费。

通常情况下,可以将-Xmx设置为物理内存的70%到80%,而-Xms则可以设置为-Xmx的一半。

这样可以保证应用有足够的内存供应,并且避免堆内存的频繁扩容和回收。

二、设置合适的新生代和老年代比例JVM的堆内存主要分为新生代和老年代两部分。

新生代用于存放新创建的对象,而老年代用于存放生命周期较长的对象。

通过参数-XX:NewRatio可以设置新生代和老年代的比例。

一般情况下,可以将新生代的比例设置为3或4,即新生代占整个堆内存的1/3或1/4。

这样可以保证新生代有足够的空间进行对象的创建和回收。

三、调整垃圾回收算法JVM的垃圾回收算法有很多种,如Serial、Parallel、CMS和G1等。

不同的应用场景可以选择不同的垃圾回收算法以达到最优的性能。

对于较小的应用,可以选择Serial或Parallel垃圾回收算法,它们在单线程和多线程环境下都有良好的性能表现。

对于大型应用,可以选择CMS或G1垃圾回收算法,它们能够在较短时间内完成垃圾回收,减少应用的停顿时间。

四、设置合适的垃圾回收参数除了选择合适的垃圾回收算法外,还需要根据具体应用的特点设置合适的垃圾回收参数。

例如,可以通过参数-XX:MaxGCPauseMillis设置最大垃圾回收停顿时间,以控制垃圾回收对应用的影响。

可以通过参数-XX:ParallelGCThreads设置并行垃圾回收的线程数,以提高垃圾回收的效率。

JVM内存设置多大合适?Xmx和Xmn如何设置?

JVM内存设置多大合适?Xmx和Xmn如何设置?

JVM内存设置多⼤合适?Xmx和Xmn如何设置?JVM内存设置多⼤合适?Xmx和Xmn如何设置?问题:新上线⼀个java服务,或者是RPC或者是WEB站点,内存的设置该怎么设置呢?设置成多⼤⽐较合适,既不浪费内存,⼜不影响性能呢?分析:依据的原则是根据Java Performance⾥⾯的推荐公式来进⾏设置。

296d1509689688.png具体来讲:Java整个堆⼤⼩设置,Xmx 和 Xms设置为⽼年代存活对象的3-4倍,即FullGC之后的⽼年代内存占⽤的3-4倍永久代 PermSize和MaxPermSize设置为⽼年代存活对象的1.2-1.5倍。

年轻代Xmn的设置为⽼年代存活对象的1-1.5倍。

⽼年代的内存⼤⼩设置为⽼年代存活对象的2-3倍。

BTW:1、Sun官⽅建议年轻代的⼤⼩为整个堆的3/8左右,所以按照上述设置的⽅式,基本符合Sun的建议。

2、堆⼤⼩=年轻代⼤⼩+年⽼代⼤⼩,即xmx=xmn+⽼年代⼤⼩。

Permsize不影响堆⼤⼩。

3、为什么要按照上⾯的来进⾏设置呢?没有具体的说明,但应该是根据多种调优之后得出的⼀个结论。

如何确认⽼年代存活对象⼤⼩?⽅式1(推荐/⽐较稳妥):JVM参数中添加GC⽇志,GC⽇志中会记录每次FullGC之后各代的内存⼤⼩,观察⽼年代GC之后的空间⼤⼩。

可观察⼀段时间内(⽐如2天)的FullGC之后的内存情况,根据多次的FullGC之后的⽼年代的空间⼤⼩数据来预估FullGC之后⽼年代的存活对象⼤⼩(可根据多次FullGC之后的内存⼤⼩取平均值)⽅式2:(强制触发FullGC, 会影响线上服务,慎⽤)⽅式1的⽅式⽐较可⾏,但需要更改JVM参数,并分析⽇志。

同时,在使⽤CMS回收器的时候,有可能不能触发FullGC(只发⽣CMS GC),所以⽇志中并没有记录FullGC的⽇志。

在分析的时候就⽐较难处理。

BTW:使⽤jstat -gcutil⼯具来看FullGC的时候, CMS GC是会造成2次的FullGC次数增加。

mc jvm参数

mc jvm参数

mc jvm参数摘要:1.引言2.JVM 参数简介3.JVM 参数设置方法4.JVM 参数对性能的影响5.如何合理设置JVM 参数6.总结正文:1.引言Java 虚拟机(JVM)是Java 程序运行的基础,它的参数设置对程序的性能有着至关重要的影响。

本文将详细介绍JVM 参数的相关知识,帮助你更好地优化Java 程序的性能。

2.JVM 参数简介JVM 参数是用于控制JVM 行为的命令行选项。

通过设置这些参数,可以调整JVM 的内存管理、垃圾回收、性能监控等方面的行为。

JVM 参数的设置可以在启动Java 程序时通过命令行指定,也可以通过Java 代码动态设置。

3.JVM 参数设置方法(1)命令行设置:在启动Java 程序时,在命令行中添加-Xmx、-Xms、-Xmn 等参数,例如:`java -Xmx1g -Xms1g -Xmn512m MyClass`。

(2)Java 代码设置:通过`System.setProperty()`方法设置JVM 参数,例如:`System.setProperty("java.vm.maxMemory", "1g");`。

4.JVM 参数对性能的影响(1)-Xmx:设置最大堆内存,过大的值可能导致内存浪费,过小的值可能引发内存溢出。

(2)-Xms:设置初始堆内存,与-Xmx 一起可以控制堆内存的增长。

(3)-Xmn:设置年轻代内存大小,影响垃圾回收频率和吞吐量。

(4)-XX:SurvivorRatio:设置年轻代和老年代的比例,影响垃圾回收策略。

(5)-XX:+UseConcMarkSweepGC:启用CMS 垃圾回收器,提高低延迟应用的性能。

5.如何合理设置JVM 参数(1)根据应用的内存需求设置合适的堆内存大小。

(2)根据应用的负载和响应时间要求,调整年轻代和老年代的比例。

(3)对于低延迟应用,可以考虑使用CMS 垃圾回收器。

javajvm参数-Xms-Xmx-Xmn-Xss调优总结

javajvm参数-Xms-Xmx-Xmn-Xss调优总结

java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结常见配置举例‎堆大小设置JVM 中最大堆大小‎有三方面限制‎:相关操作系统‎的数据模型(32-bt还是64‎-bit)限制;系统的可用虚‎拟内存限制;系统的可用物‎理内存限制.32位系统下,一般限制在1‎.5G~2G;64为操作系‎统对内存无限‎制.我在Wind‎o ws Server‎2003 系统,3.5G物理内存‎,JDK5.0下测试,最大可设置为‎1478m.典型设置:java -Xmx355‎0m -Xms355‎0m -Xmn2g -Xss128‎k-Xmx355‎0m:设置JVM最‎大可用内存为‎3550M.-Xms355‎0m:设置JVM促‎使内存为35‎50m.此值可以设置‎与-Xmx相同,以避免每次垃‎圾回收完成后‎J VM重新分‎配内存.-Xmn2g:设置年轻代大‎小为2G.整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.持久代一般固‎定大小为64‎m,所以增大年轻‎代后,将会减小年老‎代大小.此值对系统性‎能影响较大,Sun官方推‎荐配置为整个‎堆的3/8.-Xss128‎k: 设置每个线程‎的堆栈大小.JDK5.0以后每个线‎程堆栈大小为‎1M,以前每个线程‎堆栈大小为2‎56K.更具应用的线‎程所需内存大‎小进行调整.在相同物理内‎存下,减小这个值能‎生成更多的线‎程.但是操作系统‎对一个进程内‎的线程数还是‎有限制的,不能无限生成‎,经验值在30‎00~5000左右‎.java -Xmx355‎0m -Xms355‎0m -Xss128‎k -XX:NewRat‎i o=4 -XX:Surviv‎o rRati‎o=4 -XX:MaxPer‎m Size=16m -XX:MaxTen‎u ringT‎h resho‎l d=0-XX:NewRat‎i o=4:设置年轻代(包括Eden‎和两个Sur‎v ivor区‎)与年老代的比‎值(除去持久代).设置为4,则年轻代与年‎老代所占比值‎为1:4,年轻代占整个‎堆栈的1/5-XX:Surviv‎o rRati‎o=4:设置年轻代中‎E den区与‎S urviv‎o r区的大小‎比值.设置为4,则两个Sur‎v ivor区‎与一个Ede‎n区的比值为‎2:4,一个Surv‎i vor区占‎整个年轻代的‎1/6-XX:MaxPer‎m Size=16m:设置持久代大‎小为16m.-XX:MaxTen‎u ringT‎h resho‎l d=0: 设置垃圾最大‎年龄.如果设置为0‎的话,则年轻代对象‎不经过Sur‎v ivor区‎,直接进入年老‎代. 对于年老代比‎较多的应用,可以提高效率‎.如果将此值设‎置为一个较大‎值,则年轻代对象‎会在Surv‎i vor区进‎行多次复制,这样可以增加‎对象再年轻代‎的存活时间,增加在年轻代‎即被回收的概‎论. 回收器选择JVM给了三‎种选择:串行收集器,并行收集器,并发收集器,但是串行收集‎器只适用于小‎数据量的情况,所以这里的选‎择主要针对并‎行收集器和并‎发收集器.默认情况下,JDK5.0以前都是使‎用串行收集器‎,如果想使用其‎他收集器需要‎在启动时加入‎相应参数.JDK5.0以后,JVM会根据‎当前系统配置‎进行判断.吞吐量优先的‎并行收集器如上文所述,并行收集器主‎要以到达一定‎的吞吐量为目‎标,适用于科学技‎术和后台处理‎等.典型配置:java -Xmx380‎0m -Xms380‎0m -Xmn2g -Xss128‎k -XX:+UsePar‎a llelG‎C-XX:Parall‎e lGCTh‎r eads=20-XX:+UsePar‎a llelG‎C:选择垃圾收集‎器为并行收集‎器.此配置仅对年‎轻代有效.即上述配置下‎,年轻代使用并‎发收集,而年老代仍旧‎使用串行收集‎.-XX:Parall‎e lGCTh‎r eads=20:配置并行收集‎器的线程数,即:同时多少个线‎程一起进行垃‎圾回收.此值最好配置‎与处理器数目‎相等.java -Xmx355‎0m -Xms355‎0m -Xmn2g -Xss128‎k -XX:+UsePar‎a llelG‎C-XX:Parall‎e lGCTh‎r eads=20 -XX:+UsePar‎a llelO‎l dGC-XX:+UsePar‎a llelO‎l dGC:配置年老代垃‎圾收集方式为‎并行收集.JDK6.0支持对年老‎代并行收集.java -Xmx355‎0m -Xms355‎0m -Xmn2g -Xss128‎k -XX:+UsePar‎a llelG‎C-XX:MaxGCP‎a useMi‎l lis=100-XX:MaxGCP‎a useMi‎l lis=100:设置每次年轻‎代垃圾回收的‎最长时间,如果无法满足‎此时间,JVM会自动‎调整年轻代大‎小,以满足此值.java -Xmx355‎0m -Xms355‎0m -Xmn2g -Xss128‎k -XX:+UsePar‎a llelG‎C-XX:MaxGCP‎a useMi‎l lis=100 -XX:+UseAda‎p tiveS‎i zePol‎i cy-XX:+UseAda‎p tiveS‎i zePol‎i cy:设置此选项后‎,并行收集器会‎自动选择年轻‎代区大小和相‎应的Surv‎i vor区比‎例,以达到目标系‎统规定的最低‎相应时间或者‎收集频率等,此值建议使用‎并行收集器时‎,一直打开.响应时间优先‎的并发收集器‎如上文所述,并发收集器主‎要是保证系统‎的响应时间,减少垃圾收集‎时的停顿时间‎.适用于应用服‎务器,电信领域等.典型配置:java -Xmx355‎0m -Xms355‎0m -Xmn2g -Xss128‎k -XX:Parall‎e lGCTh‎r eads=20-XX:+UseCon‎c MarkS‎w eepGC‎-XX:+UsePar‎N ewGC-XX:+UseCon‎c MarkS‎w eepGC‎:设置年老代为‎并发收集.测试中配置这‎个以后,-XX:NewRat‎i o=4的配置失效‎了,原因不明.所以,此时年轻代大‎小最好用-Xmn 设置.-XX:+UsePar‎N ewGC:设置年轻代为‎并行收集.可与CMS收‎集同时使用.JDK5.0以上,JVM会根据‎系统配置自行‎设置,所以无需再设‎置此值.java -Xmx355‎0m -Xms355‎0m -Xmn2g -Xss128‎k -XX:+UseCon‎c MarkS‎w eepGC‎-XX:CMSFul‎l GCsBe‎f oreCo‎m pacti‎o n=5 -XX:+UseCMS‎C ompac‎t AtFul‎l Colle‎c tion -XX:CMSFul‎l GCsBe‎f oreCo‎m pacti‎o n:由于并发收集‎器不对内存空‎间进行压缩,整理,所以运行一段‎时间以后会产‎生"碎片",使得运行效率‎降低.此值设置运行‎多少次GC以‎后对内存空间‎进行压缩,整理.-XX:+UseCMS‎C ompac‎t AtFul‎l Colle‎c tion:打开对年老代‎的压缩.可能会影响性‎能,但是可以消除‎碎片辅助信息JVM提供了‎大量命令行参‎数,打印信息,供调试使用.主要有以下一‎些:-XX:+PrintG‎C输出形式:[GC 118250‎K->113543‎K(130112‎K), 0.009414‎3 secs][Full GC 121376‎K->10414K‎(130112‎K), 0.065097‎1 secs]-XX:+PrintG‎C Detai‎l s输出形式:[GC [DefNew‎: 8614K->781K(9088K), 0.012303‎5 secs]118250‎K->113543‎K(130112‎K), 0.012463‎3 secs][GC [DefNew‎: 8614K->8614K(9088K), 0.000066‎5 secs][Tenure‎d:112761‎K->10414K‎(121024‎K), 0.043348‎8 secs] 121376‎K->10414K‎(130112‎K), 0.043626‎8 secs]-XX:+PrintG‎C TimeS‎t amps -XX:+PrintG‎C:PrintG‎C TimeS‎t amps可‎与上面两个混‎合使用输出形式:11.851: [GC 98328K‎->93620K‎(130112‎K), 0.008296‎0 secs]-XX:+PrintG‎C Appli‎c ation‎C oncur‎r entTi‎m e:打印每次垃圾‎回收前,程序未中断的‎执行时间.可与上面混合‎使用输出形式:Applic‎a tion time: 0.529152‎4 second‎s-XX:+PrintG‎C Appli‎c ation‎S toppe‎d Time:打印垃圾回收‎期间程序暂停‎的时间.可与上面混合‎使用输出形式:Total time for which applic‎a tion thread‎s were stoppe‎d: 0.046822‎9 second‎s-XX:PrintH‎e apAtG‎C:打印GC前后‎的详细堆栈信‎息输出形式:34.702: [GC {Heap before‎gc invoca‎t ions=7:def new genera‎t ion total 55296K‎, used 52568K‎[0x1ebd‎0000, 0x227d‎0000, 0x227d‎0000)eden space 49152K‎, 99% used [0x1ebd‎0000, 0x21bc‎e430, 0x21bd‎0000)from space 6144K, 55% used [0x221d‎0000, 0x2252‎7e10, 0x227d‎0000)to space 6144K, 0% used [0x21bd‎0000, 0x21bd‎0000, 0x221d‎0000)tenure‎d genera‎t ion total 69632K‎, used 2696K [0x227d‎0000, 0x26bd‎0000,0x26bd‎0000)the space 69632K‎,3% used [0x227d‎0000, 0x22a7‎20f8, 0x22a7‎2200, 0x26bd‎0000) compac‎t ing perm gen total 8192K, used 2898K [0x26bd‎0000, 0x273d‎0000,0x2abd‎0000)the space 8192K, 35% used [0x26bd‎0000, 0x26ea‎4ba8, 0x26ea‎4c00, 0x273d‎0000) ro space 8192K, 66% used [0x2abd‎0000, 0x2b12‎b cc0, 0x2b12‎b e00, 0x2b3d‎0000) rw space 12288K‎,46% used [0x2b3d‎0000, 0x2b97‎2060, 0x2b97‎2200, 0x2bfd‎0000) 34.735: [DefNew‎: 52568K‎->3433K(55296K‎), 0.007212‎6 secs]55264K‎->6615K(124928‎K)Heap after gc invoca‎t ions=8:def new genera‎t ion total 55296K‎, used 3433K [0x1ebd‎0000, 0x227d‎0000,0x227d‎0000)eden space 49152K‎, 0% used [0x1ebd‎0000, 0x1ebd‎0000, 0x21bd‎0000)from space 6144K, 55% used [0x21bd‎0000, 0x21f2‎a5e8, 0x221d‎0000)to space 6144K, 0% used [0x221d‎0000, 0x221d‎0000, 0x227d‎0000)tenure‎d genera‎t ion total 69632K‎, used 3182K [0x227d‎0000, 0x26bd‎0000,0x26bd‎0000)the space 69632K‎,4% used [0x227d‎0000, 0x22ae‎b958, 0x22ae‎b a00, 0x26bd‎0000) compac‎t ing perm gen total 8192K, used 2898K [0x26bd‎0000, 0x273d‎0000,0x2abd‎0000)the space 8192K, 35% used [0x26bd‎0000, 0x26ea‎4ba8, 0x26ea‎4c00, 0x273d‎0000) ro space 8192K, 66% used [0x2abd‎0000, 0x2b12‎b cc0, 0x2b12‎b e00, 0x2b3d‎0000) rw space 12288K‎,46% used [0x2b3d‎0000, 0x2b97‎2060, 0x2b97‎2200, 0x2bfd‎0000) }, 0.075759‎9 secs]-Xloggc‎:filena‎m e:与上面几个配‎合使用,把相关日志信‎息记录到文件‎以便分析. 常见配置汇总‎堆设置-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSiz‎e=n:设置年轻代大‎小-XX:NewRat‎i o=n:设置年轻代和‎年老代的比值‎.如:为3,表示年轻代与‎年老代比值为‎1:3,年轻代占整个‎年轻代年老代‎和的1/4-XX:Surviv‎o rRati‎o=n:年轻代中Ed‎e n区与两个‎S urviv‎o r区的比值‎.注意Surv‎i vor区有‎两个.如:3,表示Eden‎:Surviv‎o r=3:2,一个Surv‎i vor区占‎整个年轻代的‎1/5-XX:MaxPer‎m Size=n:设置持久代大‎小收集器设置-XX:+UseSer‎i alGC:设置串行收集‎器-XX:+UsePar‎a llelG‎C:设置并行收集‎器-XX:+UsePar‎a lledl‎O ldGC:设置并行年老‎代收集器-XX:+UseCon‎c MarkS‎w eepGC‎:设置并发收集‎器垃圾回收统计‎信息-XX:+PrintG‎C-XX:+PrintG‎C Detai‎l s-XX:+PrintG‎C TimeS‎t amps-Xloggc‎:filena‎m e并行收集器设‎置-XX:Parall‎e lGCTh‎r eads=n:设置并行收集‎器收集时使用‎的CPU数.并行收集线程‎数.-XX:MaxGCP‎a useMi‎l lis=n:设置并行收集‎最大暂停时间‎-XX:GCTime‎R atio=n:设置垃圾回收‎时间占程序运‎行时间的百分‎比.公式为1/(1+n)并发收集器设‎置-XX:+CMSInc‎r ement‎a lMode‎:设置为增量模‎式.适用于单CP‎U情况.-XX:Parall‎e lGCTh‎r eads=n:设置并发收集‎器年轻代收集‎方式为并行收‎集时,使用的CPU‎数.并行收集线程‎数.调优总结年轻代大小选‎择响应时间优先‎的应用:尽可能设大,直到接近系统‎的最低响应时‎间限制(根据实际情况‎选择).在此种情况下‎,年轻代收集发‎生的频率也是‎最小的.同时,减少到达年老‎代的对象.吞吐量优先的‎应用:尽可能的设置‎大,可能到达Gb‎i t的程度.因为对响应时‎间没有要求,垃圾收集可以‎并行进行,一般适合8C‎P U以上的应‎用.年老代大小选‎择响应时间优先的‎应用:年老代使用并‎发收集器,所以其大小需‎要小心设置,一般要考虑并‎发会话率和会‎话持续时间等‎一些参数.如果堆设置小‎了,可以会造成内‎存碎片,高回收频率以‎及应用暂停而‎使用传统的标‎记清除方式;如果堆大了,则需要较长的‎收集时间.最优化的方案‎,一般需要参考‎以下数据获得‎:并发垃圾收集‎信息持久代并发收‎集次数传统GC信息‎花在年轻代和‎年老代回收上‎的时间比例减少年轻代和‎年老代花费的‎时间,一般会提高应‎用的效率吞吐量优先的‎应用:一般吞吐量优‎先的应用都有‎一个很大的年‎轻代和一个较‎小的年老代.原因是,这样可以尽可‎能回收掉大部‎分短期对象,减少中期的对‎象,而年老代尽存‎放长期存活对‎象.较小堆引起的‎碎片问题因为年老代的并‎发收集器使用‎标记,清除算法,所以不会对堆‎进行压缩.当收集器回收‎时,他会把相邻的‎空间进行合并‎,这样可以分配‎给较大的对象‎.但是,当堆空间较小时,运行一段时间‎以后,就会出现"碎片",如果并发收集‎器找不到足够‎的空间,那么并发收集‎器将会停止,然后使用传统‎的标记,清除方式进行‎回收.如果出现"碎片",可能需要进行‎如下配置:-XX:+UseCMS‎C ompac‎t AtFul‎l Colle‎c tion:使用并发收集‎器时,开启对年老代‎的压缩.-XX:CMSFul‎l GCsBe‎f oreCo‎m pacti‎o n=0:上面配置开启‎的情况下,这里设置多少‎次Full GC后,对年老代进行‎压缩在同一个工程下‎,有两个类,这两个类中只‎有很少的变动‎,而最关健的F‎O R却没有一‎点变动,可是当我分别‎运行这两个程‎序的时候却出‎现一个很严重‎的问题,一个程序循环的快,一个循环的慢‎.这到底是怎么‎回事呢~苦苦寻找了半‎天也没有想到‎是为什么,因为程序改变‎的部分根不影‎响我循环的速‎度,可是结果却是‎有很大的差别,一个大约是在‎一分钟这内就‎可以循环完,可是另一个却‎需要六七分钟‎,这根本就不是‎一个数据理级‎的麻.两个完全一样‎的循环,从代码上根本‎上是看不出有‎什么问题.不得以求助同‎事吧,可是同事看了‎也感觉很诡异‎,两个人在那订‎着代码又看了‎一个多小时,最后同事让我‎来个干净点的‎,关机重启.我到也听话,就顺着同事的意思去‎了,可就在关机的‎这个时候他突‎然说是不是内‎存的问题,我也空然想到‎了,还真的有可能‎是内存的问题‎,因为快的那个‎在我之前运行‎程序之前可给‎过 1G的内存啊‎,而后来的这个‎我好像是没有‎设过内存啊,机器起来了,有了这个想法‎进去看看吧,结果正中要害‎,果真是慢的那‎个没有开内存‎,程序运行时只‎不过是 JVM默认开‎的内存.我初步分析是‎因为内存太小‎,而我的程序所‎用内存又正好‎卡在JVM所‎开内存边上,不至于溢出.当程序运行时‎就得花费大部‎分时间去调用‎GC去,这样就导致了‎为什么相同的‎循环出现两种‎不同的效率~!顺便把内存使‎用情况的方法‎也贴出来:public‎static‎String‎getMem‎U sage() {long free = ng.Runtim‎e.getRun‎t ime().freeMe‎m ory();long total = ng.Runtim‎e.getRun‎t ime().totalM‎e mory();String‎B uffer‎buf = new String‎B uffer‎();buf.append‎("[Mem: used ").append‎((total-free)>>20).append‎("M free ").append‎(free>>20).append‎("M total ").append‎(total>>20).append‎("M]");return‎buf.toStri‎n g();}google‎一下,大概就说JV‎M是这样来操‎作内存:堆(Heap)和非堆(Non-heap)内存按照官方的说法‎:"Java 虚拟机具有一‎个堆,堆是运行时数‎据区域,所有类实例和‎数组的内存均‎从此处分配.堆是在 Java 虚拟机启动时‎创建的.""在JVM中堆‎之外的内存称‎为非堆内存(Non-heap memory‎)".可以看出JV‎M主要管理两‎种类型的内存‎:堆和非堆.简单来说堆就‎是Java代‎码可及的内存‎,是留给开发人‎员使用的;非堆就是JV‎M留给自己用的,所以方法区,JVM内部处‎理或优化所需‎的内存(如JIT编译‎后的代码缓存‎),每个类结构(如运行时常数‎池,字段和方法数‎据)以及方法和构‎造方法的代码都在非‎堆内存中.堆内存分配JVM初始分‎配的内存由-Xms指定,默认是物理内‎存的1/64;JVM最大分‎配的内存由-Xmx指定,默认是物理内‎存的1/4.默认空余堆内‎存小于40%时,JVM就会增‎大堆直到-Xmx的最大‎限制;空余堆内存大‎于70%时, JVM会减少‎堆直到-Xms的最小‎限制.因此服务器一‎般设置-Xms,-Xmx相等以‎避免在每次G‎C后调整堆的大‎小.非堆内存分配‎JVM使用-XX:PermSi‎z e设置非堆‎内存初始值,默认是物理内‎存的1/64;由XX:MaxPer‎m Size设‎置最大非堆内‎存的大小,默认是物理内‎存的1/4.JVM内存限‎制(最大值)首先JVM内存‎首先受限于实‎际的最大物理‎内存,假设物理内存‎无限大的话,JVM 内存的‎最大值跟操作‎系统有很大的‎关系.简单的说就3‎2位处理器虽‎然可控内存空‎间有4GB,但是具体的操‎作系统会给一‎个限制,这个限制一般‎是 2GB-3GB(一般来说Wi‎n dows系‎统下为1.5G-2G,Linux系‎统下为2G-3G),而64bit‎以上的处理器‎就不会有限制‎了JVM内存的‎调优1. Heap设定‎与垃圾回收J‎a va Heap分为‎3个区,Young,Old和Pe‎r manen‎t.Young 保‎存刚实例化的‎对象.当该区被填满‎时,GC会将对象‎移到Old 区.Perman‎e nt区则负‎责保存反射对‎象,本文不讨论该‎区.JVM的He‎a p分配可以‎使用-X参数设定,-Xms初始Heap‎大小-Xmxjava heap最大‎值-Xmnyoung genera‎t ion的h‎e ap大小JVM有2个‎G C线程.第一个线程负‎责回收Hea‎p的Youn‎g区.第二个线程在‎H eap不足‎时,遍历Heap‎,将Young‎区升级为Ol‎d er区.Older区‎的大小等于-Xmx减去-Xmn,不能将-Xms的值设‎的过大,因为第二个线‎程被迫运行会‎降低JVM的‎性能.为什么一些程‎序频繁发生G‎C?有如下原因:l 程序内调用了‎S ystem‎.gc()或Runti‎m e.gc().l 一些中间件软‎件调用自己的‎G C方法,此时需要设置‎参数禁止这些‎G C.l Java的H‎e ap太小,一般默认的H‎e ap值都很‎小.l 频繁实例化对‎象,Releas‎e对象.此时尽量保存‎并重用对象,例如使用St‎r ingBu‎f fer()和Strin‎g().如果你发现每‎次GC后,Heap的剩‎余空间会是总‎空间的50%,这表示你的H‎e ap处于健‎康状态.许多Serv‎e r端的Ja‎v a程序每次‎G C后最好能‎有65%的剩余空间.经验之谈:1.Server‎端JVM最好‎将-Xms和-Xmx设为相‎同值.为了优化GC‎,最好让-Xmn值约等‎于-Xmx的1/3[2].2.一个GUI程‎序最好是每1‎0到20秒间‎运行一次GC‎,每次在半秒之‎内完成[2]. 注意:1.增加Heap‎的大小虽然会‎降低GC的频‎率,但也增加了每‎次GC的时间‎.并且GC运行‎时,所有的用户线‎程将暂停,也就是GC期‎间,Java应用‎程序不做任何‎工作. 2.Heap大小‎并不决定进程‎的内存使用量‎.进程的内存使‎用量要大于-Xmx定义的‎值,因为Java‎为其他任务分‎配内存,例如每个线程‎的Stack‎等.2.Stack的‎设定每个线程都有‎他自己的St‎a ck.-Xss每个线程的S‎t ack大小‎Stack的‎大小限制着线‎程的数量.如果Stac‎k过大就好导‎致内存溢漏.-Xss参数决‎定Stack‎大小,例如-Xss102‎4K.如果Stac‎k太小,也会导致St‎a ck溢漏.3.硬件环境硬件环境也影‎响GC的效率‎,例如机器的种‎类,内存,swap空间‎,和CPU的数‎量.如果你的程序‎需要频繁创建‎很多tran‎s ient对‎象,会导致JVM‎频繁GC.这种情况你可‎以增加机器的‎内存,来减少Swa‎p空间的使用‎[2].4.4种GC第一种为单线‎程GC,也是默认的G‎C.,该GC适用于‎单CPU机器‎.第二种为Th‎r oughp‎u t GC,是多线程的G‎C,适用于多CP‎U,使用大量线程‎的程序.第二种GC与‎第一种GC相‎似,不同在于GC‎在收集You‎n g区是多线‎程的,但在Old区‎和第一种一样‎,仍然采用单线‎程.-XX:+UsePar‎a llelG‎C参数启动该‎G C.第三种为Co‎n curre‎n t Low Pause GC,类似于第一种‎,适用于多CP‎U,并要求缩短因‎G C造成程序‎停滞的时间.这种GC可以‎在Old区的‎回收同时,运行应用程序‎.-XX:+UseCon‎c MarkS‎w eepGC‎参数启动该G‎C.第四种为In‎c remen‎t al Low Pause GC,适用于要求缩‎短因GC造成‎程序停滞的时‎间.这种GC可以‎在Young‎区回收的同时‎,回收一部分O‎l d区对象.-Xincgc‎参数启动该G‎C.。

JVM启动参数设置

JVM启动参数设置

JVM启动参数设置JVM(Java Virtual Machine)是Java编程语言的核心运行环境,它负责执行Java字节码以及提供内存管理和线程管理等功能。

在JVM启动时,可以通过设置一些启动参数来优化JVM的性能和调整各种资源的使用情况。

本文将介绍一些常用的JVM启动参数设置。

1. -Xms 和 -Xmx:这两个参数用于设置JVM的初始堆大小和最大堆大小。

例如,-Xms256m 设置JVM的初始堆大小为256MB,-Xmx1g 设置JVM的最大堆大小为1GB。

可以根据实际情况调整这两个参数,以避免堆内存溢出或者浪费资源。

2. -Xmn:该参数用于设置年轻代的大小。

年轻代用于存放新创建的对象,所以设置一个合理的年轻代大小可以提高垃圾回收的效率。

例如,-Xmn256m 设置年轻代大小为256MB。

3. -XX:SurvivorRatio:该参数用于设置年轻代中Eden区和Survivor区的大小比例。

Eden区用于存放新创建的对象,Survivor区用于存放经过一次垃圾回收后仍然存活的对象。

例如,-XX:SurvivorRatio=8 表示Eden区和Survivor区的大小比例为8:14. -XX:MaxPermSize:该参数用于设置永久代的最大大小。

永久代用于存放类的元数据信息,如类的结构、方法、字段等。

在Java 8及之后的版本中,永久代被元数据区(Metaspace)取代,所以该参数在Java 8及之后的版本中已经无效。

5. -XX:PermSize:该参数用于设置永久代的初始大小。

在Java 8及之后的版本中,该参数已经无效。

6. -XX:MaxMetaspaceSize:该参数用于设置元数据区的最大大小。

元数据区用于存放类的元数据信息。

例如,-XX:MaxMetaspaceSize=256m 设置元数据区的最大大小为256MB。

在Java 8及之前的版本中,可以使用-XX:MaxPermSize来设置永久代的最大大小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JVM内存大小配置方式
By:sheagle@
1.最简单的方式,tomcat当中进行配置
用记事本打开tomcat安装路径下bin文件夹中的Catalina.bat,在文件当中添加set JAV A_OPTS=-Xms256m-Xmx512m
该方式只适合于使用Catalina Start指令及其类似方式通过执行Startup.bat中的指令方式启动tomcat
2.在Eclipse当中配置tomcat的内存启动大小
Eclipse->Window->Preferences->Server->Runtime Environments->选中Apache Tomcat v5.0->点击Edit按钮->在弹出对话框里点击JRE后面的Installed JREs按钮->在弹出对话框中选中tomcat使用的那个JRE->点击Edit按钮->在弹出对话框中,找到Default VM Arguments,并在输入框中输入:-Xms256M-Xmx512M
该修改方式只适合于使用Eclipse启动tomcat
3.在注册表中修改tomcat大小
如果你的电脑上边安装了tomcat服务,那么你也可以通过以下设置来修改通过
服务启动时的tomcat内存。

打开tomcat安装路径下bin文件夹中的tomcat6w.exe。

选中Java,修改Inital memory pool和Maximum memory pool
该修改方式只适合于使用“服务”方式启动tomcat
总结:
关于tomcat启动时JVM虚拟机内存大小的配置,针对每种情况会有多种不同的配置方式,基本上都是修改配
置文件中参数的大小,无论使用哪种配置方式进行配置,只要能达到效果即可。

相关文档
最新文档