当前位置: 首页 > 图灵资讯 > 技术篇> jvm-第二节jvm的内存区域

jvm-第二节jvm的内存区域

来源:图灵教育
时间:2023-06-17 13:48:26

  对jvm的内存区域进行深入了解,分析一段代码,查看其存储位置的各个部分具体分配步骤如下 首先,jvm申请内存间间间间间 jvm生活内存空间后,堆叠按配置分配,堆栈,方法区空间 类加载,将class文件放入方法到区 创建执行对象,放入堆中,引用对象放入堆中 堆:以下图片主要显示实际内存中对象的存储位置

jvm-第二节jvm的内存区域 _字符串

jvm-第二节jvm的内存区域 _字符串_02

堆栈:图片主要显示堆栈的共享区域和堆栈在实际内存中的属性对应于实际内存的位置

jvm-第二节jvm的内存区域 _常量池_03

jvm-第二节jvm的内存区域 _常量池_04

常量池 静态常量池:引用字面量和符号 常量池运行:每个类别或接口常量池运行时的性能 字符串常量池:由于字符串是一种常用频率很高的常量,jvm为了提高效率,开辟了单独存储字符串的空间 String 先看他的结构 final决定了String的不可变性。这样做的好处是不可变的,这意味着安全,hash不会频繁更改(因为jvm重启时会重新计算) String的创建和内存分布如下 String str = "abc"; String str = new String("abc"); 引用字符串对象的形式 String str2= "ab"+ "cd"+ "ef";这种一般编译器优化直接创建了一个新字符串 看上图,intern的方法是判断字符串常量池中是否有字符串,因为字符串可以放在一起检测 内存溢出 堆积溢出:申请空间超过最大堆内存空间 栈溢出:无限递归 方法区溢出:内部class文件占用内存超过配置;常量池溢出 本机内存溢出:这分为内存泄漏和jvm参数maxdirectmememorysize设置本机内存溢出问题