Presto之内存池管理

一. 前言

       在Presto 之GENERAL POOL & RESERVED POOL_王飞活的博客-CSDN博客 的文章中,我们介绍了在Presto中,内存分成了保留区和通用区两个内存池区进行管理。本文则主要介绍Presto是是如何实现内存池管理的。

二. Presto内存池大小控制管理

        Presto的内存管理主要是在MemoryPool类中实现的,当一个Operator需要申请内存使用时需要经过如下步骤:

  1. 在Presto的Operator调度进程中,首先调用该Operator的isBlock接口检测该Operator是否处于阻塞状态。

  2. Operator在isBlock中向MemoryPool申请内存,调用MemoryPool的reserve接口。

  3. 在MemoryPool的reserve接口中,如果当前剩余的内存大于申请的内存,则返回NOT_BLOCKED,否则返回一个回调钩子ListenableFuture。核心代码如下所示:

     

  4. 当有人释放内存的时候, 如果释放后剩余的内存值满足步骤3申请的内存值,Presto会将3的回调钩子设置为null,将Future设置为Done状态,核心代码如下所示:

     

  5. Presto的Operator调度进程检测到检测到Future变成Not Block状态后,开始调度改Operator,否则将该Operator一直处于阻塞状态,直到有别的查询在上述4中释放了内存后,满足该Operator的内存使用需求,将Future设为Done状态后,再将该Operator重新调度运行。

          上述的流程实现了查询内存使用不会超出内存池的大小控制范围。

二. Presto内存申请

        Presto的内存池只控制了内存的使用量,但是并没有统一的内存申请控制。其实在Presto,最耗费内存的Page和Hash表等,都是以数组的形式存储的,也就是说直接向JVM申请内存,不经过内存池的控制。

三. 堆外内存

        Presto不会直接使用堆外内存进行数据存储,但是Presto使用的一些三方库,比如一些压缩解压缩等三方库等,会存在堆外内存的使用情况。

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

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

相关文章

异地远程访问本地SQL Server数据库【无公网IP内网穿透】

文章目录 1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转发自CSDN远程穿透的文章:无需公网…

将迷你世界的蓝图导出成表格

将迷你世界的蓝图导出成表格 使用方法为编译此代码&#xff0c;然后将游戏存档的vbp文件拖入编译出的exe上即可导出csv文件 #include<iostream> #include<Windows.h> #include<direct.h> #include<io.h> using namespace std; #define N_L 4 //这个改…

GLM: General Language Model Pretrainingwith Autoregressive Blank Infilling翻译理解

GPT&#xff08;autoregressive&#xff09;模型是一个自回归模型&#xff0c;利用left-to-right语言模型&#xff0c;由于不是双向attention 机制&#xff0c;因此不能再NLU任务中&#xff0c;获取充分的上下文信息&#xff0c;BERT类似自编码&#xff08;autoencoding&#x…

【SpringBoot——Error记录】

java: 警告: 源发行版 17 需要目标发行版 17 问题描述 IDEA运行Spring工程报错&#xff1a;java: 警告: 源发行版 17 需要目标发行版 17 问题原因 idea工具jdk版本使用问题 解决办法 1、File(文件) -> Project Structure(项目结构)->修改jdk版本即可 选中项目文件…

spring之ApplicationContext

spring之ApplicationContext ApplicationContextApplicationContext源码ApplicationContext继承接口分析ApplicationContext两个比较重要的实现类AnnotationConfigApplicationContextClassPathXmlApplicationContext 国际化---MessageSource资源加载---ResourceLoader获取运行时…

基于单片机智能加湿器 水位防干烧加湿器的设计与实现

功能介绍 以51/STM32单片机作为主控系统&#xff1b;LCD1602液晶显示当前温湿度&#xff0c;当前模式&#xff0c;湿度下限;按键设置湿度下限&#xff0c;当湿度低于下限时开启加湿器;水位传感器检查加湿器是否有水&#xff0c;如果没有水到话加湿器不进行工作&#xff0c;蜂鸣…

Js提升:如何实现图片懒加载

知其然&#xff0c;更要知其所有然&#xff0c;在不同场景下该用什么方法&#xff0c;如何做到最优。 为什么要出现图片懒加载&#xff0c;解决了什么问题&#xff1f;除了懒加载&#xff0c;还有预加载呢&#xff1f;什么是预加载&#xff0c;怎么实现&#xff0c;相比于懒加载…

Windows server 下关闭135/139/445端口

一、关闭​ ​135端口​​ 方案一 第一步 运行dcomcnfg&#xff0c;打开“组件服务”→“计算机”&#xff0c;在“我的电脑”上右键点击&#xff0c;选“属性”&#xff1b;然后点默认属性&#xff0c;把“在此计算机上启用分布式COM&#xff08;E&#xff09;”的勾去掉&a…

Spring Boot 中的 Zookeeper 分布式锁

Spring Boot 中的 Zookeeper 分布式锁 分布式锁是分布式系统中常用的一个同步工具&#xff0c;它可以在多个进程之间协调访问共享资源&#xff0c;避免数据不一致或重复处理。在分布式环境中&#xff0c;由于网络通信的延迟和节点故障等原因&#xff0c;传统的锁机制无法满足需…

软考:中级软件设计师:系统总线,系统可靠性,串联和并联可靠度

软考&#xff1a;中级软件设计师:系统总线&#xff0c; 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心…

【STM32】步进电机及其驱动(ULN2003驱动28BYJ-48丨按键控制电机旋转)

本篇文章包含的内容 一、步进电机的结构和工作原理1.1 步进控制系统的组成1.2 步进电机简介1.3 步进电机的分类1.4 步进电机的工作原理1.4.1 单极性步进电机&#xff08;5线4相&#xff09;1.4.2 双极性步进电机&#xff08;4线2相&#xff09;1.4.3 细分器驱动原理 1.5 步进电…

VMware16.0安装教程和创建

许可证&#xff1a; ZF3R0-FHED2-M80TY-8QYGC-NPKYFYF390-0HF8P-M81RQ-2DXQE-M2UT6ZF71R-DMX85-08DQY-8YMNC-PPHV8设置网络 添加镜像 下载centos7镜像网址https://mirrors.aliyun.com/centos/7/isos/x86_64/?spma2c6h.25603864.0.0.d7724511YPrZpg win10镜像地址https://ww…