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

相关推荐
rannn_1111 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
leisoo80971 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴2 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
IKUN家族3 小时前
Spring IoC&DI
java·spring·rpc
一只旭宝3 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
山荷枝4 小时前
03-框架--Spring
java·后端·spring
ChaHae-In4 小时前
SpringBoot统一功能处理
java·spring boot·后端
coder!mq5 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding5 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ5 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio