JVM学习第一篇

JVM的自动内存管理机制,使得Java开发人员可以从繁琐的体力劳动中解放出来,只需关注自身业务即可。但是OutOfMemoryError并没有消失,而且一旦发生后果不堪设想。

1、首先看看JVM的内存结构如下:
这里写图片描述

把JVM划分成不同的内存区,是因为每一个独立的内存区都拥有各自的用途,都会负责存储各自的数据类型。

其中一些内存区的生命周期和JVM的生命周期保持一致;也就是说伴随JVM的启动而创建,伴随JVM的退出而销毁。

另一些内存区的生命周期和线程的生命周期保持一致;也就是说伴随线程的开始而创建,伴随线程的消亡而销毁。

2、根据线程访问权限划分内存区类型:
线程共享区和线程私有区。
线程共享区:Java Heap区、方法区和运行时常量区;
线程私有区:Java Stack区、本地方法区和PC寄存器;

======================================================
3、Java Heap区
Java Heap区是用来存储对象实例的内存区,同时也是GC执行垃圾回收的重点区域。
目前几乎所有的GC都是用分代收集算法进行垃圾对象实例回收。
Java Heap的具体划分:
这里写图片描述

4、方法区
方法区中存储了每一个Java类的结构信息;
方法区仅仅只是在逻辑上独立,在物理上还是存在于Java Heap中。

5、运行时常量区
运行时常量区属于方法区的一部分;
当类装载器成功将一个类或者接口装在进JVM后,就会创建与之对应的运行时常量池。

=======================================================

6、PC计数器
明确下一条应该执行什么字节码命令;
JVM中唯一一个没有明确规定需要抛出OutOfMemoryError异常;
JVM是基于栈的架构,所有操作都需要经过入栈和出栈完成。

7、Java Stack
Java栈也被称为Java虚拟机栈;
Java栈用于存储栈帧,而栈帧中存储是局部变量表、操作数栈,以及方法出口等信息。
局部变量表:原始数据类型变量、对象引用变量和return Address类型;

8、本地方法栈
用于支持本地方法。

猜你喜欢

转载自blog.csdn.net/qq_36006553/article/details/73849499