背景 压测发现,机器人关闭后,内存没有减下来,初步判断是内存泄露 内存泄露排查 - Review 代码 包括 static 静态变量 extern 全局变量 单例中的容器字段 没有发现异常的地方 内存泄露排查 - 使用 gperftools dump 内存分布情况 gperftools 相关知识可以参考: https://github.com/fananchong/gperftools_sampl...

本文参考周志明老师的《深入理解Java虚拟机》 一.运行时数据区 1.虚拟机栈、本地方法栈、程序计数器是线程私有的。堆和方法区是线程公有的。 2.PC:可以看作是当前线程所执行的字节码的行号指示器。 3.Java虚拟机栈:线程私有。 内部是栈帧(包括:局部变量表,操作数栈,动态连接,方法出口等信息)。每一个方法从执行直至完成的过程,都对应着一个栈帧在虚拟机栈中入栈到出栈的过程。 4.本地方法栈:N...

内存资源是非常有限的。尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源。本文是作者在学习C语言内存管理的过程中做的一个总结。 变量概念: 全局变量(外部变量):出现在代码块{}之外的变量就是全局变量。 局部变量(自动变量):一般情况下,代码块{}内部定义的变量就是自动变量,也可使用auto显示定义。 静态变量:是指内存位置在程序执行期间一直不改变的...

相关文章 Android包管理机制系列 前言 在上一篇文章Android包管理机制(二)PackageInstaller安装APK中,我们学习了PackageInstaller是如何安装APK的,最后会将APK的信息交由PMS处理。那么PMS是如何处理的呢?这篇文章会给你答案。 1.PackageHandler处理安装消息 APK的信息交由PMS后,PMS通过向PackageHandler发送消息...

        在上一篇博客中,我们介绍了TCP协议的协议端格式以及特点。。我们知道TCP是具有可靠性的,其中本文要介绍的TCP的连接管理机制就是保证可靠的一个机制。         在正常情况下,TCP要经过三次握手建立连接、四次挥手断开连接。 一. 连接管...

有关TCP协议的相关知识见:这篇博客         TCP与UDP最大的区别就是TCP保证可靠性数据传输。从TCP与UDP的协议报头就可以看出差别。TCP的协议报头比UDP报头多了很多东西,而多出来的这些都是用于保证数据的可靠性传输的。下面将具体介绍TCP保证可靠传输的机制以及报头中的字段是如何用于可靠性传输机制的。...

动态申请内存

内存管理

  

2020-01-13 00:26:22

输出: 引用几张图: 内存分布 程序内存空间(代码段、数据段、堆栈段) 栈、堆辨析:1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。  2、堆区(heap):由程序员分配释放, 若程序员不释放,程序结束时可能由操作系统回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 brk()和sbrk()函数的使用 堆的...

内存管理

内存管理

  

2020-01-20 11:08:00

一、程序的编译链接过程 1、预处理 主要处理一下几个方面内容: ①宏定义    ②文件包含    ③条件编译    ④去掉注释 2、编译 把源代码转换成相应的汇编语言的过程 3、汇编 把汇编语言转换成二进制代码,即目标程序 4、链接 将多个目标程序连同库文件(静态库、动态库)一起...

vma, anon_vma和anon_vma_chain的联系 本文主要参考了vma, anon_vma和anon_vma_chain的联系这篇文章,结合相关资料,对该文进行了一些改进。 Linux提供了内存映射这一特性,它实现了把物理内存页映射(map)到进程的地址空间中, 以实现高效的数据操作或传输。内核在处理这一特性时, 使用了struct vm_area_struct, struct an...

http://www.coder55.com/article/33206 背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 概述 R...

C++ 动态内存管理

内存管理

  

2020-02-19 05:28:41

C语言动态内存管理 C语言为我们提供标准库函数malloc,realloc,calloc和free进行动态内存管理,我们可以先观察一下这三个函数的函数原型: 我们通过简单的使用这些函数来简述这三个函数各自的特性: malloc:一个参数(所开辟空间的大小),返回值为void*,需与free配对使用,防止内存泄漏。 realloc:可用于第一次开辟空间以及调整动态内存,两个参数(所调整空间的起始位置...

前面几节,我们已经看到了x86的分段和分页硬件单元把逻辑地址转换为线性地址,再由线性地址转换到物理地址的基本原理,那么这几张我们来主要是用来学习,内核是怎么实现页表的创建,本章基于imx6ull和qemu来学习整个过程,其主要内容如下: imx6ull支持段映射方式 内核启动主要概述 内核临时页表 1. 段映射方式 在之前页式存储管理中,我们主要是针对x86处理器来描述虚拟地址到物理地址的转换,对...

内存管理(一)

内存管理

  

2020-03-31 03:27:08

当我们new了一个数组,但是我们delete 的时候却没加 [] ,此时会发生内存泄露??? 这个先说明, 这个不一定会发生内存泄露. 当我们申请一个数组时,如果这个类中没有涉及到动态分配过的内存,或者说这个类的析构函数没有写的必要(如 A 类 ). 此时当我们执行 A* apoint = new A[10]; 这条语句后,分配的内存空间图如下: 这个 cokkie 字段就记录了我们申请了 几个 ...

理解堆栈 1.概念   一个由C/C++编译的程序占用的内存分为以下几个部分 栈区:由编译器自动分配释放,存放函数的参数值,局部变量的值等。 堆区:由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收。 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量、未初始化的静态变量在相邻的另一块区域...

(开始这段别人总结的比较好,我就拿来用了) 1.RVA2FOA 即我们现在知道内存状态下的偏移,需要找到文件状态下的偏移。 步骤如下图: step1:内存中的地址减去内存基址得到偏移,即RVA。 step2:循环遍历节表中各个节的信息,判断在哪个节中。(需要满足:内存偏移+节数据没对齐的大小>image_panyi>内存偏移) step3:找出在哪个节后,减去该节在内存中的偏移(Vir...