垃圾回收的方法| 青训营笔记

Go语言学习(一)|青训营笔记 这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。Go 语言的基础组成有以下几个部分: 说明: 阅读详情

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

垃圾回收和性能 优化

性能优化的层面

屏幕截图 2023-01-19 210519.png 性能优化和软件质量

屏幕截图 2023-01-19 210940.png

自动垃圾回收

  • 动态内存
    • 程序在运行时根据需求动态分配的内存:
  • 自动内存管理(垃圾回收):由程序语言的运行时系统回收动态内存
    • 避免手动内存管理,专注于实现业务逻辑
    • 保证内存使用的正确性和安全性:double-freeproblem,use-after-freeproblem
  • 三个任务

    • 为新对象分配空间
    • 找到存活对象
    • 回收死亡对象的内存空间

      相关概念

  • Mutator:业务线程,分配新对象,修改对象指向关系

  • Collector:GC线程,找到存活对象,回收死亡对象的内存空间
  • SeriaI GC:只有一个collector
  • Parallel GC:支持多个collectors同时回收的GC算法
  • Concurrent GC:mutator(s)和collector(s)可以同时执行
    • collector必须感知对象指向关系的变化

屏幕截图 2023-01-19 213848.png

  • 评价GC算法

    • 安全性(Safety):不能回收存活的对象基本要求

    • 吞吐率(Throughput):1-(GC时间/花在GC上的时间)* 程序执行总时间

    • 暂停时间(Pausetime):st0Ptheworld(STW)业务是否感知
    • 内存开销(Spaceoverhead)GC元数据开销
  • 追踪垃圾回收(Tracing garbage collection)
  • 引用计数(Referencecounting)

    追踪垃圾回收

  • 对象被回收的条件:指针指向关系不可达的对象

  • 标记根对象
    • 静态变量、全局变虽、常量、线程栈等
  • 标记:找到可达对象
    • 求指针指向关系的传递闭包:从根对象出发,找到所有可达对象
  • 清理:所有不可达对象
    • 将存活对象复制到另外的内存空间(CopyingGC)
    • 将死亡对象的内存标记“可分配“(Mark-sweepGC)
    • 移动并整理存活对象(Mark-compactGC)
  • 根据对象的生命周期,使用不同的标记和清理策略

屏幕截图 2023-01-19 214947.png

屏幕截图 2023-01-19 215048.png

屏幕截图 2023-01-19 215122.png

屏幕截图 2023-01-19 215208.png

分代GC(Generational GC)

  • 分代假说(Generationalhypothesis):mostobjectsdieyoung
  • lntuition:很多对象在分配出来后很快就不再使用了
  • 每个对象都有年龄:经历过GC的次数
  • 目的:对年轻和老年的对象,制定不同的GC策略,降低整体内存管理的开销
  • 不同年龄的对象处于heap的不同区域
    • 年轻代(Younggeneration)
    • 常规的对須分配
    • 由于存活对象很少,可以采用copyingcollection
    • GC吞吐率很高
    • 老年代(Oldgeneration)
    • 对象趋向于一直活着,反复复制开销较大
    • 可以采用mark-sweepcollection

屏幕截图 2023-01-19 215715.png

引用计数

  • 每个对象都有一个与之关联的引用数目
  • 对象存活的条件:当且仅当引用数大于0
  • 优点

    • 内存管理的操作被平摊到程序执行过程中

    • 内存管理不需要了解runtime的实现细节:C++智能指针(smartpointer)

  • 缺点

    • 维护引用计数的开销较大:通过原子操作保证对引用计数操作的原子性和可见性
    • 无法回收环形数据结构_weakreference
    • 内存开销:每个对象都引入的额外内存空间存储引用数目

    • 回收内存时依然可能引发暂停

屏幕截图 2023-01-19 221246.png

(五)C++自制植物大战僵尸游戏LoadingScene的实现讲解 游戏启动后就会立即切换到游戏加载场景中。只有游戏资源文件加载完成后,才能进入游戏。Loadingscene类继承Cocos2d-x中的Scene父类,表明Loadingscene是一个场景类。切换到LoadingScene场景中,首先会创建该场景,会调用函数,在该函数中调用自己定义的方法实现指定功能。代码文件的位置如下图所示。 阅读详情

相关推荐

不用加速器!Google Earth Pro登录失败自救手册:从服务器连接到地图加载的完整排错流程

本文详细解析了Google Earth Pro登录失败的常见问题及解决方案,包括服务器连接失败、地图加载异常等。通过基础排查、内置修复工具使用和高级配置调整,帮助用户无需加速器即可解决启动问题、黑屏和转圈圈等困扰,提升软件使用体验。

weixin_29227425的博客 486

Go快速上手之基础语法 | 青训营笔记

1. 本文旨在介绍Go语言的特性,配置,以及一些基础语法:zap:。 2. 在介绍这些的时候,会结合我这个计算机小白在实践的过程中遇到的一些问题与个人理解:slightly_smiling_face:。

物联黄同学的博客 1938

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

JavaScript 进阶知识点概述| 青训营笔记

第一部分: 垃圾回收 在编程中,垃圾回收是一种自动内存管理机制,它负责检测和清除不再使用的对象,以释放内存资源并提高程序的性能。JavaScript作为一种高级编程语言,也具有自己的垃圾回收机制。 1. 什么是垃圾回收? 垃圾回收是一种内存管理技术,它通过识别不再使用的对象,并自动释放它们所占用的内存空间。这样可以避免内存泄漏和资源浪费的问题。垃圾回收器负责追踪程序中的对象引用,并确定哪些对...

kilig_CSM的博客 138

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 538

主流频率合成技术方案深度解析与选型指南

本文深度解析了主流频率合成技术方案,包括直接模拟合成、直接数字合成(DDS)、锁相环合成(PLL)及混合方案,并提供了选型指南。通过实际案例和性能指标对比,帮助工程师根据相位噪声、杂散抑制和切换速度等关键指标选择最适合的技术方案,适用于通信系统、雷达信号处理和精密仪器仪表等领域。

weixin_30231327的博客 312

【青训营】性能优化和自动内存管理

提高软件系统处理能力,减少不必要消耗,充分利用计算机算力业务层优化针对特定场景和具体问题容易获得较大收益语言运行时优化面向全公司的优化,非特定场景解决更通用的性能问题考虑更多场景在优化时需要根据数据驱动,比如使用自动化性能分析工具–pprof。依靠数据优化而非主观猜测,并且首先优化最大的瓶颈软件质量至关重要保证接口稳定的情况下改进具体实现测试驱动:测试用例覆盖尽可能多的场景,方便回归文档:做了什么,没错什么,能达到什么效果隔离:通过选型控制是否开启优化。

weixin_45434953的博客 830

YOLOv11的元学习(MAML)few-shot适配-(5样本内快速适应新类别)

本文提出了一种基于元学习和YOLOv11的少样本目标检测方法。首先介绍了元学习的核心概念和MAML算法原理,分析了YOLOv11的架构改进及其在少样本检测中的适用性。针对少样本检测面临的过拟合、特征混淆和定位困难等挑战,提出了基于MAML的解决方案。在实现方面,详细阐述了环境配置、数据预处理和任务采样策略,构建了支持N-way K-shot任务的数据加载器。实验表明,该方法相比传统微调策略可显著提升小样本场景下的检测性能。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 604

Go语言上手-基础语言 | 青训营笔记

今天第一天正式学习go语言,go跟c++真的很像,非常简洁,有语言基础的话确实学的很快。青训营课程总结了许多常用go语法,非常便于快速掌握Go语言

一只小逸白 1451

OpenClaw 2026 路线图详解:3 大协作能力升级与社区贡献增长 62% 的实证分析

介绍 OpenClaw 2026 如何通过上下文锚定(Context Anchoring)、协作质量定义和责任边界机制,将 AI 编程工具从单点补全升级为嵌入代码生命周期的协作对齐系统,并详解 `.openclaw/config.yaml` 中 `context_anchor` 配置的实操方法与效果

weixin_42545292的博客 385

把财务与管理会计装进一张表:读懂 S/4HANA 的 ACDOCA

别慌,这反而是设计所需。只是大量历史上为汇总、加速而建的索引与汇总表被淘汰或改造,很多被兼容视图 compatibility views 替代,通过视图去 ACDOCA 或 ACDOCT 取数,从而保证老代码还能 SELECT 到数据,但失去写权限。它把原来分散在多张表里的信息整合到一起,例如总账、固定资产、物料账、盈利能力分析 CO-PA、成本控制等维度,发布过的资料多次强调这一点。其二,查询必须带上高选择性的条件,尤其是 RLDNR、RBUKRS、GJAHR 这三个维度,能大幅降低列存扫描的代价。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 957

Go语言上手(一) | 青训营笔记

这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记。 文章目录语法速览基础语法第一:类型第二:内置库部分json库的使用时间库的使用字符串和数字互转os相关信息实战项目猜谜游戏(pass,过于简单)在线词典第一步:抓包得得到数据进行分析第二步:利用工具生成代码curl请求直接转为go的请求代码JSON转Golang Struct第三步:更改代码实现功能homeworkSOCKS5代理服务器SOCKS5简单介绍SOCKS5代理原理具体实现v1-简单echo服务器v2-实现SOCKS5的握手阶段v3

CppYyds的博客 847

异构图中的注意力机制网络:节点级别和语义级别的注意力(Python实现)

在本文中,我们介绍了如何使用Python实现异构图中的节点级别注意力和语义级别注意力。通过语义级别注意力,我们可以根据节点的语义信息对节点进行加权聚合。在本文中,我们将介绍如何使用Python实现异构图中的注意力机制网络,包括节点级别的注意力和语义级别的注意力。最后,我们使用注意力权重对节点特征进行加权聚合,得到聚合后的节点表示。然后,将聚合后的节点表示传递给语义级别注意力模型,根据节点的语义信息进行加权聚合,得到最终的表示。函数中,首先使用节点级别注意力模型对节点特征进行聚合,得到聚合后的节点表示。

HackNebulaZ的博客 487

字节跳动青训营笔记01

大家好,这里是我参加字节跳动【第五期青训营】的第一篇笔记。一小时多的课程里实现了快速入门Go语言,简要介绍了Go的优点,语法,包括与C语言的异同,以及map、切片等常用的数据结构;后半节课程主要介绍了三个实际案例。

XXXHHHNNN的博客 801

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Go语言基础-基础语法 | 青训营笔记

本文主要介绍Go语言的基础语法,除了上课内容外,还包括我看的其他资料以及视频。

weixin_57209831的博客 214

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

字节青训营第一课之go语言入门的笔记和总结

1Go语言简介 由于Go语言有语法简单、高性能等特点,因此国内外各大公司如谷歌、腾讯、字节等都在使用,特别是字节全面拥抱Go,原因是最初因性能问题将Python换成Go,而Go学习简单,性能高,且部署简单。总的来说Go语言特性如下: 语法简单、学习曲线平缓 高性能、高并发 丰富的标准库 完善的工具链 静态链接 快速编译 跨平台 垃圾回收 个人而言,因我是C++出身,对C++复杂的语法感到麻木,因此特别喜欢Go语法简单、上手快的特点,几小时就能上手,再加上Go天生高并发,有

woodslay的博客 1626

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

四、高性能 Go 语言发行版优化与落地实践 青训营笔记

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

低调的骏马 605

Go语言初上手(一) 环境配置与基础语法 | 青训营

课上很详细的讲了Go的基本语法,以及再加上自己阅读Go语言圣经的一些总结,得出了这一篇文章,感觉跟JS和c/c++还是有很多共通之处的。

cos的博客 2045

后端-高性能 Go 语言发行版优化与落地实践

青训营 性能优化-提高软件系统处理能力,减少不必要的消耗。 为什么要做性能优化? 带来用户体验的提升 降低成本,提高效率 1自动内存管理 1.1自动内存管理 自动内存管理(垃圾回收):由程序语言的运行时系统管理动态内存 三个任务 为新对象分配空间 找到存活对象 回收死亡对象的内存空间 相关概念: 1.2 追踪垃圾回收 对象被回收的条件:指针指向关系不可达的对象 标记根对象 静态变量、全局变量、常量、线程栈等 标记:找到可达对象 从根对象出发,找到所有可达对象 清理:所有不可达对象 Copyi.

weixin_40852277的博客 271

为什么很多公司都开始使用Go语言了?

最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。接近尾期了,是时候做一些总结了,那从什么地方开始呢?那就从我们为什么要选择Go语言开始吧~🌐项目地址📝项目文档越来越多的互联网大厂开始使用Go语言了,譬如腾讯、美团、滴滴、百度、Google、bilibili...还有最初使用Python的字节跳动,甚至已经全面拥向Go了。这么多国内外首屈一指的公司,都在开始使用它了,它到底有什么优势呢?这就得谈谈它的一些优势了。

fzlhz的博客 574

为什么很多公司都开始使用Go语言了

越来越多的互联网大厂开始使用Go语言了,譬如还有最初使用Python的字节跳动,甚至已经全面拥向Go了。这么多国内外首屈一指的公司,都在开始使用它了,它到底有什么优势呢?这就得谈谈它的一些优势了。ps:当然了,还有Go-To-Byte的成员,想要学习go语言,并且用它完成青训营的大项目呐~

2509_93923260的博客 222

Go语言基础学习

。

m0_62339838的博客 334

Go并发编程实战:从Goroutine、Channel到高并发架构设计

并发编程是现代软件工程的核心概念,它指的是程序能够同时处理多个任务的能力,旨在提升系统资源利用率和响应速度。其原理在于通过任务分解与调度,在单核或多核硬件上实现逻辑或物理的并行执行。这一技术价值在于能够有效解决高并发连接、提升吞吐量等工程难题,广泛应用于网络服务、数据处理和微服务等场景。Go语言通过其独特的Goroutine和Channel机制,将这一复杂范式简化。Goroutine作为轻量级线程,由运行时在用户态调度,其极低的创建开销使得创建成千上万个并发单元成为可能,完美应对C10K问题。Channel

weixin_33721427的博客 352
下一篇: 框架| 青训营笔记
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值