13 张图解 Java 中的内存模型
2023-06-13 09:18:41 时间
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作者 | Carson_Ho
来源 | juejin.im/post/6844903677279338509
前言
- 了解Java中的对象、变量等存放的内存区域十分重要
- 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢
目录
1. 内存模型 & 分区
Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区
在运行时数据区里,会根据用途进行划分:
- Java虚拟机栈(栈区)
- 本地方法栈
- Java堆(堆区)
- 方法区
- 程序计数器
下面,我将详细介绍每个内存模型分区
2. Java堆
简介
3. Java虚拟机栈
简介
4. 本地方法栈
简介:十分类似Java虚拟机栈,与Java虚拟机区别在于:服务对象,即Java虚拟机栈为执行 Java 方法服务;本地方法栈为执行 Native方法服务
5. 方法区
简介
注:其内部包含一个运行时常量池,具体介绍如下:
6. 程序计数器
简介
7. 额外知识:直接内存
- 定义:NIO类(JDK1.4引入)中基于通道和缓冲区的I/O方式 通过使用Native函数库 直接分配 的堆外内存
- 特点:不受堆大小限制
不属于虚拟机运行时数据区的一部分 & 不在堆中分配
- 应用场景:适用于频繁调用的场景
通过一个 存储在Java堆中的DirectByteBuffer对象 作为这块内存的引用 进行操作,从而避免在 Java 堆和 Native堆之间来回复制数据,提高使用性能
- 抛出的异常:OutOfMemoryError,即与其他内存区域的总和 大于 物理内存限制
8. 总结
本文全面讲解JVM中的内存模型 & 分区,总结如下
往期推荐
离职后与大家在星球聊了很多,你不来看看?
我的星球是否适合你?
点击阅读原文看看我们都聊过啥?
相关文章
- java转换字符串为时间_JAVA字符串转日期或日期转字符串
- java反射菜鸟教程_Java反射
- Java内存模型详解
- java 二维数组 arraycopy_Java对数组的复制[通俗易懂]
- java后端开发需要什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- java山寨qq账号密码验证_Java实战-山寨QQ
- java官方编译器_JAVA 编译器
- ringbuffer java例子_Java RingBuffer.publish方法代碼示例「建议收藏」
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」
- java如何打印菱形_JAVA输出菱形
- java 内存分析工具 生成 dump_java内存检测工具
- idea创建java项目的步骤_Java为什么新建不了项目
- java面对对象(下.1)(java关键字理解:static final main)
- 一台机器下,多个Java版本的粗放与精细管理
- Java对象内存布局和对象头
- 常见 Java 异常解释(恶搞版)详解编程语言
- Java substring()方法:求子字符串(截取字符串)
- 工具Linux上使用Java开发的利器:选择指南(linux选择java)
- 策略Java中Redis实现过期时间策略(redisjava过期)
- 甲骨文称 Google 毁掉了 Java 的市场
- Java与Oracle的连接方式(java连oracle)
- 应用Linux监控下Java应用性能分析(linux监控java)
- Oracle中实现Java程序设计的极限可能性(oracle中的java)
- Java实现Redis队列锁功能(redis队列锁java)
- 实现基于Redis的分布式锁Java实现(redis锁java代码)
- java数据库连接池和数据库连接示例