JVM 彻底搞懂JVM内存区域及直接内存
2023-02-18 16:38:04 时间
B站搜索“乐哥聊编程“有本篇文章配套视频 https://www.bilibili.com/video/BV1rg411v7rw
面试题:直接内存会导致OOM么?
程序计数器
代表当前线程所执行的字节码所在的行号,配合字节码解释器获取下一条需要执行的字节码指令。代码中的分支、循环、跳转、异常处理、线程恢复都要依靠它来实现。
程序计数器是线程私有的,线程消失它就消失,每个线程维护自己的程序计数器,互不影响。
如果当前线程正在执行本地方法,此时程序计数器为空值。
虚拟机栈
虚拟机栈描述的是java方法执行的线程内存模型,当方法执行的时候,Java虚拟机会创建一个栈帧用于存储局部变量表、操作数栈、动态链接和方法出口等信息,在每个方法种调用其他方法都是进出栈的操作,当方法执行完毕,栈帧被移除。
本地方法栈
本地方法栈和虚拟机方法栈作用类似,不过它是为执行native方法服务
堆
堆是被线程共享的一个内存区域,大部分对象都在堆上分配,少部分允许在栈上分配(通过逃逸分析)。堆中有新生代和老年代之分,目的是为了垃圾回收的更高效和更少停顿。
方法区
方法区也是一块内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。也包括运行时常量池。
jdk8以前主要通过永久代实现方法区 jdk8开始 通过元空间实现方法区 通过本地内存实现
直接内存
直接内存和堆内内存相对应,堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是java虚拟机)。
传统BIO 访问
直接内存访问
相关文章
- vuex简单理解
- 开发中实用CSS干货(持续不稳定更新)
- Polardb 核心存储 polarfs 是怎么进行数据存储的之核心构造(4)--译
- ApkScan-PKID 查壳工具下载使用以及相关技术介绍
- JDAX-GUI 反编译工具下载使用以及相关技术介绍
- Infinity插件 让Chrome浏览器实现添加10+N个快捷方式(不限制)
- 程序员从幼稚到从成熟的过程是什么?
- 重构—时时勤拂拭,勿使惹尘埃
- Sunwing.ca requests下单 请求参数介绍
- 【数据结构】之二叉树
- 使用主题预加载背景
- Fiddler/Charles - 夜神模拟器证书安装App抓包
- RabbitMQ Windows 安装、配置、使用 - 小白教程
- CrashHandler--程序异常退出处理
- App逆向 Frida - 夜神模拟器安装配置 基本使用
- 直播动画框架探索
- 软件测试概念介绍 -- 小白入门必看
- SVGA源码解析
- 微信开发者工具 / 反编译工具CrackMinApp 下载安装
- 软件测试方法 -- 等价类边界值