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

相关推荐
掘金-我是哪吒10 分钟前
分布式微服务系统架构第158集:JavaPlus技术文档平台日更-JVM基础知识
jvm·分布式·微服务·架构·系统架构
程序无bug16 分钟前
手写Spring框架
java·后端
程序无bug18 分钟前
Spring 面向切面编程AOP 详细讲解
java·前端
软件黑马王子23 分钟前
C#系统学习第八章——字符串
开发语言·学习·c#
阿蒙Amon24 分钟前
C#读写文件:多种方式详解
开发语言·数据库·c#
全干engineer29 分钟前
Spring Boot 实现主表+明细表 Excel 导出(EasyPOI 实战)
java·spring boot·后端·excel·easypoi·excel导出
Da_秀32 分钟前
软件工程中耦合度
开发语言·后端·架构·软件工程
Fireworkitte39 分钟前
Java 中导出包含多个 Sheet 的 Excel 文件
java·开发语言·excel
GodKeyNet1 小时前
设计模式-责任链模式
java·设计模式·责任链模式
a_Dragon11 小时前
Spring Boot多环境开发-Profiles
java·spring boot·后端·intellij-idea