JVM堆内存及参数配置 -Xss -Xms -Xmx -Xmn

这篇具有很好参考价值的文章主要介绍了JVM堆内存及参数配置 -Xss -Xms -Xmx -Xmn。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一 JVM堆内存划分

二 参数设置


一 JVM堆内存划分

逻辑上:新生代、老年代、永久代

 物理上:新生代、 老年代

JDK1.7之前,有永久代,但已经逐步“去永久代”

JDK1.8之后,无永久代,由元空间替代


java堆从GC的角度,可以细分为:

  • 新生代(Eden区、From Survivor区、To Survivor区)
  • 老年代

JVM堆内存及参数配置 -Xss -Xms -Xmx -Xmn

1、新生代:用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC(新生代GC)进行垃圾回收。

(1)Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。

当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。

(2)From Survivor区:上一次GC的幸存者,作为这一次GC的被扫描者

(3)To Survivor区:保留了一次MinorGC过程中的幸存者

MinorGC(新生代GC)的过程:

首先,把Eden和Servivor From区域中存活的对象复制到Servicor To区域(如果有对象的年龄达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果 ServicorTo 不够位置了就放到老年区);

然后,清空 Eden 和 Servicor From 中的对象;

最后,Servicor To 和 Servicor From 互换,原 ServicorTo 成为下一次 GC 时的 Servicor From 区。

2、老年代:主要存放应用程序中生命周期长的内存对象。

老年代的对象比较稳定,所以MajorGC不会频繁执行。

在执行MajorGC前一般都先进行了一次MinorGC,使得有新生代的对象晋升入老年代,导致空间不够时才触发。

当无法找到足够大的连续空间分配给新创建的较大对象时也会提前触发一次MajorGC进行垃圾回收腾出空间。

3、永久代:指内存的永久保存区域,主要存放Class和Meta(元数据)的信息。

Class在被加载的时候被放入永久区域,它和存放实例的区域不同,GC不会在主程序运行期对永久区域进行处理。所以这也导致永久代区域会随着加载Class的增多而膨胀,最终抛出OOM异常。

4、Java8与元数据

在java8中,永久代已经被移除,被“元数据区”(元空间)所取代。

元空间的本质和永久代类似,元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是在本地内存。因此,默认情况下,元空间大小仅受本地内存限制。

类的元数据放入native memory(本机内存),字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPermSize(最大非堆内存的大小) 控制, 而由系统的实际可用空间来控制。

二 参数设置

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

  • -Xms:初始堆大小,默认为物理内存的1/64
  • -Xmx:堆内存的最大值,默认为物理内存的1/4
  • -Xmn:堆内新生代的大小。通过这个值也可以得到老生代的大小:(-Xmx)-(-Xmn)
  • -Xss:设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,但操作系统对一个进程内的线程数还是有限制的,不能无限生成。

线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大;如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。文章来源地址https://www.toymoban.com/news/detail-451190.html

到了这里,关于JVM堆内存及参数配置 -Xss -Xms -Xmx -Xmn的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM基础知识(内存区域划分,类加载,GC垃圾回收)

    目录 内存区域划分 JVM中的栈 JVM中的堆 程序计数器 方法区(元数据区) 给一段代码,某个变量在哪个区域上? 类加载 类加载时机 双亲委派模型 GC 垃圾回收机制 GC 实际工作过程 1.找到垃圾/判定垃圾 1.可达性分析(Java中的做法) 2.引用计数 2.清理垃圾 1.标记清除 2.复制算法 3.标记整

    2024年02月07日
    浏览(63)
  • vscode设置java -Xmx最大堆内存

    如果在vscode中直接运行java程序,想要改下每次运行的最大堆内存,按照如下修改 当然前提是vscode在应用管理中已经安装了java语言的插件,Debugger for Java,如下图所示 设置完这些后使用vscode中的运行按键Start Debugging或Run Without Debugging即可应用配置

    2024年02月15日
    浏览(31)
  • Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

    根据服务部署和项目架构,从如下几个方面排查: (1)运用服务器:排查内存,cpu,请求数等; (2)文件图片服务器:排查内存,cpu,请求数等; (3)计时器服务器:排查内存,cpu,请求数等; (4)redis服务器:排查内存,cpu,连接数等; (5)db服务器:排查内存,cpu,连接数

    2024年02月07日
    浏览(61)
  • 云原生背景下如何配置 JVM 内存

    前段时间业务研发反馈说是他的应用内存使用率很高,导致频繁的重启,让我排查下是怎么回事; 在这之前我也没怎么在意过这个问题,正好这次排查分析的过程做一个记录。 首先我查看了监控面板里的 Pod 监控: 发现确实是快满了,而此时去查看应用的 JVM 占用情况却只有

    2024年02月04日
    浏览(30)
  • JVM 参数配置规范

    废话不说,直接上干货!!! JVM 规范: 参数 备注/参数释义 交易规范 JVM版本 1.8.0_60以下,无法使用Pfinder 1.8.0_131之前,jvm无法感知docker的真实核数和内存大小,而是使用的宿主机的核数和内存 必须1.8.0_60以上 推荐1.8.0_191以上 JVM GC方法 ParallelGC:1.8默认,高吞吐量,响应时间

    2024年02月16日
    浏览(31)
  • jvm参数配置

    JVM(Java Virtual Machine)参数的配置对于Java应用程序的性能和行为具有重要影响。以下是一些常见的JVM参数及其说明: 堆内存相关参数: -Xms : 设置JVM初始堆内存大小。 -Xmx : 设置JVM最大堆内存大小。 -Xmn : 设置新生代堆内存大小。 -XX:MaxPermSize (JDK 7及之前) 或 -XX:MaxMetaspaceSize

    2024年01月24日
    浏览(29)
  • 【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍

    本文主要针对于综合层面上进行分析JVM优化方案总结和列举调优参数计划。主要包含: 调优之逃逸分析(栈上分配) 调优之线程局部缓存(TLAB) 调优之G1回收器 -XX:+DoEscapeAnalysis 逃逸分析(Escape Analysis) 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定

    2024年01月25日
    浏览(59)
  • 触发JVM fatal error并配置相关JVM参数

    工作中,Java服务因为 fatal error (致命错误,笔者称其为 jvm crash ),在服务运行日志中出现了致命错误的概要信息: 服务运行在k8s中,由于未提前设置fatal error日志的路径(挂载到宿主机目录),容器重启后该日志会丢失,无法深入排查原因 因此,需要查询jvm的配置,将f

    2024年02月10日
    浏览(32)
  • elasticsearch目录及配置参数说明

    存放ES启动、关闭等脚本文件 存放执行文件,例如启动脚本、密钥工具等 ES的配置文件所在的目录,其中有三个主要的配置文件 elasticsearch.yml是用于ES的最主要的配置文件 jvm.options用于配置ES JVM设置 log4j2.properties用于配置ES 日志记录的属性 ES自带的JDK目录 默认的索引数据存储

    2024年02月16日
    浏览(48)
  • JVM——配置常用参数,GC调优策略

    Java内存区域常见配置参数概览 堆参数; 回收器参数; 项目中常用配置; 常用组合; Java内存区域常见配置参数概览 堆参数 回收器参数 如上表所示,目前 主要有串行、并行和并发三种 ,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种。并行

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包