码农知识堂 - 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

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

    堆空间参数设置

    请添加图片描述

  • 相关阅读:
    Java中如何遍历Map中的key呢?
    关系抽取(三)实体关系联合抽取:CasRel
    Android CAN 简记
    Go语言中的指针介绍
    使用composer安装和使用Endroid/QrCode来生成二维码
    MyBatis-Plus中实现自定义功能Mapper
    dm关键字提示报错
    关于seata启动时连接数据库异常,Mysql版本8.0
    时间的api
    Mysql数据库的安全策略
  • 原文地址:https://blog.csdn.net/zhouhe_/article/details/128113243
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号