java虚拟机内存区域

- java虚拟机运行时数据

- 程序计数器
- 是一块较小的内存空间,属于线程私有的内存。
- 用来记录正在执行的虚拟机字节码指令的地址。
- 每个线程都需要一个独立的程序计数器,各个线程间的计数器互不影响,独立存储。
- 多线程:通过线程轮流切换并分配处理器执行时间的方法来实现的 。
- Java虚拟机栈
- 属于线程私有,与线程的生命周期相同。
- 内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量、操作数栈、动态链接、方法接口等。
- 本区域存在两种异常:线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError异常;申请不到足够的内存,抛出OutOfMenoryError异常。
- 本地方法栈:与虚拟机栈的作用很相似;区别:虚拟机执行方法时,本地方法栈为虚拟机使用的是Native方法服务。同样的两种异常方法:线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError异常;申请不到足够的内存,抛出OutOfMenoryError异常。
- JAVA堆
- 所有的对象实例以及数组都要在堆上分配。
- java虚拟机中管理的最大的一块内存。
- 被所有线程共享的一块内存区域,在虚拟机启动时创建。
- java堆是垃圾收集器管理的主要区域,因此也成:‘GC堆’
- 细分:老生代和新生代;
- java虚拟机可以在物理上不连续的内存空间,只要逻辑上是连续即可。
- 抛出异常:堆中没有内存完成实例分配,抛出OutOFMenoryError
- 方法区
- 各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
- java虚拟机规范对方法区的限制非常宽松,除了和java堆一样不需要连续的内存空间和可以选择固定大小或者可扩展外 ,还可以选择不实现垃圾收集。
- 当方法区无法满足内存分配需求时,抛出:OutOFMenoryError异常。
- 运行时常量池
- 属于方法区的一部分
- 存放:编译期生成的各种字面量(初始化的常量值)和符号引用。
- 具备动态性。
- 当常量池无法满足内存分配需求时,抛出:OutOFMenoryError异常。
- 直接内存
- 并不是虚拟机运行时数据区的一部分,也不是java虚拟机中规范定义的内存区域,但是被频繁使用。
- 抛出异常:OutOFMenoryError
java虚拟机内存区域的更多相关文章
- 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
- 总结Java虚拟机内存区域模型
本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...
- 一文解析总结Java虚拟机内存区域模型
最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...
- java虚拟机内存区域理解
java虚拟机有的区域随着虚拟机进程的启动而存在, 有的区域依赖用户线程的启动和结束而建立和销毁. 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器.(针对java方 ...
- java虚拟机内存区域的划分以及作用详解
序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...
- Java虚拟机内存区域堆(heap)的管理
在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域 ...
- 【四】Java虚拟机内存区域初识
一.线程独占区 1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...
- 一、java虚拟机内存区域
内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...
- Java虚拟机内存区域划分
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.以及创建和销毁的时间.有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结 ...
随机推荐
- 聊聊Spring Cloud版本的那些事儿
说说Spring Cloud版本的那些事儿. 版本命名 之前提到过,Spring Cloud是一个拥有诸多子项目的大型综合项目,原则上其子项目也都维护着自己的发布版本号.那么每一个Spring Clo ...
- 软件配置管理及SVN的使用
一.配置管理 1. 管理整个软件生命周期中的配置项 配置项:软件生命周期中产出的各种输出成果,如需求文档.设计文档.代码.测试相关文档 2.管理配置项的变化(核心) 3.使用配置管理 ...
- 浅谈前端中的mvvm与mvc
用了vue这么久,却没有认真的关注mvvm与mvc,着实汗颜.趁着周末刚好看了一下网上的文章还有书籍,简单的谈一下我的理解. -以下图片均摘自网络. 一.MVC 特点:单项通讯 视图(View):用户 ...
- python中__del__使用方法
创建对象后,python解释器默认调用__init__()方法.当删除一个对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法.在python中,对于开发者来说很少会直接销 ...
- Log4j2中RollingFile的文件滚动更新机制
一.什么是RollingFile RollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的Appender. rollover的意思是当满足一定条件( ...
- 浅谈Java中的final关键字
浅谈Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...
- nsq topic和channel的区别
topic:一个可供订阅的话题.channel:属于topic的下一级,一个topic可以有多个channel.二者关系可以再参考下面两文章:http://www.cnblogs.com/forres ...
- BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛 ...
- hello spring春天来了
这是小小小零食 废话不多说 现在看到 spring这个管家 先说第一个 ioc :在每个框架的中都有一个容器的概念,所谓的容器就是将常用的服务,封装起来,然后,用户只需要遵循一定的规则,就可以达到统 ...
- 腾讯云发布runC容器逃逸漏洞修复公告
尊敬的腾讯云客户,您好: 近日,腾讯云安全中心监测发现轻量级容器运行环境runc被爆存在容器逃逸漏洞,攻击者可以在利用该漏洞覆盖Host上的runc文件,从而在Host上以root权限执行代码. 为 ...