Hotspot源码解析-第十一章

news2024/11/24 9:23:39

第十一章

11.1 线程

11.1.1 线程的概念

说起线程,首先得提起进程,相信很面试者在回答进程与线程的区别时都会用一句话:“进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位”,只能说这句话部分正确,就目前来讲,一般操作系统(这里指Linux)的任务调度执行单位确实是线程,但是未来可能会支持以协程为单位的任务调度。再说进程是操作系统资源分配的基本单位这句话,在linux操作系统中,当需要创建一个进程时,通过系统调用fork()然后再调用copy_process来完成,创建进程时,会创建并分配该进程所需要的任务资源和内存,最终形成图11-1的内存模型,粗略分为代码块(存放代码数据)、数据块(涉及数据的存放)、堆(进程malloc动态分配内存区)、用户栈(进程执行时动态存储区)、共享库存储映射区(主要是映射动态库或其他依赖库)等,这些区域在进程创建时都是要先创建的(虚拟空间),这些虚拟空间都是要占用一定内存的,也就是所谓的进程的资源分配的一部分,当然还有其他资源的分配,比如页目录、页表等。然而,这个时候线程去哪里了呢,其实,这个时候同时创建出了一个线程(概念上的),最终形成一进程一线程模型。如果该进程在执行的过程中再通过pthread_create()函数创建另外一些线程,那就形成了一进程多线程模型。由于linux底层线程的创建函数,底层也是copy_process()函数来完成的,实现上创建过程跟fork()创建进程是一样的,只是创建线程时,不会再创建图11-1描述的空间,而是继承发起线程创建者的这块空间。最终总结线程和进程的区别:

1、进程和线程创建过程本质上是没有区别的,最终都是通过copy_process()函数调用

2、进程只是在概念上包含了线程,以进程为调度单位时,本质上就是一进程一线程的模型在运行,早期的linux调度模型就是这样的

3、进程的概念实际上就是早期以进程为调度单位提出的,所以从技术上讲,没什么区别,只是人为制定的概念加以区分

图11-1

在这里插入图片描述

11.1.2 Hotspot线程

在执行命令 java [options] xxx.class param1 param2 ... paramn 时,实际上Linux是fork()出了一个新的Java进程来执行后续操作,并且在执行的过程中又会创建其他的线程(Java线程、VM线程、GC线程等)。然而在Java执行的过程中,是需要Java线程与VM双向交互的,例如:在线程的启停时需要执行一些必要的任务(比如保存安全点),以及垃圾收集期间线程的协调和同步,所以Hotspot JVM需要管理这些线程,但是线程又是有操作系统创建的,不是JVM创建的,因此在Hotspot中,每个Java线程都会映射到一个操作系统线程,同时需要跟踪和管理这些线程,确保Hotspot内部的状态与线程本身状态同步。

11.1.3 线程关系

Hotspot中,各线程类的关系图,如图11-2
图11-2
在这里插入图片描述

11.1.4 线程的属性

属性名功能描述归属类
_pending_exception指向当前线程等待处理的异常对象的引用ThreadShadow
_exception_file指向异常发生时的文件信息ThreadShadow
_exception_line指向异常发生时的代码行信息ThreadShadow
_real_malloc_address指向线程创建时分配的实际地址的首地址Thread
_SR_lock线程状态更改的监视器Thread
_suspend_flags线程挂起标志Thread
_num_nested_signal进入线程内部处理linux系统信号的个数,处理完成后会-1Thread
_active_handles指向当前线程持有的JNI句柄链表头指针Thread
_free_handle_block空闲JNI句柄块的链表头指针Thread
_last_handle_markHandleMark的指针,该Mark会记录指向线程本身、存储区域、存储chunk等信息Thread
_tlab线程本地分配缓存Thread
_allocated_bytes当前线程在Java堆中已分配的字节数Thread
_vm_operation_started_count记录已开始的VM操作数量Thread
_vm_operation_completed_count记录已完成的VM操作数量Thread
_osthread指向基于平台的线程实现Thread
_resource_area线程本地的用于临时分配的资源区域Thread
_handle_area线程本地的用于分配JNI句柄的资源区域Thread
_stack_base线程栈基址Thread
_stack_size线程栈大小Thread
_ParkEvent线程阻塞时的事件对象Thread
_SleepEvent线程睡眠时的事件对象Thread

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

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

相关文章

十大排序总结之——冒泡排序、插入排序

同样,这两几乎也是被淘汰了的算法,尽管它们是稳定的,但是时间复杂度没人喜欢,了解一下就好,没啥好说的,注意最后一句话就行了 一,冒泡排序 1. 算法步骤 共n-1趟,谁两敢冒泡就换了…

SpringBoot多环境配置,让你部署无忧

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot多环境配置,让你部署无忧 📚个人知识库: Leo知识库,欢迎大家访…

vite项目中动态引入src失败的问题解决:require is not defined

问题复现 静态引入路径(无问题) <el-menu-item v-for"(item,index) in menuList" :index"item.name" :key"index"><img class"menuItemImg" src"../svg/router/homePage.svg" alt"">{{ item.meta.c…

vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息

一、实现效果 使用echarts实现省市地图绘制根据数据显示省下市的天气图标根据数据显示省下市的温度信息 二、实现方法 1、安装echarts插件 npm install echarts --save2、获取省市json数据 https://datav.aliyun.com/portal/school/atlas/area_selector 通过 阿里旗下的高…

hubSpot有哪些功能?

HubSpot是一款综合性的市场营销、销售和服务软件平台&#xff0c;旨在帮助企业实现更有效的客户关系管理和增长。以下是HubSpot的一些主要功能&#xff1a; 市场营销自动化&#xff1a; 制定和执行多渠道的市场营销活动。 创建和管理电子邮件营销、社交媒体发布和广告活动。 …

WMS仓储管理系统可以处理哪些仓库异常情况

随着现代物流行业的快速发展&#xff0c;仓库管理作为其中的核心环节&#xff0c;面临着越来越大的挑战。传统的仓库管理方式已经难以满足日益复杂的需求&#xff0c;因此&#xff0c;WMS仓储管理系统解决方案应运而生。WMS仓储管理系统不仅简化了仓库的日常操作&#xff0c;更…

Redis:原理+项目实战——Redis实战1(session实现短信登录(并剖析问题))

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis的Java客户端 &#x1f4da;订阅专栏&#xff1a;Redis速成 希望文章对你们有所帮助…

拓扑排序【邻接矩阵邻接表】

拓扑排序 TuoPuSort 一、概念 我们再说拓扑排序时,我们首先了解下​DAG​ 将有向无环图G(V,E)中的所有顶点排成一个线性序列,使图中任意一对顶点u,v,之间不存在环路 DAG是一种特殊的有向图&#xff0c;它由一组顶点和一组有向边组成&#xff0c;且不存在任何环路。 每个顶点表…

华脉智联融合通讯基础引擎平台V2.0发布

华脉智联始于2012年&#xff0c;成立于2017年。历经11年在融合通讯、指挥调度领域的持续研发&#xff0c;于2024年发布华脉智联融合通讯基础引擎平台V2.0。 系统组成 1 核心平台 2 WEB调度台 3 PC调度台 4 云集群APP 5 云执法APP 系统特点 1 多网融合 可以支持多种网络接入和融…

【电商项目实战】购物车完善

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《电商项目实战》。&#x1f3af;&#x1f3af; &am…

windows11此应用无法在你的电脑上运行怎么解决

在使用电脑运行软件的时候&#xff0c;系统弹出了“此应用无法在你的电脑上运行”提示&#xff0c;导致没办法正常使用该软件&#xff0c;不知道怎么回事&#xff0c;针对这一问题&#xff0c; 方法一&#xff1a; 1、如果是win11里的软件&#xff0c;可以右键该软件&#xff0…

电子电器架构(E/E)演化 —— 车载以太网

电子电器架构&#xff08;E/E&#xff09;演化 —— 车载以太网 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 本文13000字。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一…

2024年01月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年01月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

Linux——进程初识(二)

1. 对当前目录创建文件的理解 我们知道在创建一个文件时&#xff0c;它会被默认创建到当前目录下&#xff0c;那么它是如何知道当前目录的呢&#xff1f; 对于下面这样一段代码 #include <stdio.h> #include <unistd.h>int main() {fopen("tmp.txt", …

polar CTF WEB-veryphp

1、题目 <?php error_reporting(0); highlight_file(__FILE__); include("config.php"); class qwq {function __wakeup(){die("Access Denied!");}static function oao(){show_source("config.php");} } $str file_get_contents("ph…

图神经网络——图学习

图学习 0. 前言1. 图2. 图学习3. 图神经网络小结 0. 前言 近年来&#xff0c;从社交网络到分子生物学等各个领域&#xff0c;数据的图表示越来越普遍。图神经网络 (Graph Neural Network, GNN) 是专为处理图结构数据而设计的&#xff0c;要充分挖掘图表示的潜力&#xff0c;深…

[Ray Tracing: The Rest of Your Life] 笔记

前言 开年第一篇博客~ 整理了三四个小时才整理完orz。 这一部分是光线追踪三部曲的最后一部&#xff0c;主要介绍了蒙特卡洛积分、重要性采样等内容。场景上没有什么大的改变&#xff0c;基本上就是在Cornell Box中渲染的&#xff0c;本篇主要在加速收敛&#xff0c;提升渲染效…

浅析PostgreSQL与SQL Server两者间的关键性差异

市场上有各种各样的数据库可供选择&#xff0c;用户通常可以仔细考虑PostgreSQL与SQL Server&#xff0c;以便为他们的用例找出更好的选择。使用PostgreSQL进行运营的组织可能希望切换到像Microsoft SQL Server这样的数据库&#xff0c;因为它主要迎合不同的数据仓库解决方案、…

学Python到底能干什么?看这里就知道

学Python到底能干什么&#xff1f;看这里就知道 | Python是一种代表简单主义思想的语言&#xff0c;极其容易上手&#xff0c;并且功能非常强大&#xff0c;这也是我的第二计算机语言。 个人可以使用Python去做哪些事呢&#xff1f; ✅办公自动化场景&#xff1a; 每天要处理…