在项目中对程序性能优化时,发现用SetProcessWorkingSetSize() 方法使内存降低了很多,于是查阅了相关的资料如下. 一 SetProcessWorkingSetSize 的工作原理 以下来自:http://blog.csdn.net/zlt982001/archive/2005/08/28/466879.aspx 那么我的程序为什么能够将占用的内存移至虚拟内存呢? 其实,你也可以,试试看把一个程序最小化到任务栏,再看看任务管理器,看到没,你的程序占用的实际内存一下子减少了,看…
Java程序运行内存机制 栈内存包留调用方法.变量的区域,堆内存是new对象的区域,方法区为保存class文件的区域. 程序刚开始时,先加载类文件相应的数据到方法区,然后就从main()方法开始执行.执行main()方法,main()方法入栈,执行phone one = new Phone(),首先Phone one声明一个变量并入栈,然后new Phone()在堆内存申请一块空间,此时,申请的堆内存中保留着类文件中的那些变量:然后,申请区域中的方法则是一快存储着方法地址的区域.然后堆中申请的区…
毫无疑问,程序猿是善于思考问题的一族. 一个程序的编写都是通过:思考.设计.编写.调试.測试以及执行这些主要的阶段. 但大部分程序猿都有一个问题就是不太愿意測试自己的代码. 他们草草的调式完毕以后就觉得工作结束,測试那是測试人员的工作. 依照理论上.假设代码存在问题.那么測试人员和终于的用户肯定能够发现这些 BUG ,而等待哪个时候再返回来查找问题究竟错在什么地方确实代价不小,其代价有: 1. 影响了程序猿自己的声誉 2. 影响了产品的质量 3. 影响了客户的信任度 4. 这个时候再 DEBUG…
网络上找了很多关于内存整理的文章,不外乎都是使用EmptyWorkingSet来实现.就如下面这段代码. #include "stdafx.h"#include <windows.h>#include <tlhelp32.h>#include <psapi.h>#pragma comment (lib,"psapi.lib") BOOL EmptyAllSet(){    HANDLE SnapShot=CreateToolhel…
--From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能指标: 执行时间,CPU时间,内存分配,磁盘吞吐量,网络吞吐量,响应时间. 优化策略: 木桶原理,优化性能瓶颈. 1.2 性能调优的层次 设计调优, 代码调优, JVM调优, 数据库调优, 操作系统调优. 2. 设计优化 2.1 善用设计模式 单例模式: 对于巨大对象,节省创建对象的时间空间: 代理…
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util.vector; class cel { void method (vector vector) { for (int i = 0; i < vector.size (); i++) // violation ; // ... } } 更正: class cel_fixed { void metho…
懒加载:延迟加载,当程序启动时不加载资源,当程序需要这些资源时再去加载.需要的时候再加载的一种方式,能够减少内存的占用,效率高.其本质是重写get方法. 背景:由于ios内存有限,如果我们一次性将所有资源加载完毕将极大的消耗内存,降低程序运行效率.所以就要将一些比较大的资源,如音频,数据,图片等大资源进行懒加载,就需要                                             先判断是否存在,如果不存在再创建实例化. @property (nonatomic, st…
http://advancedlinuxprogramming.com提供了本书电子版的免费下载. 1 与执行环境交互 关于参数 C语言程序的main()函数使用两个参数和执行环境交互--(int)argc和(char*)argv[].前者表示所执行命令的参数个数,后者包含了所执行命令的各个参数.(char*)argv[]的第一个元素为程序本身的位置,其后为程序的参数. 看例子: #include <stdio.h> int main(int argc, char* argv[]) { pri…
Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收该对象所占用的内存.由于JVM内置了垃圾回收机制回收失去引用的Java对象所占用的内存,所以很多Java开发者认为Java不存在内存泄漏,资源泄漏的问题.实际上这是一种错觉,Java程序依然会有内存泄漏. 由于JVM的垃圾回收机制由一条后台线程完成,本身也是非常消耗性能的,因此…
一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util.vector; class cel { void method (vector vector) { for (int i = 0; i < vector.size (); i++) // violation ; // ... } } 更正: class cel_fixed { void metho…
需求: 某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售票. 两种方式实现 A:继承Thread类 B:实现Runnable接 1. 首先我们利用方式A去实现: package cn.itcast_06; public class SellTicket extends Thread { // 定义100张票 // private int tickets = 100;这时候仍然是创建的3个对象都有tickets = 100的成员变量,这样还是不行的…
优化是一件非常重要的事情.作为一个程序设计者,你肯定希望自己的程序既小又快.DOS时代的许多书中都提到,“某某编译器能够生成非常紧凑的代码”,换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使用它提供的功能的话.目前,Intel x86体系上流行的C/C++编译器,包括Intel C/C++ Compiler, GNU C/C++ Compiler,以及最新的Microsoft和Borland编译器,都能够提供非常紧凑的代码.正确地使用这些编译器,则可以得到性能足够好的代码. 但是,机器…
通常编程情况下,会导致软件项目变坏的一些列反应 原文:The five shouts of good programmers 在任何一天,在这个世界上都有软件项目正在失败,这很常见.常见到当软件产品按照预期发布时人们都会感到吃惊.这不是什么新鲜事,基于被广泛引用的Standish Group的Chaso报告,这种事情已经已经发生了几十年了.但是现在,在很多情况下,人们试图尽最大努力去避免这种悲剧,但是经常公司的政治总是会比实用主义更具优先级.只要不要太晚,这都是可以通过简单的延迟来避免. 在这种…
在由Java语言编写的程序中,有时候为了提高程序的运行效率,编译器会自动对其进行优化,把经常被访问的变量缓存起来,程序在读取这个变量的时候有可能会直接从缓存(例如寄存器)中来读取这个值,而不会去内存中读取.这样做的一个好处是提高了程序的运行效率,但当遇到多线程编程时,变量的值可能因为别的线程而改变了,而该缓存的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致.例如,在本次线程内,当读取一个变量时,为提高存取速度,会先把变量读取到一个缓存中,当以后再取变量值时,就直接从缓存中取值,当变…
Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. Valgrind的安装和使用 去官网www.valgrind.org下载最新版本的valgrind,我这里下载的是valgrind 3.11.0.tar.bz2. #tar xvf valgrind…
如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在.有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题.掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题. 5 评论: 杨 经 (cdlyangj@cn.ibm.com), 软件工程师, IBM 2008 年 11 月 27 日 内容 应用 Valgrind 发现 Linux 程序的内存问题 回页首 Valgrind 概述 体系结构…
从最初的:http://www.himigame.com/iphone-cocos2d/1043.html 译者: 在我完毕第一个游戏项目的时候.我深切地意识到"使用cocos2d来制作游戏的开发人员们,他们大多会被cocos2d的内存问题所困扰".而我刚開始接触cocos2d的时候,社区里面的人们讨论了一个非常有意义的话题:"请简单地讲述你觉得新手cocos2d程序猿在他開始编码之前,最应该先知道,或者应该关注和注意的事项."这个问题的答案非常多,有人讲是&quo…
Valgrind 概述 体系结构 Valgrind 是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framework),它模拟了 一个CPU环境,并提供服务给其他工具:而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务.Valgrind的体系结构如下图所示: 图 1 Valgrind 体系结构 Valgrind包括如下一些工具: Memcheck.这是…
1.全局异常捕获 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); //处理UI线程异常 Application.ThreadException += Application_ThreadException; //处理非UI线程异常 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;…
程序性能的主要表现点: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:内存分配是否合理,是否过多地消耗内存或者存在内存泄漏 启动时间:程序从运行到可以正常处理业务需要花费多少时间 负载承受能力:当系统压力上升时,系统的执行速度.响应时间的上升曲线是否平缓 衡量程序性能的主要指标: 执行时间:程序从运行到结束所使用的时间 CPU时间:函数或者线程占用CPU的时间 内存分配:程序在运行时占用内容的空间 磁盘吞吐量:描述I/O的使用情况 网络吞吐量:描述网络的使用情况 响应时间:系统对用…
目录 1 C++ 中的元编程 1.1 什么是元编程 1.2 元编程在 C++ 中的位置 1.3 C++ 元编程的历史 2 元编程的语言支持 2.1 C++ 中的模板类型 2.2 C++ 中的模板参数 2.3 模板的重载和绑定 -- 特化和实例化 3 元编程的基本演算 3.1 编译时测试 3.1.1 测试表达式 3.1.2 测试类型 3.1.3 使用 if 进行编译时测试 3.2 编译时迭代 3.2.1 定长模板的迭代 3.2.2 变长模板的迭代 4 元编程的基本应用 4.1 数值计算 4.2 类…
给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Python程序员告诉我,这篇文章对他们学习Lisp也有帮助,尽管这不是我的本意).基本上,Python可以看作一个拥有"传统"语法(Lisp社区称之为"中缀"或者"m-lisp"语法)的Lisp方言.一个来自comp.lang.python的帖子说到&qu…
既然涉及到高并发这个概念,就少不了先谈这么几个概念,并发数.多进程.多线程.协程.负载均衡. 操作系统上讲的并发是操作系统上有几个程序在同时执行,单核CPU在微观上是由CPU调度执行,非同时执行,多核CPU在微观上才是真正的并行. 互联网产品的并发通常是指并发连接数,用户同时访问数量,哪些因素能影响到并发能力,既有编程模型,也有服务器负载能力. PHP 依赖多进程解决并发数,是最原始和耗费资源的一种方式. 以 8G 内存服务器为例,一个PHP进程占用20M内存,最多也就开几百个进程,假如任务比较…
勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine(Java虚拟机)!本系列会开启对JVM相关的知识的探索和总结,让我们一起踏入JVM的学习之旅中,去了解和发现更加精彩的Java世界! 正如奥古斯特·罗丹 说过:世界上不是缺少美,而是缺少发现美的眼睛.Java的世界也是如此! 本文地图: 1.什么是程序 在计算机领域当中,程序就是为了能够让计算机执行…
转载: 一.尽量减少值传递,多用引用来传递参数.至于其中的原因,相信大家也很清楚,如果参数是int等语言自定义的类型可能能性能的影响还不是很大,但是如果参数是一个类的对象,那么其效率问题就不言而喻了.例如一个判断两个字符串是否相等的函数,其声明如下: 1 2 3 4 bool Compare(string s1, string s2) bool Compare(string *s1, string *s2) bool Compare(string &s1, string &s2) bool…
还是继续这个项目. 在上一篇Linux下利用Shell使PHP并发采集淘宝产品中,采用shell将对PHP的调用推到后台执行,模拟多线程. 此方法有一致命缺点,只能人工预判每个程序执行时间.如果判断时间少于执行时间,则会生成大量进程,如果判断时间多于执行时间,则会浪费时间资源. 所以,在此我们采用C程序来控制并发数. 整体思路和用shell调用相似,只是把shell控制改成了C. 下面是C程序: 1 #include <stdio.h> 2 #include <stdlib.h>…
本章主要内容   1.短结构( short structure) 2.分片结构( shared structure) 3.打包存储二进制位和字节   本章将介绍3种非常有价值的降低Redis内存占用的方法. 降低Redis的内存占用有助于减少创建快照和加载快照所需的时间. 提升载入AOF文件和重写AOF文件时的效率. 缩短从服务器进行同步所需的时间①,并且能让Redis存储更多的数据而无需添加额外的硬件.   本章首先会介绍如何 1.使用Redis的短数据结构来更高效地表示数据. 2.接着会介绍…
用Xcode来写C++程序[2] 操作变量 此节讲解包括变量的初始化的几种方式,以及泛型编程的两种变量赋值方式. 最基本的变量赋值以及操作: // operating with variables #include <iostream> using namespace std; int main () { // 声明变量 int a, b; int result; // 赋值 a = ; b = ; a = a + ; result = a - b; // 打印结果 cout <<…
单片机C程序优化 对程序进行优化,通常是指优化程序代码或程序执行速度.优化代码和优化速度实际上是一个予盾的统一.一般是优化了代码的尺寸,就会带来执行时间的增加:如果优化了程序的执行速度,通常会带来代码增加的副作用.很难鱼与熊掌兼得,只能在设计时掌握一个平衡点. 一.程序结构的优化1.程序的书写结构    虽然书写格式并不会影响生成的代码质量,但是在实际编写程序时还是应该尊循一定的书写规则,一个书写清晰.明了的程序,有利于以后的维护.在书写程序时,特别是对于While.for.do…while.i…
在前面一章我们介绍了依赖注入,控制反转的概念,以及自己动手搭建了一下Spring.Net的环境.通过这些操作,我们知道了Spring.Net 的核心是使用依赖注入或控制反转这种思想来管理业务对象,降低程序的依赖耦合.这一次的笔记,就是来了解一下,Spring.Net 如何管理我们的类. 4.1  对象,对象工厂和应用程序上下文介绍 在前面的章节,我们曾稍微提到过关于对象,对象工厂和应用程序上下文.我们也知道了可以用这些接口来管理对象,接下来会详细介绍他们. Spring.Core 程序集是Spr…