JVM之内存模型、运行时的数据区域的划分、java的程序计数器作用等

JVM

JVM内存模型

​ 对于Java程序来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样每一个new操作去写对应的delete/free操作,不容易出现内存泄露和内存溢出的问题。正是因为Java程序把内存控制权力交给JVM虚拟机。一旦出现内存泄露和溢出方面的问题,如果不了解虚拟机是则那样能够使用内存的,那么排查错误将会是一个非常艰巨的任务。

​ JVM虚拟机在执行Java程序的过程中,会把它管理的内存区域划分为若干个不同的区域,每个区域有各自不同的用途、创建方式及管理方式。有些区域随着虚拟机的启动一直存在,有些区域则随着用户线程的启动和销毁,这些共同组成了Java虚拟机的运行时数据区域,也被称为JVM内存模型。

运行时数据区域划分

​ JVM虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。由方法区、堆区、虚拟机栈、本地方法栈、程序计数器五部分组成。

版本差异:

​ JDK1.8之分为:线程共享(Heap堆区、Method Area方法区)、线程私有(虚拟机栈、本地方法栈、程序计数器)

​ JDK1.8之分为:线程共享(Heap堆区、MetaSpace方法区)、线程私有(虚拟机栈、本地方法栈、程序计数器)

程序计数器(Program Counter Register)

程序计数器:一块比较小的内存空间,是当前线程所执行的字节码的行号指示器。

​ 字节码解释器在解释执行字节码文件工作时,每当需要执行一条字节码指令时,就通过改变程序计数器的值来完成。程序中的分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完成。

​ 程序执行过程中,会不断的切换当前执行线程,切换后,为了能让当前线程恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,并且各线程之间计数器互不影响,独立存储。

程序计数器主要作用:

​ 1.字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。

​ 2.在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候,能够知道当前线程的运行位置,恢复当前线程的执行。

程序计数器是唯一一个不会出现 OutOfMemoryError的内存区域,它随着线程的创建而创建,随着线程的结束而死亡。

相关推荐
浮游本尊23 分钟前
Java学习第22天 - 云原生与容器化
java
佛祖让我来巡山1 小时前
深入理解JVM内存分配机制:大对象处理、年龄判定与空间担保
jvm·内存分配·大对象处理·空间担保·年龄判定
渣哥2 小时前
原来 Java 里线程安全集合有这么多种
java
间彧2 小时前
Spring Boot集成Spring Security完整指南
java
间彧3 小时前
Spring Secutiy基本原理及工作流程
java
Java水解4 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆6 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学6 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole6 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊6 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端