目录

XmnXmsXmxXss有什么区别

堆设置

收集器设置

垃圾回收统计信息

并行收集器设置

java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()方法


XmnXmsXmxXss有什么区别

Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。

  • -Xms 堆内存的初始大小,默认为物理内存的1/64。一般来讲,大点,程序会启动的快一点。
  • -Xmx 堆内存的最大大小,默认为物理内存的1/4。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。
  • -Xmn 堆内新生代的大小,通过这个值也可以得到老生代的大小:-Xmx减去-Xmn。
  • -Xss 设置每个线程可使用的内存大小,即栈的大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。                                                           在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。

以上参数的设置都是默认以Byte为单位的,也可以在数字后面添加[k/K]或者[m/M]来表示KB或者MB

除了这些配置,JVM还有非常多的配置,常用的如下:

堆设置

-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:新生代大小
-XX:NewRatio:设置新生代和老年代的比值。如:为3,表示年轻代与老年代比值为1:3
-XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5  
-XX:MaxTenuringThreshold:设置转入老年代的存活次数。如果是0,则直接跳过新生代进入老年代
-XX:PermSize、-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)
-XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)

收集器设置

-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数。并行收集线程数。

java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()方法

很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对 freeMemory()这个方法的意义应该有一些误解,他们认为这个方法返回的是操作系统的剩余可用内存,其实根本就不是这样的。这三个方法反映的都是 java这个进程的内存情况,跟操作系统的内存根本没有关系。下面结合totalMemory(), maxMemory()一起来解释。

  • maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是64*1024*1024字节,这是java虚拟机默认情况下能从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如java -cp you_classpath -Xmx512m your_class,那么最大内存就是512*1024*1024字节。
  • totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的所有内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,直到挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖 -Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。
  • freeMemory()是什么呢,刚才讲到如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是 freeMemory(),所以freeMemory()的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()可能会有些大。

参考:https://blog.csdn.net/yrwan95/article/details/82826519?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-3.control

JVM调优总结 -Xms -Xmx -Xmn -Xss_RickyIT的专栏-CSDN博客

JVM实战(二一): -Xss -Xms -Xmx -Xmn 参数设置相关推荐

  1. JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置简介说明

    转自: JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置简介说明 下文笔者讲述JVM参数中常见的"-Xss -Xms -Xmx -Xmn"功能简介说明,如下所示: - ...

  2. JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置

    XmnXmsXmxXss有什么区别 Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. -Xms 堆内存的初始大小,默认为物理内存 ...

  3. java内存-xms 单位_java堆内存JVM属性调优总结(-Xms -Xmx -Xmn -Xss)

    Xms 是指设定程序启动时占用内存大小.一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢. Xmx 是指设定程序运行期间最大可占用的内存大小.如果程序运行需要占用更多的内存,超出了这 ...

  4. JVM GC调优总结 -Xms -Xmx -Xmn -Xss

    堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操 ...

  5. java xms xmx xmn_JAVA 虚拟机JVM参数调优(1)-Xms -Xmx -Xmn

    随着服务器内存和CPU核数据越来越多,如何充分利用服务器硬件资源?如下图所示JAVA官方公布图一,说明单个CPU服务器垃圾收集造成吞吐量降低1%,30核CPU效率下降20%,查看下图中红色线条. 本文 ...

  6. JVM内存调优 -Xms -Xmx -Xmn -Xss 参数设置

    案例 -Xms128M: 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx512m: 是指设定程序运行期间最大堆的大小.如果程序运行需要占用更多的内存,超出了这个设置值 ...

  7. JVM参数调优总结 -Xms -Xmx -Xmn -Xss

    "-Xmx1024m -Xms1024m -Xmn512m -Xss256k"--Java运行参数(转) JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小,  ...

  8. java 参数 xms,java jvm 参数 Xms Xmx Xmn Xss 调优总结

    java jvm 参数 Xms Xmx Xmn Xss 调优总结 常见配置举例 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内 ...

  9. xms java_java xms xmx xmn xss解释

    java xms xmx xmn xss解释 Xmx是java的一个选项,用来设置你的应用程序能够使用的最大内存数(是应用程序,不是整个jvm),如果你的程序要花很大内存的话,那就需要修改缺省的设置, ...

  10. R语言epiDisplay包的kap函数计算配对列联表的计算一致性的比例以及Kappa统计量的值(总一致性、期望一致性)、使用xtabs函数生成二维列联表、使用wttable参数设置权重表参数为w2

    R语言使用epiDisplay包的kap函数计算配对列联表的计算一致性的比例以及Kappa统计量的值(总一致性.期望一致性).使用xtabs函数生成二维列联表.使用wttable参数设置权重表参数为w ...

最新文章

  1. 第五十一条:当心字符串的连接性能
  2. 4.2.2 OS之磁盘调度算法(FCFS、SSTF、SCAN、LOOK、S-SCAN、C-LOOK)
  3. java jsr_Java EE 7中包含哪些JSR?
  4. vs2008配置winddk
  5. 【测试】用例设计思路-六方面
  6. 继腾讯、阿里、字节、快手等后,京东、有赞又爆大裁员,个别部门比例或达40%!...
  7. 如何查看redis占用内存大小
  8. 中国速度袋行业市场供需与战略研究报告
  9. Linux软件包管理的知识点,Debian软件包管理APT和存储库的基础知识[Linux 101] | MOS86...
  10. HDU 1024 (不重叠m段最大和) Max Sum Plus Plus
  11. 教孩子学编程python pdf_教孩子学编程 PYTHON语言版 PDF_IT教程网
  12. 前端工程师应该懂的ps基本操作
  13. Woff2字体404错误
  14. 一个普通前端女孩的一年|2021总结
  15. GBase 8s 入门
  16. 萌娃人脸生成器 实践踩坑笔记
  17. CAD梦想画图中的“线宽设置”
  18. typhon (lazarus) 下文件拖放操作
  19. 利用循环输出如下图形
  20. dialog使用(dialog使用方法)

热门文章

  1. 计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误
  2. 通过故障恢复控制台修复xp系统引导文件丢失的方法
  3. PS通道高反差保留计算人物磨皮技巧
  4. 凸优化(一)绪论与凸集
  5. python大数据是什么_python和大数据有什么关系?
  6. YDOOK:STM32: CH340G 芯片介绍 USB 转串口芯片
  7. 真正免费的天气API,无需注册申请key
  8. Python技术pip的使用命令总结
  9. Linux创建用户密码修改
  10. 部分设计模式案例代码