• 11.0 堆参数调优入门之堆参数调整


    在这里插入图片描述
    java8和java7只有最后的元空间与永久代的区别,因没有jdk8图片,那就以java7为例。
    在这里插入图片描述

    -Xms 代表初始值 s 可以理解为start 初始

    -Xmx 代表最大值 x 可以理解为max 最大

    -Xmn 代表 新生代 n 可以理解为new 新生

    在这里插入图片描述
    在这里插入图片描述
    这里是程序代码是计算jvm中堆的初始内存和最大内存。初始内存默认为物理内存的 1/64,最大内存默认为物理内存的1/4。
    但是在实际生产项目中,初始内存与最大内存是一样大的,原因:避免机器与jvm争抢内存,理论值与峰值忽高忽低。

    public static void main(String[] args) {
            long xMx = Runtime.getRuntime().maxMemory();
            long xMs = Runtime.getRuntime().totalMemory();
            System.out.println("Xmx 最大堆内存" + xMx/ (double)1024 /1024 + "MB");
            System.out.println("Xmx 开始内存" + xMs/ (double)1024 /1024 + "MB");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在idea上配置JVM的初始堆内存和最大堆内存

    在这里插入图片描述
    在红框中填写上配置参数,随着idea版本的不同,有的将这个地方隐藏起来了,需要我们调出来,调出来的步骤同样在下方。
    在这里插入图片描述
    在这里插入图片描述
    将下图打上对勾就可以出来啦,如果没有配置参数,该框可能会再次隐藏起来。
    在这里插入图片描述

    配置参数如下

    -Xms1024m -Xmx1024 -XX:+PrintGCDetails
    
    • 1

    在这里插入图片描述

    运行代码

    在这里插入图片描述
    将 PSYoungGen 与 ParOldGen 内存相加正好等于堆内存981.5,这说明堆内存物理上是新生代+老年代构成的。
    逻辑上是新生代 + 老年代 + 元空间构成的。

    将堆内存配置为10M,如下图
    在这里插入图片描述
    运行代码

    public static void main(String[] args) {
            String str = "abcd";
            while(true) {
                str += str + new Random().nextInt(8888888) + new Random().nextInt(99999999);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这时会报 OutOfMemoryError,这就是堆内存溢出错误,从下图也可以看到GC垃圾回收的整个过程,先是轻GC,然后在重GC,当老年代已经满了,无法在进行GC的时候,就会报出OutOfMemoryError。
    在这里插入图片描述

  • 相关阅读:
    ubuntu 22.04 M4Singer 安装部署
    点击后给导航添加样式
    BUUCTF Misc 隐藏的钥匙 & 另外一个世界 & FLAG & 神秘龙卷风
    vue小技能:通过插槽`<slot>`分发内容,使用 插槽 prop向父级组件传递数据。
    .NET Core MongoDB数据仓储和工作单元模式实操
    Typescript的基本使用
    centos7安装php
    PyTorch基础知识学习
    ZooKeeper 概述
    多模态大模型总结
  • 原文地址:https://blog.csdn.net/PhilsphyPrgram/article/details/125423918