jvm-第二节jvm的内存区域
### 深入理解jvm的内存区域
分析一段代码,看他的各个部分存储的位置
- 具体分配步骤如下
- 首先jvm申请一篇内存区间
- jvm活得内存空间后按照配置分配堆,栈,方法区空间
- 类加载,把class文件放入方法去区中
- 执行对象创建,放入堆中,对象引用放入栈中
堆:下面的图片主要是展示对象的在实际内存中的存储位置
栈:图片主要展示栈的共享区域以及实际内存中栈里面的属性对应实际内存的位置
常量池
- 静态常量池:字面量和符号引用
- 运行时常量池:每一个类或者接口常量池运行时的表现
- 字符串常量池:由于字符串是一个使用频率极高的常量,所以jvm为了提高效率单独开辟一片空间存储字符串
String
- 首先看他的结构
- String的不可变性事final决定的,这样做的好处不可变意味着安全,且hash不会频繁变更(因为jvm重启过程中会重新计算)
- String的创建以及内存分布如下
- String str = "abc";
- String str = new String("abc");
- 对象的形式引用字符串
- String str2= "ab"+ "cd"+ "ef";这种一般编译器优化,直接新创建一个字符串了
- 看上面这个图片,intern方法是判断字符串常量池内是否有这个字符串,因为字符串都放一起了就可以检测
- String str = "abc";
内存溢出
- 堆溢出:申请的空间超过最大堆内存空间
- 栈溢出:无限递归
- 方法区溢出:里面的class文件占用内存超过配置;运行时常量池溢出
- 本机内存溢出:这个分为内存泄漏,和jvm参数maxdirectmemorySize设置本机可用直接内存大小导致溢出的问题
不恋尘世浮华,不写红尘纷扰
标签:
2023重温技术基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-06-14 多线程第二节_jmm与volitile
2022-06-14 leetcode-214最大路径和