码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JVM运行时数据 堆


    JVM运行时数据 堆

    • 快速调试
    • 堆参数设置
    • 堆分类
    • 运行流程
    • Minor GC、Major GC与Full GC
    • 分代思想
    • 内存分配策略
    • TLAB
    • 堆空间参数设置

    快速调试

    • 一个JVM实例只存在一个堆内存,对也是Java内存管理的核心区域
    • Java 堆区在Jvm启动的时候创建,其空间大小也就确定了。是JVM管理最大的一块内存空间(可调节)
    • 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间,但在逻辑上他应该被视为连续的
    • 所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)
    public class Test {
    
        public static void main(String[] args) {
            System.out.println("start ...");
            try {
                TimeUnit.SECONDS.sleep(1000000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("...end");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    调个参数
    -Xms10m -Xmx10m
    启动

    然后启动 jvisualvm.exe请添加图片描述

    • 《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当运行时分配在堆上。(The heap is the run-time data area from which memory for all class instance and arrays is allocated)
      “几乎”所有的对象实例都在这里分配内存–从实际使用角度看
    • 数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置
    • 在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除
    • 堆,是GC(Garbage Collection,垃圾收集器)执行垃圾回收的重点区域

    请添加图片描述

    jdk7之前与jdk8的区别
    请添加图片描述
    打印GC垃圾回收:-XX:+PrintGCDetails
    请添加图片描述

    堆参数设置

    请添加图片描述

    查看设置的大小:
    jstat -gc pid
    或者设置参数 -XX:+PrintGCDetails

    堆分类

    请添加图片描述
    请添加图片描述
    请添加图片描述

    指定新生代和老年代占比:-XX:NewRatio=value
    指定新生代中s0,s1,Eden占比:默认是8:1:1
    指定新生代最大内存 :-Xmn

    运行流程

    请添加图片描述

    Eden园区满了,触发全局YGC(Eden,S0,S1),S0,S1满了不会触发GC

    请添加图片描述

    Minor GC、Major GC与Full GC

    请添加图片描述
    请添加图片描述
    请添加图片描述

    请添加图片描述

    分代思想

    请添加图片描述
    请添加图片描述

    内存分配策略

    请添加图片描述
    请添加图片描述

    TLAB

    请添加图片描述
    请添加图片描述
    请添加图片描述

    堆空间参数设置

    请添加图片描述

  • 相关阅读:
    如何在数据库只保存oss上的文件名, 当查询数据时根据字段的文件名, 获取oss的公网访问地址,并对字段内容重写
    Linux 驱动PCIE编程接口
    指数族分布(2):矩母函数、累积量生成函数
    基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(三)离线分析
    springboot毕设项目个人博客的设计与实现i03nz(java+VUE+Mybatis+Maven+Mysql)
    JavaScript 笔记| 青训营笔记
    信而泰 X-Snapper测试系统,助力家庭路由器IPv6支持度测试
    LLM文章阅读:Baichuan 2 干货
    掌动智能国产化测试工具的重要性与优势
    我服了!SpringBoot升级后这服务我一个星期都没跑起来!(下)
  • 原文地址:https://blog.csdn.net/zhouhe_/article/details/128113243
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号