Hotspot源码解析-第21章-引用处理器和JNI句柄初始化

第21章-引用处理器和JNI句柄初始化

21.1 引用处理器初始化

这一节主要是对软引用处理器使用前的各重要属性初始化,为GC时对引用处理前的使用做准备,使用细节会在GC专题中讲。函数的调用入口在init.cpp->referenceProcessor_init()

21.1.1 referenceProcessor.cpp/hpp

21.1.1.1 referenceProcessor_init
void referenceProcessor_init() {ReferenceProcessor::init_statics();
}void ReferenceProcessor::init_statics() {// We need a monotonically non-deccreasing time in ms but// os::javaTimeMillis() does not guarantee monotonicity.// 这里需要一个毫秒级的单调不递减时间,但是os::javaTimeNanos()是纳秒级的,不支持,所以这里要处理一下jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;// 初始化软引用的时间戳时钟_soft_ref_timestamp_clock = now;// 同时更新 java_lang_ref_SoftReference 类中clock属性字段java_lang_ref_SoftReference::set_clock(_soft_ref_timestamp_clock);// 创建软引用清除策略_always_clear_soft_ref_policy = new AlwaysClearPolicy();// 默认软引用标记策略 LRUMaxHeapPolicy  LRUCurrentHeapPolicy 二选一,GC专题中会细讲_default_soft_ref_policy      = new COMPILER2_PRESENT(LRUMaxHeapPolicy())NOT_COMPILER2(LRUCurrentHeapPolicy());if (_always_clear_soft_ref_policy == NULL || _default_soft_ref_policy == NULL) {vm_exit_during_initialization("Could not allocate reference policy object");}guarantee(RefDiscoveryPolicy == ReferenceBasedDiscovery ||RefDiscoveryPolicy == ReferentBasedDiscovery,"Unrecongnized RefDiscoveryPolicy");// 这个值默认为 1,表示用discovered字段来标记挂起的对象引用_pending_list_uses_discovered_field = JDK_Version::current().pending_list_uses_discovered_field();
}

21.2 JNI句柄初始化

函数入中init.cpp->jni_handles_init()。java应用调用c/c++的函数是要通过jni来实现的,所以在虚拟机中,Java对象引用也都要用JNI句柄来持有。

21.2.1 jniHandles.cpp

21.2.1.1 jni_handles_init
void jni_handles_init() {JNIHandles::initialize();
}void JNIHandles::initialize() {// 这里都比较简单,看下 JNIHandleBlock 类继承 CHeapObj,就知道 allocate_block 分配内存块是在C堆中,也就是说,下面两行代码的意义就是分配了// 全局句柄块_global_handles      = JNIHandleBlock::allocate_block();// 弱引用句柄块_weak_global_handles = JNIHandleBlock::allocate_block();EXCEPTION_MARK;// We will never reach the CATCH below since Exceptions::_throw will cause// the VM to exit if an exception is thrown during initializationKlass* k      = SystemDictionary::Object_klass();// 已删除的对象的句柄,这块内存是在Java堆中分配的_deleted_handle = InstanceKlass::cast(k)->allocate_instance(CATCH);
}

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

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

相关文章

文件的上传下载

文件的上传下载 文件上传依赖配置 文件上传的最大值文件请求的最大值临时文件存储路径Controller方法一方法二 文件下载方法一方法二 文件上传 今天工作中需求涉及到文件的上传和下载,Spring Boot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种方式&…

cmd命令指南

dir: 显示当前目录中的文件和子文件夹列表。 cd: 更改当前目录。使用 “cd <目录路径>” 来导航到指定的目录&#xff0c;或使用 “cd …” 返回上一级目录。 md: 创建新的文件夹。例如&#xff0c;使用 “md <文件夹名称>” 来创建一个新的文件夹。 rd: 删除文…

Qt配置OpenCV

首先安装好Qt Createor&#xff0c;CMake&#xff0c;OpenCV,我本次使用的是Qt6.3.4和OpenCV4.6.0 Qt Creator清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qtcreator/OpenCV官网下载: https://opencv.org/releases/ 一. 编译OpenCV 首先使用Qt C…

three.js从入门到精通系列教程004 - three.js透视相机(PerspectiveCamera)滚动浏览全景大图

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程004 - three.js透视相机&#xff08;PerspectiveCamera&#xff09;滚动浏览全景大图</title><script src"js/three.js"&g…

ThinkPHP5.0.0~5.0.23路由控制不严谨导致的RCE

本次我们继续以漏洞挖掘者的视角&#xff0c;来分析thinkphp的RCE 敏感函数发现 在调用入口函数&#xff1a;/ThinkPHP_full_v5.0.22/public/index.php 时 发现了框架底层调用了\thinkphp\library\think\App.php的app类中的incokeMethod方法 注意传递的参数&#xff0c;Refle…

shopee最新选品:Shopee平台上的最新选品策略和方法

在Shopee平台上进行选品是卖家们必须经历的重要步骤。通过精心选择和定位产品&#xff0c;卖家可以提高产品的市场接受度和销售业绩。然而&#xff0c;要在竞争激烈的电商市场中脱颖而出&#xff0c;并不是一件容易的事情。本文将介绍一些在Shopee平台上进行最新选品时可以采用…

打造专业级ChatGPT风格聊天界面:SpringBoot与Vue实现动态打字机效果,附完整前后端源码

大家好&#xff0c;今天用SpringBoot、vue写了一个仿ChatGPT官网聊天的打字机效果。 所有代码地址:gitee代码地址 &#xff0c;包含前端和后端&#xff0c;可以直接运行 使用本技术实现的项目&#xff1a;aicnn.cn&#xff0c;欢迎大家体验 如果文章知识点有错误的地方&#xf…

Elasticsearch 查询超过10000 的解决方案 - Python

文章目录 Elasticsearch 查询超过10000 的解决方案 - Python法1&#xff1a;修改 设置 max_result_size &#xff08;不推荐&#xff09;法2&#xff1a; scroll 分页法3&#xff1a; search_after 分页 Elasticsearch 查询超过10000 的解决方案 - Python 法1&#xff1a;修改…

【源码】医院绩效管理系统,针对医、护、技、药、管不同岗位,可设置不同的核算方法、核算参数

医院绩效管理系统源码 医院绩效管理系统以国家医院绩效管理考核政策法规为依据&#xff0c;结合医院管理实践&#xff0c;以经济管理指标为核心&#xff0c;医疗质量、安全、效率、效益管理为重点&#xff0c;特别强调持续改进&#xff08;PDCA&#xff09;管理理念。实现医院绩…

《WebKit 技术内幕》学习之九(1): JavaScript引擎

1 概述 1.1 JavaScript语言 说起JavaScript语言&#xff0c;又要讲一个典型的从弱小到壮大的奋斗史。起初&#xff0c;它只是一个非常不起眼的语言&#xff0c;用来处理非常小众的问题。所以&#xff0c;从设计之初&#xff0c;它的目标就是解决一些脚本语言的问题&#xff…

[Android] Android架构体系(2)

文章目录 Bionic精简对系统调用的支持:不支持 System V IPC:有限的 Pthread 功能:有限支持C:不再支持本地化和/或宽字符:Bionic新增的特性系统属性硬编码写死的UID/GID内置了DNS解析硬编码写死的服务和协议 硬件抽象层Linux内核匿名共享内存(ASHMem)BinderLoggerION 内存管理内…

ZXing开源库生成二维码

引言 二维码&#xff08;QR Code&#xff09;作为一种快速、高容量、高密度的矩阵条码&#xff0c;已经在各行各业得到广泛应用。ZXing&#xff08;Zebra Crossing&#xff09;是一款由Google开源的Java二维码生成和解析库&#xff0c;提供了丰富的功能和易于使用的API。本篇博…

wikijs在启动项目时遇到的问题Database Initialization Error: create table “migrations“

问题 使用PostgreSQL安装wikijs过程中&#xff0c;启动项目运行node server时&#xff0c;会报错如下&#xff1a; error: Database Initialization Error: create table "migrations" ("id" serial primary key, "name" varchar(255), "b…

西瓜书学习笔记——Boosting(公式推导+举例应用)

文章目录 引言AdaBoost算法AdaBoost算法正确性说明AdaBoost算法如何解决权重更新问题&#xff1f;AdaBoost算法如何解决调整下一轮基学习器样本分布问题&#xff1f;AdaBoost算法总结实验分析 引言 Boosting是一种集成学习方法&#xff0c;旨在通过整合多个弱学习器来构建一个…

架构篇08:架构设计三原则

文章目录 合适原则简单原则演化原则小结 成为架构师是每个程序员的梦想&#xff0c;但并不意味着把编程做好就能够自然而然地成为一个架构师&#xff0c;优秀程序员和架构师之间还有一个明显的鸿沟需要跨越&#xff0c;这个鸿沟就是“不确定性”。 对于编程来说&#xff0c;本…

C Primer Plus(第六版)13.11 编程练习 第9题

/* 修改程序清单13.3 中的程序&#xff0c;从1开始&#xff0c;根据加入列表的顺序为每个单词编号。当程序下次运行 时&#xff0c;确保新的单词编号接着上次的编号开始。 */ //13.11-8.exe c 13.11-8.txt 13.11-8-1.txt 13.11-8-2.txt #include <stdio.h> #include <…

【Docker】在centos中安装nginx

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是平顶山大师&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《【Docker】安装nginx》。&#x1f3af;&#…

7+细胞焦亡+ceRNA+实验验证,如何脱离套路求创新?

导语 今天给同学们分享一篇生信文章“Dissection of pyroptosis-related prognostic signature and CASP6-mediated regulation in pancreatic adenocarcinoma: new sights to clinical decision-making”&#xff0c;这篇文章发表在Apoptosis期刊上&#xff0c;影响因子为7.2。…

【JAVA】我和我的第一个“对象”相遇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-zAjv1fTLGQmnqncy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

安泰ATA-2082高压放大器如何驱动超声探头进行无损检测

无损检测技术是一种在不破坏或影响被检测物体性能的前提下&#xff0c;通过物理或化学方法对其内部或表面的缺陷进行检测的技术。在无损检测领域&#xff0c;超声检测是一种广泛应用的方法&#xff0c;而ATA-2082高压放大器则是实现高效、精确超声检测的关键设备之一。本期内容…