内存管理

Linux内存管理(1) -- UMA和NUMA

匿名 (未验证) 提交于 2019-12-02 21:56:30
了解UMA和NUMA 两种架构模型 Ŀ¼ 1.模型起源 2.UMA模型,NUMA模型 2.1.UMA模型 2.2.NUMA模型 1.模型起源 2.UMA模型,NUMA模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 非均匀存储器存取(Nonuniform-Memory-Access,简称NUMA)模型 2.1.UMA模型 2.2.NUMA模型 参考: https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/ 来源:51CTO 作者: Hacker_Albert 链接:https://blog.csdn.net/weixin_41028621/article/details/100185796

Java基础知识点总结

匿名 (未验证) 提交于 2019-12-02 21:53:52
1995 年 MicroSystems 公司 安装 JDK 后产生如下目录: \bin 目录: Java 开发工具,包括 Java 编译器、解释器等 \demo 目录:一些实例程序 \lib 目录: Java 开发类库 \ jre 目录: Java 运行环境,包括 Java 虚拟机、运行类库等 JDK 常用工具: Javac : Java 编译器,用来将 java Bytecode 。 Java : Java 解释器,执行已经转换成 Bytecode 的 java 应用程序。 Jdb : Java 调试器, 用来调试 java 程序。 设置环境变量: ( 有了集成开发环境,现已不再使用) <INSTALL_DIR> \bin; 设置Java的Path,目的是让Java程序设计者在任何环境都可以运行SDK\bin目录下的工具文件,如:javac,java, javadoc等 CLASSPATH= . ; < Other_Applications_Dir >; 设置classpath的目的是让Java虚拟机找到所需要的类库 体现 Java 的 跨平台特性 Java 语言特点 Java 语言简单 Java 是一种面向对象的语言 。和 C++ 类似,具有面向对象的基本特征。 平台无关 性 ( Write Once, Run Anywhere ) Java 既是编译型语言.class

oracle学习篇:四、内存管理

Deadly 提交于 2019-12-02 21:26:52
4 内存管理 4.1 SGA管理 4.1.1 SGA的组成 buffer cache,shared pool,redo log buffer,large pool,java pool,streams pool select * from v$sgainfo; 4.1.2 SGA与共享内存 SGA的设置在Linux/UNIX上和一个操作系统内核参数有关,这个参数是shmmax。 在Solaris上,该参数由/etc/system文件中shmsys:shminfo_shmmax定义;在linux上,该参数由/proc/sys/kernel/shmmax参数定义。 shmmax内核参数定义的是系统运行的单个共享内存段的最大值,如果该参数设置小于SGA设置,那么SGA仍然可以创建成功,但是会被分配到多个共享内存段。 在windows系统中,由于系统采用多线程服务器(所有oracle进程实际上都是一个进程中的线程),所以不存在共享内存的问题,无需进行特殊设置。 shmmax内核参数定义的是系统运行的单个共享内存段的最大值,如果该参数设置小于SGA设置,那么SGA仍然可以创建成功 查看shmmax值: more /porc/sys/kernel/shmmax 查看操作系统版本: cat /etc/redhat-release 查看操作系统发行版号: uname -r ipcs查看共享内存的分配

Delphi的内存管理及内存泄露问题

北城余情 提交于 2019-12-02 15:27:35
这几天因为一个程序长时间运行出现比较严重的内存泄露问题,开始关注了一下内存管理方面的东西,以前也注意内存管理,创建了对象及时释放,但总有忘了处理的情况。 在Delphi中没有自动回收机制,所以一定要及时释放使用的内存,虽然有时小的内存泄露并不会造成太大的问题。 Delphi中检测内存泄露可以使用开源的FastMM( http://sourceforge.net/projects/fastmm/ ),使用很简单,在工程的第一行引用FastMM4即可(注意,一定要在第一个Uses的位置),可以在调试程序时提示内存泄露情况,还可以生成报告。 在Delphi2010中,使用更加简单,只需要在工程开始的位置加上语句: ReportMemoryLeaksOnShutdown := DebugHook<>0; 就可以了,并且在运行时不会出现提示。如果想要生成文件报告,还需要FastMM4,Delphi2010中或许有别的设置可以生成文件报告,没有找到。 可以修改FastMM4Options.inc中的参数开关来修改内存管理的相关设置。 后来在网上又发现了一个说是让Delphi支持自动垃圾回收的东东,很高兴,看了一下: http://www.hpl.hp.com/personal/Hans_Boehm/gc/ 有编译好的,可以支持多种开发语言,也可以支持Delphi,于是测试了一下

第7章:内存管理

末鹿安然 提交于 2019-12-02 14:50:34
一、内存分配方式 1、静态区域分配:在程序编译期间就已经分配好的,例如全局变量、static变量 2、在栈上分配:函数内部的局部变量 3、从堆上分配(动态分配):通过malloc或者new开辟的空间 二、常见的内存错误及其对策 1、内存错误----->解决措施   a、内存未开辟成功,却使用它----->应该用if(NULL == p)或者if(NULL != p)来判断是否开辟成功   b、内存开辟成功,但未初始化就使用----->在内存开辟成功的时候就赋初值   c、内存分配成功也初始化,但操作越过了内存的边界(内存越界):----->   d、忘记释放内存)内存泄漏:----->malloc与free的使用次数一定要相同(new与delete一样,使用次数要相同)   e、释放了内存却继续使用它(野指针):----->释放内存后紧接着将指针设置成null;不要返回栈内存上开辟的空间的地址 总结: 1、用malloc和new申请内存后,应立即检查指针值是否为NULL 2、不要忘记为数组和动态内存赋初值 3、避免数组或指针的下标越界 4、动态内存的申请与释放必须配对,防止内存泄漏 5、用free或delete释放内存之后,立即将指针设置为NULL 三、指针与数组相比 1、同时指向字符串的时候:数组可以改变任意位置的内容,而指针不可以,因为其指向的空间是一个字符串

【原创】(九)Linux内存管理 - zoned page frame allocator - 4

倾然丶 夕夏残阳落幕 提交于 2019-12-02 13:11:53
背景 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 1. 概述 本文将描述 memory compaction ,内存碎片整理技术。 内存碎片分为内碎片和外碎片: 内碎片:内存页里边的碎片; 外碎片:内存页之间的碎片,可能会造成连续物理页面分配失败。 memory compaction 就是通过将正在使用的可移动页面迁移到另一个地方以获得连续的空闲页面的方法。针对内存碎片,内核中定义了 migrate_type 用于描述迁移类型: MIGRATE_UNMOVABLE :不可移动,对应于内核分配的页面; MIGRATE_MOVABLE :可移动,对应于从用户空间分配的内存或文件; MIGRATE_RECLAIMABLE :不可移动,可以进行回收处理; 先来一张 memory compaction 的概况图: 上图对应的是 struct page 的操作,而针对物理内存的操作如下图所示: 在之前的文章中提到过 pageblock ,我们看到图中 zone 区域是以 pageblock 为单位上下扫描的, pageblock

Spark 内存管理

北城以北 提交于 2019-12-02 11:25:07
Spark 内存管理 Spark 执行应用程序时, 会启动 Driver 和 Executor 两种 JVM 进程 Driver 负责创建 SparkContext 上下文, 提交任务, task的分发等。 Executor 负责 task 的计算任务, 并将结果返回给 Driver, 同时需要为需要持久化的 RDD 提供储存。 Driver 端的内存管理比较简单, 这里说的 Spark内存管理针对 Executor 端的内存管理。 Spark 内存管理分为 静态内存管理 和 统一内存管理, Spark1.6 之前使用的是静态内存管理, Spark1.6 之后引入了统一内存管理。 静态内存管理中存储内存、执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的, 但用户可以在应用程序启动前进行配置。 统一内存管理与静态内存管理的区别在于存储内存和执行内存共享同一块空间, 可以互相借用对方的空间。 Spark1.6 及 1.6 之后的版本默认使用的是统一内存管理。 要想使用静态内存可以通过将参数 spark.memory.useLeagacyMode 设置为 true(默认为 false) 使用静态内存管理。 静态内存管理分布图 统一内存管理分布图 reduce 中 OOM(Out Of Memory) 如何处理? 减少每次拉取的数据量 提高 shuffle 聚合的内存比例

Cocos2d-x开发中Ref内存管理

孤人 提交于 2019-12-02 09:58:57
Ref类是Cocos2d-x根类,Cocos2d-x中的很多类都派生自它,例如,我们熟悉的节点类Node也派生自Ref。我们介绍Ref内存管理。 内存引用计数 Ref类设计来源于Cocos2d-iphone的CCObject类,在Cocos2d-x 2.x中也叫CCObject类。因此Ref类的内存管理是参考Objective-C手动管理引用计数(Reference Count)而设计的。 如图所示是内存引用计数原理示意图。 每个Ref对象都有一个内部计数器,这个计数器跟踪对象的引用次数,被称为“引用计数”(Reference Count,简称RC)。当对象被创建时候,引用计数为1。为了保证对象的存在,可以调用retain函数保持对象,retain会使其引用计数加1,如果不需要这个对象可以调用release函数,release使其引用计数减1。当对象的引用计数为0的时候,引擎就知道不再需要这个对象了,就会释放对象内存。 引用计数实例如图所示,我们在ObjA中使用new等操作创建了一个Ref对象,这时候这个对象引用计数为1。然后在OjbB中使用retain函数保持Ref对象,这时引用计数为2。再然后ObjA中调用release函数,这时引用计数为1。在ObjB中调用release函数,这时引用计数为0。这个时候Ref对象就会由引擎释放。 在Ref类中相关函数有:retain()

C语言 _ 内存管理

折月煮酒 提交于 2019-12-02 06:14:41
一、存储模型 1、static ,suto、extern 二、内存管理 1、动态内存 (1)、C/C++定义了4个定义内存区间: 代码区 / 全局变量与静态变量区 / 局部变量区即栈区(字符串常量)/ 动态存储区,即堆区。 (2)、静态储出分配 通常定义变量,编译器在编译时都可以根据该变量的类型知道所需内存 空间的大小,从而系统在适当的适合为他们分配确定的存储空间。 (3)、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置与处理器的指令集中,效率很高,但是分配的内存容量有效。 2、动态存储分配 (1)、有些操作对象只有在程序运行才能确定,这样编译器在编译时就无法为他们预留存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种 方法称为动态存储分配。 — 所有动态存储分配都在堆区中进行。 — 从堆上分配,亦称为动态内存分配。程序在运行的时候用malloc申请任意多少的内存,程序员自己负责在何时用free释放内存。动态内存的生存期有我们决定,使用非常灵活,但问题也最多。 (2)、当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存存储空间,用于存储该变量或对象。当不在使用该变量或则变量时,也就是它的声明周期结束时,要显示释放它所占用的存储空间