内存碎片

性能监视器- Performance Monitor

时间秒杀一切 提交于 2020-01-29 13:53:27
转载: http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题,因此,今天给出Windows 性能监视器的一些基本指标(CPU,内存,硬盘参数),希望对大家将来优化和分析问题提供帮忙。 Windows -Processor 指标名称 指标描述 指标范围 指标单位 CPU利用率 (% Processor Time) % Processor Time指处理器执行非闲置线程时间的百分比。这个计数器设计成用来作为处理器活动的主要指示器。它通过在每个时间间隔中衡量处理器用于执行闲置处理线程的时间,并且用100%减去该值得出。可将其视为范例间隔用于做有用工作的百分比。 根据应用系统情况,在80%±5%范围内波动为宜。过低,则服务器CPU利用率不高;过高,则CPU可能成为系统的处理瓶颈。 % 中断率 (Interrupts/sec.) 每秒钟设备中断处理器的次数。在完成一个任务或需要注意时,装置会发出中断讯号给处理器。可以产生中断的装置包括系统定时器、鼠标、数据通讯联机、网络卡以及其它的外部装置。在中断过程中,一般的执行绪执行将被暂停,而且一个中断可以使处理器切换到另一个具有较高优先等级的执行绪

内存回收机制

我的未来我决定 提交于 2020-01-27 22:55:55
JS引擎V8的内存回收机制与内存限制(标记清除法) 原创真的137 最后发布于2019-03-12 13:48:37 阅读数 166 收藏 展开 在Node中通过JavaScript使用内存时会发现只能使用部分呢内存(64位下位1.4GB,32位系统下位0.7GB),这样的限制使得Node无法操作大内存对象。造成这个问题的原因在于Node基于V8构建,所以在Node中使用的JavaScript对象基本上都是通过V8自己的方式来进行分配和管理的。 在V8中,所有的JavaScript对象都是通过堆来分配的。当我们在代码中声明变量并赋值的时候,所使用的对象就会分配在堆中。如果已申请的堆空闲内存不够分配新的对象,将继续申请堆内存,直到堆的大小超过V8的限制为止。V8限制堆大小的原因在于V8的垃圾回收机制的限制。 V8的垃圾回收机制 V8主要的垃圾回收算法 V8的垃圾回收策略主要基于分代式垃圾回收机制 (ps:本文参考《深入浅出Nodejs》) 1、V8的内存分代 在V8中,主要将内存分为新生代和老生代。新生代中的对象位存活时间较短的对象,老生代中的对象为存活时间较长或者常驻内存的对象。 新生代和老生代的内存空间在一开始就是指定的。 2、Scavenge算法 在分代的基础上,新生代中的对象主要通过Scavenge算法进行垃圾回收。 Scavenge的具体实现中,主要采用了Cheney算法。

关于 /proc/sys/net/ipv4/下 文件的详细解释

瘦欲@ 提交于 2020-01-27 01:46:17
关于 /proc/sys/net/ipv4/下 文件的详细解释: 1) /proc/sys/net/ipv4/ip_forward 该文件表示是否打开IP转发。 0,禁止 1,转发 基本用途:如VPN、路由产品的利用; 出于安全考虑,Linux系统 默认是禁止数据包转发 的。所谓 转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包 。这通常就是路由器所要实现的功能。 配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能 [root@xuegod70 ~]# less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。 [root@xuegod70 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward 修改文件内容, 重启网络服务或主机后效果不再 。若要其自动执行,可将命令echo "1" > /proc/sys/net/ipv4/ip_forward 写入脚本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network脚本中添加 FORWARD_IPV4="YES" 2) /proc/sys/net/ipv4/ip_default_ttl

Java 垃圾回收

跟風遠走 提交于 2020-01-26 10:31:58
垃圾回收算法: 第一步,确认垃圾的步骤 1.引用计数法 就是在程序运行过程中,当一个变量被引用的时候,对这个变量进行计数,被引用一次的时候,这个时候这个变量的计数器就加一,当这个对象的引用被释放了不进行引用了,此时计数器就减一,当计数器为0的时候,此时进行垃圾回收,回收这个变量 这种垃圾回收算法, 优点: 实现简单,使用的过程比较方便,当进行垃圾回收只需要关注计数器的情况,不需要进行全局进行扫描 ,回收效率高。 缺点: 需要维护计数器,每一次的变量引用都要去相应修改对应的计数器,导致性能的下降。 加大对内存的消耗,去维护计数器 最大的问题就是无法解决循环引用的问题 2.根搜索算法(这个我自己方便记)。(可达性分析算法) 这种算法是,实在解决循环引用的情况,就是 我们开启全局搜索的形式,采用树的形式,进行搜索,进行遍历,从根节点进行出发,找到从根节点无法到达的节点,进行回收, 优点: 解决了循环引用的问题,实现了垃圾回收算法的可用性, 缺点: 需要进行全局扫描,影响程序的性能 第二步:进行垃圾的回收 1.标记-清除算法 标记清除算法:是最基础的一种垃圾回收算法, 对可以回收的对象进行标记,然后把对应标记的对象进行回收,这种算法的最大的问题就是,内存的碎片。进行垃圾回收后,导致内存的存储并不是连续的。假如 剩余的内存的大小为1M,但是此时因为内存不是连续的,我用一个Arraylist

JVM介绍(入门知识)

◇◆丶佛笑我妖孽 提交于 2020-01-26 00:17:25
Java 虚 拟 机 (JVM) 是可运行 Java 代 码 的假想 计 算机。只要根据 JVM 规 格描述将解 释 器移植到特定的 计 算机上,就能保 证经过编译 的任何 Java 代 码 能 够 在 该 系 统 上运行。本文首先 简 要介 绍 从 Java 文件的 编译 到最 终执 行的 过 程,随后 对 JVM 规 格描述作一 说 明。       一 .Java 源文件的 编译 、下 载 、解 释 和 执 行    Java 应 用程序的 开发 周期包括 编译 、下 载 、解 释 和 执 行几个部分。 Java 编译 程序将 Java 源程序翻 译为 JVM 可 执 行 字 节码 。 这 一 编译过 程同 C/C++ 的 编译 有些不同。当 C 编译 器 编译 生成一个 对 象的代 码时 , 该 代 码 是 为 在某一特定硬件平台运行而 产 生的。因此,在 编译过 程中, 编译 程序通 过查 表将所有 对 符号的引用 转换为 特定的内存偏移量,以保 证 程序运行。 Java 编译 器却不将 对变 量和方法的引用 编译为 数 值 引用,也不确定程序 执 行 过 程中的内存布局,而是将 这 些符号引用信息保留在字 节码 中,由解 释 器在运行 过 程中 创 立内存布局,然后再通 过查 表来确定一个方法所在的地址。 这样 就有效的保 证 了 Java 的可移植性和安全性。   

JVM(JAVA虚拟机)

↘锁芯ラ 提交于 2020-01-26 00:16:35
Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。   一.Java源文件的编译、下载、解释和执行   Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。   运行JVM字节码的工作是由解释器来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中

Java编译器、JVM、解释器

徘徊边缘 提交于 2020-01-26 00:15:51
Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。      一.Java源文件的编译、下载 、解释和执行   Java应用程序的开发周期包括编译、下载 、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行的字节码。这一编译过程同C/C++ 的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。      运行JVM字节码的工作是由解释器来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时

java - GC垃圾收集器详解(三)

妖精的绣舞 提交于 2020-01-25 22:57:35
以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集必须使用单个eden+S0+S1进行复制算法 老年代收集扫描整个老年代区域 都是以尽可能少而快速地执行GC为设计原则 G1是什么 G1(Garbage-Frist)收集器,是一款面向 服务端 应用的收集器 从官网的描述中,我们知道G1是一种服务器端的垃圾收集器,应用在多处理器和大容量内存环境中,在提高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求。另外,它还具有以下特性: 像CMS收集器一样,能与应用程序线程 并发执行 整理空闲空间更快 需要更多的时间来 预测GC停顿时间 不希望牺牲大量的吞吐性能 不需要更大的Java Heap G1收集器的设计目标是取代CMS收集器 ,它同CMS相比,在以下方面表现更出色: G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片 G1的Stop-The-World(STW)更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间。 CMS垃圾集器虽然减少了暂停应用程序的运行时间,但是它还是存在着内存碎片问题。于是,为了去除内存碎片问题,同时又保留CMS垃圾收集器低暂停时间的优点, JAVA7发布了一个新的垃圾收集器-G1垃圾收集器 。 G1是在2012年才在jdk1.7u4中可用。oracle官方计划在 jdk9中将G1变成默认的垃圾收集器以替代CMS

C++中存储区的划分

我是研究僧i 提交于 2020-01-25 20:33:45
一. 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。- 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效,不能extern到别的文件用,在函数体内定义的static表示只在该函数体内有效。另外,函数中的"adgfdf"这样的字符串存放在常量区。比如: int a = 0; //全局初始化区 char *p1; //全局未初始化区 void main() { int b; //栈 char s[] = “abc”; //栈 char *p2; //栈 char *p3 = “123456”; //123456{post.content}在常量区,p3在栈上 static int c = 0; //全局(静态)初始化区 p1 = (char *)malloc(10);

外部排序,杀鸡焉用牛刀?

北城余情 提交于 2020-01-25 17:45:27
上篇: http://www.cnblogs.com/foreach-break/p/external_sort.html 字符集和编码 字节序 I/O方式 内存 磁盘 线程/同步/异步 数据特点 字符集和编码 为什么要考虑文件的编码? 当你将文件从阿拉伯传到中国,告诉你的中国朋友要进行一个外部排序,你的中国朋友也许会傻: 上面是什么? 乱码 . 你也可以这样体验乱码: echo "数" > t.txt iconv -f UTF-8 -t UNICODE t.txt ��pe 好了,你知道了如果不知道文件的编码,你可能会解析到乱码. 字符集是什么? charset - > char-set,字符的集合.比如 UNICODE、ASCII 编码是什么? encoding,字符的表示.比如 UTF-8、ASCII 字符集和编码的关系 你晕了,我也晕了,ASCII码怎么既是字符集又是编码? 历史上,字符集和编码是同义词,实际却又不尽相同,没有一个规范地定义,那怎么理解呢? 字符集,往往强调其所“支持”的字符范围,集外的字符它不支持.集合就有一个边界,边界内的我给个表示,边界外的我不知道怎么表示。 编码,往往强调针对某个字符集的字符,我这么去转换表达为机器可理解的方式-二进制,如果对某个字符集的字符,我的转换方式和其一致,那么我既是编码也是字符集,否则我就只是一种字符集的转换格式。 那么