JVM运行时数据区

news2025/2/27 16:10:16

在上篇文章中我们详细介绍了JVM类加载子系统:https://blog.csdn.net/u011837804/article/details/129049418,Class文件被类加载子系统加载后就进入到了运行时数据区等待执行引擎执行,运行时数据区也是JVM中最重要的一部分,GC、OOM、性能调优全部在这里了。本篇文章我们就开始讲解运行时数据区。

1、概述

我们还是通过内存结构图,先知道运行时数据区所处的位置,做到心中有图。

  • 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行

  • JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。

  • 不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。

Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。

灰色的为单独线程私有的,红色的为多个线程共享的。即:

  • 程序计数器、本地方法栈、虚拟机栈为每个线程私有。

  • 方法区、堆为线程见共享的

每个JVM只有一个Runtime实例。即为运行时环境,对应到java类即为java.lang.Runtime,此类为一个饿汉式单例。

2、线程

一个Java应用即为一个进程,一个进程会有多个线程,线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行。 在Hotspot JVM里,每个线程都与操作系统的本地线程直接映射,也就是说java线程其实最终调用的是操作系统的线程。

当一个Java线程准备好执行以后,此时一个操作系统的本地线程也同时创建。Java线程执行终止后,本地线程也会回收。

操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法。

3、JVM系统线程

如果你使用console或者是任何一个调试工具,都能看到在后台有许多线程在运行。这些后台线程不包括调用public static void main(String[] args)的main线程以及所有这个main线程自己创建的线程。

这些主要的后台系统线程在Hotspot JVM里主要是以下几个:

  • 虚拟机线程:这种线程的操作是需要JVM达到安全点才会出现。这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点,这样堆才不会变化。这种线程的执行类型包括"stop-the-world"的垃圾收集,线程栈收集,线程挂起以及偏向锁撤销。

  • 周期任务线程:这种线程是时间周期事件的体现(比如中断),他们一般用于周期性操作的调度执行。

  • GC线程:这种线程对在JVM里不同种类的垃圾收集行为提供了支持。

  • 编译线程:这种线程在运行时会将字节码编译成到本地代码。

  • 信号调度线程:这种线程接收信号并发送给JVM,在它内部通过调用适当的方法进行处理。

本篇文章我们讲解了运行时数据区在JVM内存结构的位置、作用、以及运行是数据区包含的各个单元,下篇文章我们针对这各个单元详细介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+mybatis+mysql+vue运动会报名管理系统

基于springbootmybatismysqlvue运动会报名管理系统一、系统介绍二、功能展示1.用户登陆2.报名详情(运行员)3.比赛报名(运动员)4.个人参赛项目(运动员)5.加油稿展示(运动员)6.学院积分排名(运动员…

Spring MVC 源码 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping

HandlerMapping 组件HandlerMapping 组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是 Objec…

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明UART对应程序:IIC对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCVL53L0X模块1.2、STM32F103C8T6VL53L0X模块五、基础知识学习与相关资料下载六、…

打印流、转换流、数据流 、随机访问流

Java知识点总结:想看的可以从这里进入 目录5、打印流6、转换流7、数据流8、随机访问流5、打印流 实现将基本数据类型的数据格式转化为字符串输出,它们提供了一系列重载的print()和println()方法,用于多种数据类型的输出,这种流不会…

基于react+typescript的前端组件库violet-design(字节青训营项目)

文章目录前言一、项目介绍💌 介绍特性兼容性📦 安装使用 npm 安装使用 yarn 安装浏览器引入🔨 示例1. 引入样式2. 使用组件按需加载TypeScript✨ 组件🔗 链接二、项目实现2.1 技术选型2.2 架构设计2.2.1 目标用户和场景2.2.2 组件…

容器技术概述

容器化应用程序 软件应用程序通常依赖于运行时环境提供的其他库、配置文件或服务。软件应用程序的传统运行环境是物理主机或虚拟机,应用程序依赖项作为主机的一部分安装。 例如,考虑一个 Python 应用程序,它需要访问实现 TLS 协议的公共共享…

第 16 章_多版本并发控制

第 16 章_多版本并发控制 1. 什么是MVCC MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作…

剑指 Offer 27. 二叉树的镜像

剑指 Offer 27. 二叉树的镜像 难度:easy\color{Green}{easy}easy 题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 镜像输出: 示例 1: 输入:root [4,2,7,1,3,…

Office 365 备份与恢复

Microsoft Office 365中的不同服务几乎可以随时访问,这要归功于Microsoft的99.9%正常运行时间记录。但是,Office 365步履蹒跚的一个方面是提供了一种从意外数据丢失中恢复的方法。Microsoft 提供的数据保留功能并非适用于所有数据丢失情况的可行解决方案…

亿级高并发电商项目-- 实战篇 --万达商城项目 十二(编写用户服务、发送短信功能、发送注册验证码功能、手机号验证码登录功能、单点登录等模块)

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Leetcode力扣秋招刷题路-0082

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1&#…

这6个视频剪辑素材库,你一定要知道~

推荐5个免费商用视频素材网站,建议收藏哦! 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材量很大,有设计、图片、音频、视频等超多素材,大部分都能免费下载。视频素材都很高清,有自然、人物、科技、农业…

前端页面开发模块组织结构

模块组织 任何超过 1000 行的 CSS 代码,你都曾经历过这样的体验: 这个 class 到底是什么意思呢?这个 class 在哪里被使用呢?如果我创建一个 xxoo class,会造成冲突吗?Reasonable System for CSS Stylesheet Structure 的目标就是解决以上问题,它不是一个框架,而是通过…

Freemarker快速入门

freemarker提供很多指令用于解析各种类型的数据模型参考地址&#xff1a;http://freemarker.foofun.cn/ref_directives.html一.测试搭建Freemarker的运行环境并进行测试.1.添加Freemarker与SpringBoot的整合包XML <!-- Spring Boot 对结果视图 Freemarker 集成 --> <d…

互斥锁原理

如果有交互的公共数据区域&#xff0c;我们需要让一个进程先执行&#xff0c;一个进程后执行&#xff0c;互斥锁就是用锁的方式让他们的竞争关系变得有序。 临界区问题 临界区是在程序之间有公共数据交互时产生的区域&#xff0c;没有两个进程可以在它们各自的临界区同时执行…

我的 System Verilog 学习记录(1)

引言 技多不压身&#xff0c;准备开始学一些 System Verilog 的东西&#xff0c;充实一下自己&#xff0c;这个专栏的博客就记录学习、找资源的一个过程&#xff0c;希望可以给后来者一些借鉴吧&#xff0c;IC找工作的都加把油&#xff01; 本文是准备先简单介绍一下环境搭建…

C++11智能指针std::shared_ptr介绍及使用

介绍 shared_ptr是一种智能指针(smart pointer)&#xff0c;作用有如同指针&#xff0c;但会记录有多少个shared_ptrs共同指向一个对象。这便是所谓的引用计数(reference counting),比如我们把只能指针赋值给另外一个对象,那么对象多了一个智能指针指向它,所以这个时候引用计数…

洛谷P1125 [NOIP2008 提高组] 笨小猴 C语言/C++

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小&#xff0c;所以每次做英语选择题的时候都很头疼。但是他找到了一种方法&#xff0c;经试验证明&#xff0c;用这种方法去选择选项的时候选对的几率非常大&#xff01; 这种方法的具体描述如下&#xff1a;假设 maxn\…

【C++】2.类和对象(上)

1.面向过程和面向对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。C是基于面向对象的&#xff0c;关注的是对象&#xff0c;将一件事情拆分成不同的对象&#xff0c;靠对象之间的交互完成。 2.类的引入…

【发版或上线项目保姆级心得】

第一步&#xff1a;先在正式环境创建数据库/新增表格或者字段 在数据库表中增加字段/表格&#xff0c;不会报错。 但是切记不要过早数据库字段/表格或者删除字段/表格 第二步&#xff1a;修改配置文件 先将正式环境需要的配置给写好&#xff0c;包括但不仅限于数据库配置、…