快速串讲——JVM内存的区域划分
目的
- 快速定位JVM内存泄漏或者溢出等问题。
- 面试基础题,加分项。

文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
程序计数器(Program Counter Register)
- 记录当前线程所执行的字节码的行号。
- 依赖其实现分支、循环、跳转、异常处理、线程恢复。
- Natvie 方法时,其的值就为空。
- Java 虚拟机规范中唯一没有规定内存溢出的区域。
- “线程私有”的内存区域。
文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
虚拟机栈(Virtual Machine Stacks)
- 其生命周期与线程相同。
- 存储局部变量表、操作数栈、动态链接、方法出口等信息。
- 方法被执行的时候创建一个栈帧并入栈。
- 方法执行完成的时候对应栈帧出栈。
- 栈的深度过大时,抛出 StackOverflowError 。
- 线程数过多时,抛出 OutOfMemoryError 。
- “线程私有”的内存区域。
文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
本地方法栈(Native Method Stacks)
- 为虚拟机使用到的 Native 方法服务。
- 栈的深度过大时,抛出 StackOverflowError 。
- 线程数过多时,抛出 OutOfMemoryError 。
- “线程私有”的内存区域。
文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
堆(Java Heap)
- 用于存放对象实例,是JVM占用内存最大一块区域。
- 垃圾收集器管理的主要区域。
- 使用分代收集算法时,堆被细分为新生代和老年代,新生代再细分为Eden空间、 From Survivor 空间、 To Survivor 空间。
- 在HotSpot虚拟机中,通过-Xmx和-Xms控制堆的大小,通过-Xmn控制新生代的大小。
- 堆可以处于物理上不连续的内存空间中,只要逻辑上是连续的即可。
- 没有内存完成实例分配时,抛出 OutOfMemoryError 。
- “线程共享”的内存区域,线程共享的堆中又可能划分出多个线程私有的分配缓存区(Thread Local Allocation Buffer,TLAB)。
文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
方法区(Method Area)
- 存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码。
- 回收目标主要是针对常量池的回收和对类型的卸载。
- 可以选择不实现垃圾收集。
- 当方法区无法满足内存分配需求时,将抛出 OutOfMemoryError 。
- JDK6 使用永久代实现方法区。
- JDK7 中永久代的字符串常量池被移出。
- JDK8 使用元空间实现方法区。
- “线程共享”的内存区域。
文章持续更新,微信搜索「万猫学社」第一时间阅读,关注后回复「电子书」,免费获取12本Java必读技术书籍。
总结
- 程序计数器:当前线程所执行的字节码的行号指示器。
- 虚拟机栈:Java方法执行的内存模型,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
- 本地方法栈:本地方法执行的内存模型,和虚拟机栈非常相似,其区别是本地方法栈为 JVM 使用到的 Native 方法服务。
- 堆:用于存储对象实例,是垃圾收集器管理的主要区域。
- 方法区:用于存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
微信公众号:万猫学社
微信扫描二维码
关注后回复「电子书」
获取12本Java必读技术书籍

快速串讲——JVM内存的区域划分的更多相关文章
- JVM内存各个区域分工简单介绍
JVM内存各个区域简单介绍: 程序计数器:程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 在使用多线程时,为了线程切换后能恢复到正确的执行位置,每条线程都需要有个独立 ...
- JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注意:本文主要参考自<深入理解Java虚拟机(第二版)> 说明:查看本文之前,推荐先知道JVM ...
- 第三章 JVM内存回收区域+对象存活的判断+引用类型+垃圾回收线程
注意:本文主要参考自<深入理解Java虚拟机(第二版)> 说明:查看本文之前,推荐先知道JVM内存结构,见<第一章 JVM内存结构> 1.内存回收的区域 堆:这是GC的主要区域 ...
- java内存区域,jvm内存各个区域详解
一.运行时数据区域 1.如图所示,可分为如下几个区域. 2.程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的 ...
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
以下内容转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29632145&id=4616836 jvm区域总体分两 ...
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释(转)
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- JVM内存区域划分Eden Space,Survivor Space,Tenured Gen,Perm Gen
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- [转]JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- JVM 运行时数据区域划分
目录 前言 什么是JVM JRE/JDK/JVM是什么关系 JVM执行程序的过程 JVM的生命周期 JVM垃圾回收 JVM的内存区域划分 一.运行时数据区包括哪几部分? 二.运行时数据区的每部分到底存 ...
随机推荐
- Linux的三剑客
首先,需要介绍一下管道和正则表达式,因为它经常和Linux三剑客一起使用. 一.管道Linux 提供管道符"|",将两个命令隔开,管道符左边命令的输出作为管道符右边命令的输入. c ...
- 测试报告$\alpha$
pytorch可视化编程网站VisualPytorch NAG \(\alpha\)版本发布了!点击网址访问:VisualPytorch 一.测试查虫(bug detection) 测试贯穿了开发.集 ...
- BUAA-OO-第四单元总结——终章
面向对象第四单元博客总结--终章 第四单元作业设计 第13次作业设计 类和对应方法属性设计 类设计如下图所示 本次作业主要涉及六个类,其中包括主类 Main ,通用Map类 UmlElementIdM ...
- [bug] redis-cli连接时出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
参考 https://www.geek-share.com/detail/2684728161.html
- Deepin/Uos系统更新源失败。提示:E: 仓库 “http://packages.chinauos.cn/uos eagle InRelease” 没有数字签名
Deepin/Uos系统更新源失败.提示:E: 仓库 "http://packages.chinauos.cn/uos eagle InRelease" 没有数字签名 n大橘为重n ...
- 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)
一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop) 概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...
- SpringBoot 整合 mybatis 开启驼峰命名规则自动转换
引言 在使用 MyBatis 进行实际项目开发时,如果数据库表字段名与Java 实体类属性名不一致,映射时则需要编写表字段列表与 Java 实体类属性的映射关系,即resultMap,如下: < ...
- 字符串算法(string_algorithm)
format 作用 格式化输出对象,可以不改变流输出状态实现类似于printf()的输出 头文件 #include <boost/format.hpp> using namespace b ...
- [Django高级之中间件、csrf跨站请求伪造]
[Django高级之中间件.csrf跨站请求伪造] Django中间件 什么是中间件? Middleware is a framework of hooks into Django's request ...
- MongoDB(13)- 查询操作返回指定的字段
插入测试数据 db.inventory.insertMany( [ { item: "journal", status: "A", size: { h: 14, ...