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的内存区域,它随着线程的创建而创建,随着线程的结束而死亡。

相关推荐
扬子鳄0082 分钟前
java注解的处理器
java
Amagi.6 分钟前
Spring中Bean的作用域
java·后端·spring
2402_8575893630 分钟前
Spring Boot新闻推荐系统设计与实现
java·spring boot·后端
繁依Fanyi33 分钟前
旅游心动盲盒:开启个性化旅行新体验
java·服务器·python·算法·eclipse·tomcat·旅游
J老熊38 分钟前
Spring Cloud Netflix Eureka 注册中心讲解和案例示范
java·后端·spring·spring cloud·面试·eureka·系统架构
蜜桃小阿雯41 分钟前
JAVA开源项目 旅游管理系统 计算机毕业设计
java·开发语言·jvm·spring cloud·开源·intellij-idea·旅游
CoderJia程序员甲41 分钟前
重学SpringBoot3-集成Redis(四)之Redisson
java·spring boot·redis·缓存
Benaso41 分钟前
Rust 快速入门(一)
开发语言·后端·rust
sco528242 分钟前
SpringBoot 集成 Ehcache 实现本地缓存
java·spring boot·后端
wjs20241 小时前
HTML5 新元素
开发语言