【JVM】jvm启动参数

-server -Xmx2048m -Xms1500m -Xmn1024m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70

m: 堆 s:栈stack

-Xmx: 表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。但是开发过程中,通常会将 -Xms 与 -Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。

-Xms: 表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。有可能真的按照这样的一个规则分配时,设计出的软件还没有能够运行得起来就挂了。

-Xmn: 设置年轻代大小。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)

-XX:MaxPermSize:表示对非堆区分配的内存的最大上限

-XX:+DisableExplicitGC: 这个参数作用是禁止代码中显示调用GC

-XX:+UseConcMarkSweepGC:启用cms收集器,CMS收集器(并发标记清除)也被称为短暂停顿并发收集器。它是对年老代进行垃圾收集的。CMS收集器通过多线程并发进行垃圾回收,尽量减少垃圾收集造成的停顿。CMS收集器对年轻代进行垃圾回收使用的算法和Parallel收集器一样。这个垃圾收集器适用于不能忍受长时间停顿要求快速响应的应用。可使用 -XX:ParallelCMSThreads=n JVM选项来限制CMS收集器的线程数量。

-XX:+CMSParallelRemarkEnabled:为了减少第二次暂停的时间,开启并行remark: -XX:+CMSParallelRemarkEnabled。如果remark还是过长的话可以开启

-XX:+CMSScavengeBeforeRemark选项,强制remark之前开始一次minor gc,减少remark的暂停时间,但是在remark之后也将立即开始又一次minor gc。

-XX:+UseCMSCompactAtFullCollection:CMS是不会整理堆碎片的,因此为了防止堆碎片引起full gc,通过会开启CMS阶段进行合并碎片选项:-XX:+UseCMSCompactAtFullCollection,开启这个选项一定程度上会影响性能,阿宝的blog里说也许可以通过配置适当的CMSFullGCsBeforeCompaction来调整性能,未实践

-XX:LargePageSizeInBytes=128m:内存页的大小不可设置过大, 会影响Perm的大小

-XX:+UseFastAccessorMethods:原始类型的快速优化

-XX:+UseCMSInitiatingOccupancyOnly:我们用-XX+UseCMSInitiatingOccupancyOnly标志来命令JVM不基于运行时收集的数据来启动CMS垃圾收集周期。而是,当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集,而不仅仅是第一次。然而,请记住大多数情况下,JVM比我们自己能作出更好的垃圾收集决策。因此,只有当我们充足的理由(比如测试)并且对应用程序产生的对象的生命周期有深刻的认知时,才应该使用该标志。

-XX:CMSInitiatingOccupancyFraction:当堆满之后,并行收集器便开始进行垃圾收集,例如,当没有足够的空间来容纳新分配或提升的对象。对于CMS收集器,长时间等待是不可取的,因为在并发垃圾收集期间应用持续在运行(并且分配对象)。因此,为了在应用程序使用完内存之前完成垃圾收集周期,CMS收集器要比并行收集器更先启动。

因为不同的应用会有不同对象分配模式,JVM会收集实际的对象分配(和释放)的运行时数据,并且分析这些数据,来决定什么时候启动一次CMS垃圾收集周期。为了引导这一过程, JVM会在一开始执行CMS周期前作一些线索查找。该线索由 -XX:CMSInitiatingOccupancyFraction=<value>来设置,该值代表老年代堆空间的使用率。比如,value=75意味着第一次CMS垃圾收集会在老年代被占用75%时被触发。通常CMSInitiatingOccupancyFraction的默认值为68(之前很长时间的经历来决定的)。

-Xss: 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内 存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成

原文地址:https://www.cnblogs.com/lodor/p/8595551.html

时间: 2024-08-01 09:22:07

【JVM】jvm启动参数的相关文章

JVM常用启动参数

jvm内存管理配置通用配置 -Xms4096m //最小堆内存-Xmx4096m //最大堆内存-Xmn2048m //年轻代大小-XX:SurvivorRatio=8 //设置eden区和survivor区的内存大小比例,例如8就代表eden和两个survivor区的比例是8:1:1-XX:TargetSurvivorRatio=90 //?-XX:MaxTenuringThreshold=129 //在新生代对象存活次数(经过Minor GC的次数)超过n后,就会晋升到老年代 -XX:Per

(入门贴)JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配

如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JDK提供的工具的统计结果,进行对比,就比较容易理解这些内存分配的理论知识.运行环境是win7 32位操作系统,JDK1.7.0_60版本. 测试代码和JVM启动参数如下: public class Test { public static void main(String[] args) { int

JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配

如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JDK提供的工具的统计结果,进行对比,就比较容易理解这些内存分配的理论知识.运行环境是win7 32位操作系统,JDK1.7.0_60版本. 测试代码和JVM启动参数如下: public class Test { public static void main(String[] args) { int

Eclipse jvm启动参数在哪设置

学习并转载自https://jingyan.baidu.com/article/624e7459653ca534e8ba5a26.html Java是一门非常受欢迎的编程语言,Java的开发人员多数使用Eclipse作为自己的IDE, 在代码调试的过程中有时会遇到内存不足的错误,有没有办法手动指定JVM的启动 参数呢?所以今天笔者和大家分享下"jvm启动参数在哪设置",希望能给大家带来一些帮助. ①打开Eclipse ②创建一个类,编写一段演示用的代码,在代码编辑区右键单击,依次选择[

System.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放

我之前的一篇博客:java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)  介绍了java堆外内存的使用,以及堆外内存的释放.那篇博客遗留了一个问题:DirectByteBuffer究竟是如何释放堆外内存的?本文主要是解决下那篇博客的遗留问题. 首先我们修改下JVM的启动参数,重新运行之前博客中的代码.JVM启动参数和测试代码如下: -verbose:gc -XX:+PrintGCDetails -XX:+DisableExplicitGC -XX:MaxDirect

JVM调优-推荐启动参数

对JVM的设定将会很大程序上影响程序的运行,在不理想的情况下,即使服务器资源还比较充足,也容易出现运行缓慢或OutOfMemory的状况. 对JVM的调优首先要了解JVM的执行状况,Java提供了一些工具帮助我们了解JVM的情况.其中jmap可以看到启动程序的参数设定后的总体状况. 使用jmap -heap 可以总体上了解目前JVM的设定和内存使用情况.如: $ jmap -heap 9112 Attaching to process ID 15241, please wait... Debug

NetBeansRCP-添加/修改NetBeans的JVM启动参数

NetBeans运行的速度实在是不敢恭维.还好机器配置还可以,修改其JVM启动参数命令行,以期运行的更加顺畅. 那么如何修改NetBeans IDE的JVM参数呢? 1.到NetBeans IDE的安装目录的etc子目录,例如我的是"D:\Netbeans-7.2\etc". 2.在该目录下有个叫netbeans.conf的文件,呵呵,这就是我们要找的文件啦. 3.在编辑器打开该文件,netbeans_default_options="--"就是我们要添加/修改的地

JVM 启动参数及原理 转

Java虚拟机(JVM)是Java应用的运行环境,从一般意义上来讲,JVM是通过规范来定义的一个虚拟的计算机,被设计用来解释执行从Java源码编译而来的字节码.更通俗地说,JVM是指对这个规范的具体实现.这种实现基于严格的指令集和全面的内存模型.另外,JVM也通常被形容为对软件运行时环境的实现.通常JVM实现主要指的是HotSpot. JVM规范保证任何的实现都能够以同样的方式解释执行字节码.其实现可以多样化,包括进程.独立的Java操作系统或者直接执行字节码的处理器芯片.我们了解最多的JVM是

JVM的默认参数

如果在META-INF/MANIFEST.MF文件里面设置了Main-Class属性,那么你就可以很方便的通过java -classpath myapp.jar Main命令甚至更简洁的java -jar myapp.jar命令,来启动java虚拟机.这些命令会使用默认的设置来启动JVM. 要想看到JVM执行时使用在使用哪些参数以及其各参数默认值,可以使用这个命令: java -XX:+PrintFlagsFinal -version 1 2 3 4 5 6 7 8 9 10 11 12 13

转: jvm调优参数总结

JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenured generation和permanet generation.绝大部分的objec被分配在young gener