JVM_001:内存模型

在这里插入图片描述

详细内容参考《深入理解Java虚拟机 JVM高级特效与最佳实践》

1.1 类加载子系统

1.2 方法区(Method Area
(1)线程共享。
(2)存储已被虚拟机加载的类信息(版本、字段、方法、接口)、常量、静态变量、即使编译器编译后的代码等数据。
(3)运行时常量池(Runtime Constant Pool)。
(4)当方法区无法满足内存分配需求时,将抛出OutOfMemoryErrory异常。

1.3 堆(Java Heap)
(1)线程共享,虚拟机启动是创建。
(2)存储对象实例、数组等引用类型变量。
(3)垃圾回收的主要区域。
(4)主流虚拟机都是按照可拓展来实现的(通过-Xms和-Xmx控制)。如果堆内存已耗尽并且无法拓展时,会抛出OutOfMemoryError异常。

1.4 虚拟机栈(Java Virtual Machine Stacks)
(1)线程私有
(2)虚拟机栈描述Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。没一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
(3)局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、long、float、double)、对象引用(reference类型)和returnAddress类型。其中long和double类型的数据会占用2个局部变量空间(Slot),其余的数据类型只占用一个。
(4)在这个区域如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态拓展,当拓展时无法申请到足够的内存时会抛出OutOfMemoryError异常。

1.5 本地方法栈
(1)与虚拟机栈类似,区别是本地方法栈是为虚拟机执行Native方法服务的。
(2)Native方法说明:被native关键字声明的方法说明该方法不是以Java语言实现的,而是以本地语言实现的,Java可以直接拿来用。
(3)存在StackOverflowError、OutOfMemoryError异常。

1.6 程序计数器/PC寄存器(Program Counter Register)
(1)线程私有。
(2)可以看做当前线程所执行的字节码的行号指示器。
(3)不会出现OutOfMemoryError(OOM)异常。

1.7 直接内存(Direct Memory)
(1)和服务器实际内存有关。
(2)可能出现OutOfMemoryError(OOM)异常

1.8 垃圾回收系统

1.9 执行引擎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值