当前位置: 首页 > article >正文

JVM 调优篇2 jvm的内存结构以及堆栈参数设置与查看

一 jvm的内存模型

2.1 jvm内存模型概览

二  实操案例

2.1 设置和查看栈大小

1.代码

/**
 * 演示栈中的异常:StackOverflowError
 *
 * @author shkstart
 * @create 2020 下午 9:08
 *
 * 设置栈的大小: -Xss   (-XX:ThreadStackSize)
 *
 * -XX:+PrintFlagsFinal
 */
public class StackErrorTest {
    private static int count = 1;

    public static void main(String[] args) {
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        try {
            count++;
            main(args);
        }catch (Throwable e){

            System.out.println("递归的次数为:" + count);
        }



    }

}

2.设置

3.查看: jinfo -flag    ThreadStackSize pid

2.2 查堆的大小

1.代码

package com.ljf.jvm.optimise.staick;

/**
 * 1. 设置堆空间大小的参数
 * -Xms 用来设置堆空间(年轻代+老年代)的初始内存大小
 *      -X 是jvm的运行参数
 *      ms 是memory start
 * -Xmx 用来设置堆空间(年轻代+老年代)的最大内存大小
 *
 * 2. 默认堆空间的大小
 *    初始内存大小:物理电脑内存大小 / 64
 *             最大内存大小:物理电脑内存大小 / 4
 * 3. 手动设置:-Xms600m -Xmx600m
 *     开发中建议将初始堆内存和最大的堆内存设置成相同的值。
 *
 * 4. -XX:+PrintFlagsFinal
 *
 * @create 2021  20:15
 */
public class HeapSpaceInitial {
    public static void main(String[] args) {

        //返回Java虚拟机中的堆内存总量
        long initialMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024;
        //返回Java虚拟机试图使用的最大堆内存量
        long maxMemory = Runtime.getRuntime().maxMemory() / 1024 / 1024;

        System.out.println("-Xms : " + initialMemory + "M");
        System.out.println("-Xmx : " + maxMemory + "M");

//        System.out.println("系统内存大小为:" + initialMemory * 64.0 / 1024 + "G");
//        System.out.println("系统内存大小为:" + maxMemory * 4.0 / 1024 + "G");

        try {
            Thread.sleep(1000000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2.查看

2.2 设置堆大小和日志输出

1.代码

/** 测试:大对象直接进入老年代
 * -Xms60m -Xmx60m -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+PrintGCDetails
 * @create 2021  21:48
 */
public class YoungOldAreaTest {
    public static void main(String[] args) {
        byte[] buffer = new byte[1024 * 1024 * 20];//20m

    }
}

2.进行设置:    -Xms60m -Xmx60m -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+PrintGCDetails

3.输出日志

2.3 设置元空间的大小与日志输出

1.代码

package com.atguigu.methodarea;

/**
 * 结论:
 * 静态引用对应的对象实体始终都存在堆空间
 *
 * jdk7:
 * -Xms300m -Xmx300m -XX:PermSize=300m -XX:MaxPermSize=300m -XX:+PrintGCDetails
 * jdk 8:
 * -Xms300m -Xmx300m -XX:MetaspaceSize=300m -XX:MaxMetaspaceSize=300m -XX:+PrintGCDetails
 * @author shkstart  shkstart@126.com
 * @create 2020  21:20
        */
public class StaticFieldTest {
    private static byte[] arr = new byte[1024 * 1024 * 100];//100MB -> 200+MB

    public static void main(String[] args) {
        System.out.println(StaticFieldTest.arr);

//        try {
//            Thread.sleep(1000000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
    }
}

2.设置:

 -Xms300m -Xmx300m -XX:MetaspaceSize=300m -XX:MaxMetaspaceSize=300m -XX:+PrintGCDetails

3.查看


http://www.kler.cn/a/297103.html

相关文章:

  • Docker中部署nacos 开启鉴权springboot连接配置
  • 【H2O2|全栈】关于HTML(4)HTML基础(三)
  • 心理健康e时代:Spring Boot心理咨询评估工具
  • LeetCode之哈希表
  • css三点闪烁(可用于加载样式、标题等)
  • py文件import 不到自己创建的文件
  • Vue3:<Teleport>传送门组件的使用和注意事项
  • 【持续更新】Adobe Audition 2024 (v24.4.1.003)最新免费修改版
  • JavaScript函数了解
  • 哈希表 and 算法
  • reactwebpack老项目开发环境增加vite
  • JSON格式
  • 关于HashMap的put方法
  • Matlab/Simulink中PMSM模型的反电动势系数和转矩系数
  • 掌握数据库与SQL
  • Appium使用指南与自动化测试案例详解
  • C++——关联式容器(2):AVL树(平衡二叉树)
  • 猜数游戏-Rust 入门经典案例
  • 滚雪球学Java(89):Java GUI入门与进阶:AWT核心概念深度解析,有两下子!
  • 【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算