其他分享
首页 > 其他分享> > JVM 运行时数据区 堆和方法区

JVM 运行时数据区 堆和方法区

作者:互联网

2、运行时数据区

哔哩哔哩 尚硅谷视频 宋红康老师

2.5、堆

堆的核心概述

内存细分

设置堆的大小:

-Xms600m -Xmx600m			#表示设置堆的起始大小和最终大小为600MB

测试:

代码

package com.mhy.test1;

/**
 * -Xms600m -Xmx600m
 */
public class HeapTest {
    public static void main(String[] args) {
        System.out.println("执行了...");
        try {
            Thread.sleep(100000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

设置大小:-Xms600m -Xmx600m

运行后:在Jdk自带的 jvisualvm 中可以查看相应的信息 位置:F:\Program Files\JavaIDEA\jdk\bin

图解堆空间中数据的生成

注意:可以通过 -XX:MaxTenuringThreshold= 进行设置到老年区的阈值

总结:


堆空间对象生成的流程图

什么是TLAB(Thread Local Allocation Buffer)?

TLAB对象分配过程图

堆空间参数设置

参数 作用
-XX:+PrintFlagsInitital 查看所有的参数的默认值
-XX:+PrintFlagsFinal 查看所有参数的最终值(可能会存在修改,不再是初始值)
-Xms 初始堆空间内存(默认为物理内存的1/64)
-Xmx 最大堆空间内存(默认为物理内存的1/4)
-Xmn 设置新生代大小(初始值及最大值)
-XX:NewRatio 配置新生代与老年代在堆内存的占比
-XX:Survivorratio 设置新生代的Eden和S0/S1的比例
-XX:MaxTenringThreshold 设置新生代垃圾的最大年龄
-XX:+PrintGCDetails 输出详细的GC处理日志
-XX:HandlePromotionFailure 是否设置空间分配担保

2.6、方法区

方法区、堆、栈的关系图

方法区的内部结构

方法区主要存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存

方法区的演进细节

版本号 细节
jdk1.6及以前 有永久代,静态变量存放到永久代上
jdk1.7 有永久代,但已经逐步”去永久代“,字符串常量池、静态变量移除,保存到堆中
jdk1.8及以后 无永久代,类型信息、字段、方法、常量保存在本地内存的元空间,但字符串常量池、静态变量任然在堆中

方法区的演进细节图

标签:Java,Space,永久,XX,内存,JVM,方法,运行
来源: https://www.cnblogs.com/shuisanya/p/16693665.html