13 张图解 Java 中的内存模型

公众号程序猿DD

共 2048字,需浏览 5分钟

 ·

2020-09-07 06:52


点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

作者 | Carson_Ho

来源 | juejin.im/post/6844903677279338509

前言
  • 了解Java中的对象、变量等存放的内存区域十分重要
  • 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢

目录


1. 内存模型 & 分区


Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区

在运行时数据区里,会根据用途进行划分:

  1. Java虚拟机栈(栈区)
  2. 本地方法栈
  3. Java堆(堆区)
  4. 方法区
  5. 程序计数器


下面,我将详细介绍每个内存模型分区


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中的内存模型 & 分区,总结如下



往期推荐

Upwork 发布最赚钱的编程语言 Top 15

一次微服务与IoT的深度探秘与实战

又有一个霸榜的 Linux 神器

来深入了解一下 Eureka 的工作机制及相关原理

基于 Spring Boot 的车牌识别系统(附项目地址)

分布式事务、分布式锁、分布式session


离职后与大家在星球聊了很多,你不来看看?

我的星球是否适合你?

点击阅读原文看看我们都聊过啥?

浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报