内存管理

程序员需要了解的硬核知识之磁盘

亡梦爱人 提交于 2019-12-03 10:05:26
程序员需要了解的硬核知识之磁盘 https://www.cnblogs.com/cxuanBlog/p/11776310.html 此篇文章是 《程序员需要了解的硬核知识》系列第四篇,历史文章请戳 程序员需要了解的硬核知识之内存 程序员需要了解的硬核知识之CPU 程序员需要了解的硬核知识之二进制 我们大家知道,计算机的五大基础部件是 存储器 、 控制器 、 运算器 、 输入和输出设备 ,其中从存储功能的角度来看,可以把存储器分为 内存 和 磁盘 ,内存我们上面的文章已经介绍过了,那么此篇文章我们来介绍一下磁盘以及内存和磁盘的关系。 认识磁盘 首先,磁盘和内存都具有存储功能,它们都是存储设备。区别在于,内存是通过 电流 来实现存储;磁盘则是通过 磁记录技术 来实现存储。内存是一种高速,造假昂贵的存储设备;而磁盘则是速度较慢、造假低廉的存储设备;电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。内存是属于 内部存储设备 ,硬盘是属于 外部存储设备 。一般在我们的计算机中,磁盘和内存是相互配合共同作业的。 一般内存指的就是主存(负责存储CPU中运行的程序和数据);早起的磁盘指的是软磁盘(soft disk,简称软盘),就是下面这个 (2000年的时候我曾经我姑姑家最早的计算机中见到过这个,当时还不知道这是啥,现在知道了。) 如今常用的磁盘是硬磁盘(hard disk,简称硬盘)

2019-2020-1学期 20192418 《网络空间安全专业导论》第五周学习总结

我怕爱的太早我们不能终老 提交于 2019-12-03 09:45:51
这周的自学内容为操作系统和文件系统及目录。通过这周的学习,我初步了解到了操作系统管理计算机资源的方法。以下是我认为比较重要的知识点。 应用软件是帮助我们解决现实世界问题的程序。 系统软件是管理计算机系统并于硬件进行交互的程序。 操作系统是管理计算机资源并为系统交互提供界面的系统软件。 任何时候只有一个操作系统在控制计算机。 多道程序设计是同时在主存中驻留多个程序,由他们竞争cpu的技术。 内存管理是了解主存中载有多少个程序以及他们的位置的动作。 进程是程序执行过程中的动态表示法。 进程管理是了解活动进程的信息的动作。 cpu调度是确定主存中的那个进程可以访问cpu以便执行的动作。 分时是多个交互用户同时共享cpu时间的系统。 虚拟机是分时系统创建的每个用户都有专用机器的假象。 主机是一个大型的多用户计算机,通常与早期的分时系统相关。 哑终端是在早期的分时系统中用户用于访问主机的一套显示器和键盘。 实时系统是应用程序的特性决定了响应时间至关重要的系统。 响应时间是收到信号和生成响应之间的延迟时间。 逻辑地址是对一个存储值的引用,是相对与引用它的程序的。 物理地址是主存储设备中的真实地址。 地址联编是逻辑地址和物理地址间的映射。 单块内存管理是把应用程序载入一段连续的内存区域的内存管理方法。 固态分区法是把内存分成特定数目的分区以载入程序的内存管理方法。

操作系统内存管理机制、虚拟内存、python垃圾回收机制

久未见 提交于 2019-12-03 09:24:35
什么是分页机制? 定义:逻辑地址和物理地址分离的内存分配管理方案 程序逻辑地址划分为固定大小的页(Page) 物理地址划分为同样大小的帧(Frame) 通过页表对应逻辑地址和物理地址 分段机制 目的: 分段是为了满足代码的逻辑需求(更具体的建议去搜索下) 数据共享,数据保护,动态链接等。 通过段表实现逻辑地址和物理地址的映射关系。 每个段内部是连续的内存分配,段和段之间是离散分配的。 分页和分段的区别 页是出于内存利用率的角度提出的离散分配机制(为了更高效的使用内存,减少内存碎片)。 段是出于用户角度,用于数据保护、数据隔离等用途的管理机制。 页的大小是固定的,由操作系统决定; 段的大小是不固定的,由用户程序来决定。 什么是虚拟内存。 定义:把一部分暂时不用的内存信息存放在硬盘上。 局部性原理,程序运行的时候只有部分必要的信息装入内存。 内存中暂时不需要的内容放在硬盘上。 系统似乎提供了比实际内存大的多的内存容量,称之为虚拟内存。 什么是内存抖动(颠簸) 定义: 本质是频繁的页调度行为 频繁的页调度,进程不断产生缺页中断。 置换(放到虚拟内存中)一个页后,又不断地需要这个页。 运行程序太多;页面替换策略不好。 终止进程或者增加物理内存。 python的垃圾回收机制原理。 只要使用了引用计数(缺点:循环引用无法 引用计数:python的C语言实现的时候,每个对象都有几个字段

iOS开发中的内存管理机制浅谈

北城以北 提交于 2019-12-03 08:46:13
iOS开发中的有关内存管理 一、前引 随着移动设备的内存越来越大,程序员也已经度过了为了那一两M的内存在系统的抽丝剥茧的年代,对于JAVA的开发者,对内存更是伸手即取,并且从不关心什么时候还回去。但是,程序的掌控度对程序员来说是至关重要的,任何语言的内存管理机制的初衷也是在有限的空间里完成最精致的逻辑。 二、 Xcode工程设置ARC ARC是xcode5中引入的自动引用计数,其原理与MRC是一样,只是系统帮助我们添加了retain和release。现在在xcode中新建的项目默认都是ARC的环境,我们可以通过设置其为MRC。 在BuildSettings中搜索ARC: 将下面的参数设置为NO,默认是YES。 这时项目工程的环境就变成了MRC。 三、项目中实现MRC和ARC混编 现实中的许多旧的项目,还有一些比较老的第三方库,可能都是采用MRC环境编写的,我们在对其进行扩展或者做新项目的兼容的时候,可以在xcode中对其进行混编。 选择:target->build phases->compile sources 如果工程是ARC,要混编MRC的文件,我们选中compiler flags,后面设置为-fno-objc-arc 如果工程是MRC,要混编ARC文件,我们在后面设置-fobjc-arc 四、IOS内存管理机制基本原理 无论你是只注重于代码逻辑,将内存交给ARC的新时代程序员

【操作系统之十】内存分页管理与swap

拜拜、爱过 提交于 2019-12-03 04:54:16
一、虚拟内存 电脑里内存分内存条(这里我们叫物理内存)和硬盘,内存条保存程序运行时数据,硬盘持久保存数据。那么虚拟内存是什么? 程序运行会启动一个进程,进程里有程序段、全局数据、栈和堆,这些都会加载到内存里,每一部分都有对应的内存地址,进程就是一直在处理这些地址中数据。 然而在Linux下,进程不能直接读写内存地址。 进程中能访问的地址,只能是虚拟内存地址(virtual memory address)。 操作系统会把虚拟内存地址翻译成真实的内存地址。 这种内存管理方式,称为虚拟内存(virtual memory)。 特点 1、虚拟内存地址和物理内存地址类似,都是为数据提供位置索引; 2、虚拟内存地址和物理内存地址通过映射关系来关联; 3、不同进程都有自己的一套虚拟内存地址,用来给自己的进程空间编号; 4、进程的虚拟内存地址相互独立。因此,两个进程空间可以有相同的虚拟内存地址,如0x10001000。 5、应用程序的数据读写操作的是虚拟地址,对物理内存地址一无所知。 6、程序中表达的内存地址,也都是虚拟内存地址。 7、进程对虚拟内存地址的操作,会被操作系统翻译成对某个物理内存地址的操作。 优势: 1、借助虚拟内存地址,操作系统可以保障进程空间的独立性,不同进程就不可能相互篡改对方的数据,进程出错的可能性就大为减少。 2、有了虚拟内存地址,内存共享也变得简单

程序员需要了解的硬核知识之磁盘

狂风中的少年 提交于 2019-12-03 04:40:52
此篇文章是 《 程序员 需要了解的硬核知识》系列第四篇,历史文章请戳 程序员需要了解的硬核知识之内存 程序员需要了解的硬核知识之CPU 程序员需要了解的硬核知识之二进制 我们大家知道,计算机的五大基础部件是 存储器 、 控制器 、 运算器 、 输入和输出设备 ,其中从存储功能的角度来看,可以把存储器分为 内存 和 磁盘 ,内存我们上面的文章已经介绍过了,那么此篇文章我们来介绍一下磁盘以及内存和磁盘的关系。 认识磁盘 首先,磁盘和内存都具有存储功能,它们都是存储设备。区别在于,内存是通过 电流 来实现存储;磁盘则是通过 磁记录技术 来实现存储。内存是一种高速,造假昂贵的存储设备;而磁盘则是速度较慢、造假低廉的存储设备;电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。内存是属于 内部存储设备 ,硬盘是属于 外部存储设备 。一般在我们的计算机中,磁盘和内存是相互配合共同作业的。 一般内存指的就是主存(负责存储CPU中运行的程序和数据);早起的磁盘指的是软磁盘(soft disk,简称软盘),就是下面这个 (2000年的时候我曾经我姑姑家最早的计算机中见到过这个,当时还不知道这是啥,现在知道了。) 如今常用的磁盘是硬磁盘(hard disk,简称硬盘),就是下面这个 程序不读入内存就无法运行 在了解磁盘前,还需要了解一下内存的运行机制是怎样的,我们的程序被保存在存储设备中

程序员需要了解的硬核知识之磁盘

 ̄綄美尐妖づ 提交于 2019-12-03 04:06:20
此篇文章是 《程序员需要了解的硬核知识》系列第四篇,历史文章请戳 程序员需要了解的硬核知识之内存 程序员需要了解的硬核知识之CPU 程序员需要了解的硬核知识之二进制 我们大家知道,计算机的五大基础部件是 存储器 、 控制器 、 运算器 、 输入和输出设备 ,其中从存储功能的角度来看,可以把存储器分为 内存 和 磁盘 ,内存我们上面的文章已经介绍过了,那么此篇文章我们来介绍一下磁盘以及内存和磁盘的关系。 认识磁盘 首先,磁盘和内存都具有存储功能,它们都是存储设备。区别在于,内存是通过 电流 来实现存储;磁盘则是通过 磁记录技术 来实现存储。内存是一种高速,造假昂贵的存储设备;而磁盘则是速度较慢、造假低廉的存储设备;电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。内存是属于 内部存储设备 ,硬盘是属于 外部存储设备 。一般在我们的计算机中,磁盘和内存是相互配合共同作业的。 一般内存指的就是主存(负责存储CPU中运行的程序和数据);早起的磁盘指的是软磁盘(soft disk,简称软盘),就是下面这个 (2000年的时候我曾经我姑姑家最早的计算机中见到过这个,当时还不知道这是啥,现在知道了。) 如今常用的磁盘是硬磁盘(hard disk,简称硬盘),就是下面这个 程序不读入内存就无法运行 在了解磁盘前,还需要了解一下内存的运行机制是怎样的,我们的程序被保存在存储设备中,通过使用

怎样查出SQLServer的性能瓶颈

眉间皱痕 提交于 2019-12-03 03:32:06
怎样查出SQLServer的性能瓶颈 --王成辉翻译整理,转贴请注明出自微软BI开拓者[url]www.windbi.com[/url] --原帖地址 如果你曾经做了很长时间的DBA,那么你会了解到SQLServe的性能调优不是一个精密的科学。即使是,对于为最佳的性能找到最佳的配置也是很困难的。这是因为对于调优来说很少东西是绝对的。例如,一个性能调优可能对某一方面有用,可是却会影响其他的性能。 我曾经做过DBA,在最后7年的日子里,我总结了一套SQLServer调优的清单。当第一次进行SQLServer性能调优的时候,可以用它来作为一个向导。我经常被邀请去检查SQLServer并提供一些性能方面的建议。直到现在,我还没有真正写下一个贯穿整个性能调优过程的方案。但是当我做了越来越多的性能调优的咨询工作后,我现在决定花点时间整理出来。你将会发现它是很有用的,就象我发现对我的用处一样. SQLServer性能监控 这套性能优化的清单将至少准科学的帮助你找出你的SQLServer任何明显的性能问题。说是这样说,SQLServer的性能调优仍然是很困难的。我试图用这套清单去找出“容易”的sqlserver性能问题,困难的留待稍后。我这样做是因为很容易将容易和困难的的性能调优问题搞混。通过列出一个“容易”的性能调优范围,就很容易的将这些问题解决,一旦解决了这些容易的问题

JVM内存管理――类加载机制,内存管理

匿名 (未验证) 提交于 2019-12-03 00:34:01
Java虚拟机内存结构(JVM的内存区域划分) https://blog.csdn.net/hxpjava1/article/details/55189077 Java类加载机制 https://blog.csdn.net/justloveyou_/article/details/72466105 类的初始化与实例化 Java类加载的方式:类加载器、双亲委派机制 Jvm内存管理 https://blog.csdn.net/SEU_Calvin/article/details/51892567 一个.java文件在编译后会形成相应的一个或多个class文件(若一个类中含有内部类,则编译后会产生多个class文件),但这些class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能被运行和使用。  虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 Java中,类的加载和链接是在程序运行期间完成的,虽然带来一些性能开销,但是提供了高度灵活性。例如面向接口编程思想在Java中的使用,就是基于这个特性 文章来源: JVM内存管理――类加载机制,内存管理

Lua内存泄露检查和性能检测工具

匿名 (未验证) 提交于 2019-12-03 00:32:02
1. ToLua#的编译 之前的博客有提到过,我们使用的是ToLua#作为Unity引擎和Lua之间的桥接工具,本文记录的集成工具都是在C层进行的,因此要编译自己的ToLua#。 ToLua#的源码地址是: https://github.com/topameng/tolua_runtime ,编译流程可以参考其wiki文档,不过这部分的过程记录的不太详细,本部分基于wiki文档和自己在Windows以及Mac OS上的编译过程进行一些整理,记录整个过程和遇到的问题如下: 安装msys2-x86_64-20161025.exe工具,Web地址: http://msys2.github.io/ 。 为msys2安装gcc,由于原始的下载地址我本地下载非常慢而且出错,建议添加国内的镜像地址: 编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686 编辑 /etc/pacman.d/mirrorlist.mingw64 ,在文件开头添加: Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64 编辑 /etc/pacman.d/mirrorlist.msys ,在文件开头添加