读《Java虚拟机》之Java内存区域

本文所有内容都是看过 周志明老师 所著《深入理解Java虚拟机》后所写的,可能很多地方理解的不对,希望多多批评指正。

概述

本篇文章将介绍Java虚拟机内存中的各个区域,理解他们的作用,服务对象,以及其中可能产生的问题。

运行时数据区域

Java虚拟机在执行Java代码时会将它所管理的内存划分为若干个不同的区域,每个区域的作用,创建和销毁时间都不一样。具体参考下图:

其中: 绿色部分是所有 线程共享区域
           红色部分是 线程隔离区域

各个区域的作用如下表所示:

名称作用是否线程共享主要注意事项
程序计数器记录线程当前执行字节码指令的位置,为空是标识正在执行Native方法
Java虚拟机栈        描述的是Java方法执行的内存模型,每个方法在执行的同时会创建一个栈帧,用于存放局部变量表,操作数栈,动态链表,方法出口信息等。
        每个方法从调用直至调用完成的过程就相当于一个栈帧在虚拟机栈中入栈到出栈的过程。
       局部变量表所需要的内存在编译期就可以完全决定,并且在运行期不会再次发生改变。
深度不足:StackOverFloweError
宽度不足:OutOfMemoryError
本地方法栈类似于Java虚拟机栈,区别是Java虚拟机调用的是Java方法(字节码),而本地虚拟机栈则调用的Native方法服务。深度不足:StackOverFloweError
宽度不足:OutOfMemoryError
Java堆存放对象实例,
垃圾收集器的主要管理区域
通过-Xmx -Xms控制大小
当堆中没有内存完成实例分配时,并且堆无法再扩展时,抛出OutMemoryError异常
方法区存储已被虚拟机加载的类信息,常量,静态变量、即时编译后的代码等数据。当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常
运行时常量池方法区的一部分,主要存放编译期生成的各种字面量和符号引用当常量池无法满足内存分配需求时,将抛出OutOfMemoryError异常








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值