2.1.1 Golang主动式内存缓存的优化探索之路Golang主动式内存缓存的优化探索之路 安晏伯 学而思网校 技术专家 目 录 问题引入 01 难点攻克 02 主动式内存缓存框架 03 总结 04 问题引入 第一部分 为什么能有极致的性能? 01. 如何优化? 解决了哪些技术难题? 主动式内存缓存 如何优化? 极致的性能 除了网络IO,与Redis有什么区别? 复杂的查询怎么办? 02. 传统的Cache很难 支持灵活的信息过滤条件 内存不够用怎么办? 03. 冷热可交换、策略可定制、内存可扩展,多种冷数据淘汰组件,自由组合 存储扩展,冷热数据交换 可自定义冷热数据交换策略 还能提供什么帮助? 04. 降低硬件成本,降低依赖,保证稳定性 同样的性能,需要更少的硬件资源,降低成本 01 核心数据在本地,依赖少,更稳定 02 • 千万级内存对象,GC严重耗时,如何解决? • 复杂的查询场景,内存数据如何高效组织? 复杂的查询场景,内存数据如何高效组织? • 主动式内存缓存,如何保证数据实时性? • 数据太多,内存不够用,如何进行存储扩展? 通过本次分享,可以带来哪些收获? 难点攻克 第二部分 使用内存缓存 数据一致性如何保证? 一致性 01. 缓存如何保证更新,如何与数据库同步 同步、更新 被动方式 缓存过期 定期同步 主动方式 监听数据变化 数据加载,更新 02. 全量数据加载,增量数据监听0 码力 | 48 页 | 6.06 MB | 1 年前3
基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 Mozilla裁员Servo团队 AWS, Huawei, Google, Microsoft, Mozilla… Rust如何保障内存安全? ❑ 内存安全问题产生的主要原因之一是指针别名导致悬空指针 ▪ 手动释放内存或调用析构函数 ▪ 函数返回时发生的自动析构或内存释放 ❑ Rust设计的目标之一是编译时检查指针别名(共享可变引用) ▪ 但一般意义上的指针分析是NP-hard问题 ▪ 智能指针可行,但作为运行时方案,效率低 Unsafe API call Unsafe API access call Rust实际表现如何? ❑ 调研了2020年12月31日前报告的185个内存安全漏洞[TOSEM'21] ▪ Rust在内存安全防护方面效果不错 ▪ 所有的漏洞(除了1个编译器漏洞)都需要unsafe code ▪ 大部分CVEs都是 API soundness的问题(未在可执行程序中发现)0 码力 | 28 页 | 1.55 MB | 1 年前3
Java 应用与开发 - Java 内存模型与分配机制大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 应用与开发 Java 内存模型与分配机制 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 30, 2018 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 学习目标 1. 理解 JVM 内存模型,掌握 JVM 内存构成 2. 理解 程序的运行过程,学会通过调试模式观察内存的 变化 3. 了解 Java 内存管理,认识垃圾回收 4. 建立编程时高效利用内存、避免内存溢出的理念 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 ���� Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 虚拟机(Java Virtual Machine, JVM) ▶ Java 程序运行在 JVM 上,JVM 是程序与操作系统之间的桥梁。 ▶ JVM 实现了 Java 的平台无关性。 ▶ JVM 是内存分配的前提。 类装载子系统 Class文件0 码力 | 44 页 | 818.30 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a也解释了什么是“函数退出阶段” 第32章:代码块和标识符作用域 目录 2 第33章:表达式估值顺序规则 第34章:值复制成本 第35章:边界检查消除 并发编程 第36章:并发同步概述 第37章:通道用例大全 第38章:如何优雅地关闭通道 第39章:其它并发同步技术 - 如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 第51章:Go问答101 第52章:Go技巧101 第53章:更多关于Go的知识 本书由老貘 极的学习态度的Go新手程序员可以在一年内精通Go编程。 那你觉得Go的卖点是什么呢? 我个人的观点是,做为一门静态语言,Go却和很多动态脚本语言一样得灵活是Go的 主要卖点。 节省内存、程序启动快、代码执行速度快和编译速度快合在一块儿是Go的另一个主 要卖点。 虽然这三项是C家族语言的共同特征,但是在Web开发领域,很少有语言同 时拥有这四个特征。 事实上,这就是我当初从Java转到Go进行Web开发的原因。0 码力 | 591 页 | 21.40 MB | 1 年前3
Object Pascal 参考手册(Ver 0.1) 应用程序通常被分成多个源代码模块,我们称它们为单元(unit)。每个程序以一个程序头(heading) 开始,它为程序指定一个名称。在程序头之后是一个可选的 uses 子句,然后是一个由声明和命令语句组 成的块(block)。uses 子句列出了那些链接到程序的单元,这些单元可以被不同的程序共享,并且通常 有自己的 uses 子句。 uses 子句给编译器提供各模块间的依赖信息,因为这些信息是存于模块自身的,所以,Object Overview(概述) 一个程序包括 • 一个程序头(program heading) • 一个 uses 子句(可选),和 • 一个包含声明和命令语句的块(block) 程序头指定程序的名称;uses 子句列出了程序引用的单元;块包含声明和命令语句,当程序运行时, 这些命令将被执行。IDE 期望在一个工程文件(.dpr)中找到以上三种元素。 下面的实例显示了一个叫做 Editor 的程序: and units - 10 - 第 1 行包含程序头;uses 子句从第 3 行到第 6 行;第 8 行是编译器指示字,它把工程的资源文件链 接到程序中;第 10 行到第 14 行包含命令块,程序运行时将执行它们;最后,和所有源文件一样,工程 文件以一个句点(.)结束。 实际上,这是一个典型的工程文件。工程文件通常很短,因为绝大部分的程序逻辑位于单元文件中。 工程文件是自动产生并自动维护的,很少需要手工编辑。0 码力 | 168 页 | 868.25 KB | 1 年前3
尚硅谷大数据技术之Hadoop(生产调优手册)NameNode 内存生产配置 1)NameNode 内存计算 每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块呢? 128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 亿 G MB KB Byte 2)Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m,如果服务器内存 2000m,如果服务器内存 4G,NameNode 内存可以配置 3g。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m 3)Hadoop3.x 系列,配置 NameNode 内存 (1)hadoop-env.sh 中描述 Hadoop 的内存是动态分配的 # The maximum amount of heap to memory size. # export HADOOP_HEAPSIZE_MIN= HADOOP_NAMENODE_OPTS=-Xmx102400m (2)查看 NameNode 占用内存 [atguigu@hadoop102 ~]$ jps 3088 NodeManager 2611 NameNode 3271 JobHistoryServer 2744 DataNode0 码力 | 41 页 | 2.32 MB | 1 年前3
OpenShift Container Platform 4.7 日志记录查看日志记录收集器 Pod 4.2.3. 配置日志收集器 CPU 和内存限值 4.2.4. 日志转发器的高级配置 4.2.5. 如果不使用默认的 Elasticsearch 日志存储,请删除未使用的组件 4.3. 配置日志存储 4.3.1. 将审计日志转发到日志存储 4.3.2. 配置日志保留时间 4.3.3. 为日志存储配置 CPU 和内存请求 4.3.4. 为日志存储配置复制策略 4.3.5 4.1. 配置 CPU 和内存限值 4.4.2. 为日志可视化器节点扩展冗余性 4.5. 配置 OPENSHIFT LOGGING 存储 4.5.1. OpenShift Logging 和 OpenShift Container Platform 的存储注意事项 4.5.2. 其他资源 4.6. 为 OPENSHIFT LOGGING 组件配置 CPU 和内存限值 4.6.1. 配置 配置 CPU 和内存限值 4.7. 使用容忍度来控制 OPENSHIFT LOGGING POD 放置 4.7.1. 使用容忍度来控制日志存储 pod 放置 4.7.2. 使用容忍度来控制日志可视化 pod 放置 4.7.3. 使用容忍度来控制日志收集器 pod 放置 23 23 24 24 24 24 24 24 25 25 26 26 26 27 27 32 32 390 码力 | 183 页 | 1.98 MB | 1 年前3
OpenShift Container Platform 4.8 日志记录. . 4.3. 配置日志存储 4.4. 配置日志可视化工具 4.5. 配置 OPENSHIFT LOGGING 存储 4.6. 为 OPENSHIFT LOGGING 组件配置 CPU 和内存限值 4.7. 使用容忍度来控制 OPENSHIFT LOGGING POD 放置 4.8. 使用节点选择器移动 OPENSHIFT LOGGING 资源 4.9. 配置 SYSTEMD-JOURNALD 本解决了这个问题。(LOG-2640) 在此次更新之前,配置为将日志转发到 Amazon CloudWatch 的集群会将拒绝的日志文件写入到 临时存储,从而导致集群变得不稳定。在这个版本中,CloudWatch 的块备份已被禁用,从而解 决了这个问题。(LOG-2768) 1.6.3. CVE 例 例 1.1. 点 点击 击以展开 以展开 CVE CVE-2020-28915 CVE-2021-40528 Prometheus 警报的作业名称解决了这个问题。 (LOG-1918) 在此次更新之前,日志收集器因为重构组件名称更改而收集自己的日志。这可能会导致收集器处 理自己的日志的潜在反馈循环,这可能会导致内存和日志消息大小问题。在这个版本中解决了这 个问题,它会从集合中排除收集器日志。(LOG-1774) 在此次更新之前,Elasticsearch 会生成错误 Unable to create PersistentVolumeClaim0 码力 | 223 页 | 2.28 MB | 1 年前3
阮一峰 《ECMAScript 6入门》 第三版命令,用来声明变量。它的用法类似于 var ,但是所声明的变 量,只在 let 命令所在的代码块内有效。 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 上面代码在代码块之中,分别用 let 和 var 声明了两个变量。然后在代码块之外 调用这两个变量,结果 let 声明的变量报错, var 声明的变量返回了正确的值。 声明的变量返回了正确的值。 这表明, let 声明的变量只在它所在的代码块有效。 for 循环的计数器,就很合适使用 let 命令。 for (let i = 0; i < 10; i++) { // ... } console.log(i); // ReferenceError: i is not defined 上面代码中,计数器 i 只在 for 循环体内有效,在循环体外引用就会报错。 指向的就是全局的 i 。也就是说,所 有数组 a 的成员里面的 i ,指向的都是同一个 i ,导致运行时输出的是最后一 轮的 i 的值,也就是10。 如果使用 let ,声明的变量仅在块级作用域内有效,最后输出的是6。 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i);0 码力 | 679 页 | 2.66 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 15.6. 引用循环会导致内存泄漏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 程序设计语言的本质实际在于 赋能(empowerment):无论你现在编写的是何种代码, Rust 能让你在更为广泛的编程领域走得更远,写出自信。(这一点并不显而易见) 举例来说,那些“系统层面”的工作涉及内存管理、数据表示和并发等底层细节。从传统角度来 看,这是一个神秘的编程领域,只为浸润多年的极少数人所触及,也只有他们能避开那些臭名 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust “深入” 底层控制的程序员可以使用 Rust,无需时刻担心出现崩溃或安全漏洞,也无需因为 工具链不靠谱而被迫去了解其中的细节。更妙的是,语言设计本身会自然而然地引导你编写出 可靠的代码,并且运行速度和内存使用上都十分高效。 已经在从事编写底层代码的程序员可以使用 Rust 来提升信心。例如,在 Rust 中引入并行是相 对低风险的操作,因为编译器会替你找到经典的错误。同时你可以自信地采取更加激进的优0 码力 | 562 页 | 3.23 MB | 24 天前3
共 793 条
- 1
- 2
- 3
- 4
- 5
- 6
- 80













