摘要: 在主流的商用程序语言中大多都是用根搜索算法(GC Roots Tracing)判断对象是否存活,比如java,c#等。当从GC Roots到某个对象不可达,则证明此对象是不可用的,将要被回收。商业虚拟机都采用分代收集算法,根据对象的存活周期的不同将内存分为几块:新生代,老年代。新生代,每次垃圾收集都会有大批量对象死去,只有少量存活,所以适合采用“复制算法”;老年代,对象存活率比较高,没有额外的分配担保,所以一般采用“标记-清理”活着“标记-整理”算法;1.标记-清除缺点: 效率低下,标记和清除的过程效率都不高; 空间问题,标记清除之后会产生大量不连续的内存碎片;2.复制算法它可以将内存按照.. 阅读全文
posted @ 2013-07-13 14:56 傅心词 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点:首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此程序员不需要考虑这部分的内存泄露。通过分析,我们得知,对于C++,程序员需要自己管理边和顶点,而对于Java程序员只需要管理边就可 阅读全文
posted @ 2013-07-13 14:14 傅心词 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 解压缩tar -zxvf xxx.tar.gz文件显示及查找常用于分析log//显示file中包含aaa的行cat |grep aaa查看cpu memory基本信息cat /proc/cpuinfocat /proc/meminfolinux的任务管理器top 用于动态的显示系统信息$ toptop - 01:41:40 up 9:06, 2 users, load average: 0.23, 0.25, 0.26Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombieCpu(s): 0.4%us, ... 阅读全文
posted @ 2013-07-13 13:06 傅心词 阅读(394) 评论(0) 推荐(0) 编辑
摘要: Struts 1.x和Struts 2的Action是不是线程安全的?Struts 1.x在第一次请求某个Action时,会创建这个Action实例。但之后再请求该Action实例时,就用之前创建好的这个Action处理,即它是单例模式。所以Struts 1.x的Action不是线程安全的。但是为什么我们在使用Struts 1.x开发的时候一般不用考虑线程安全问题呢?那是因为Struts 1.x的方法调用模式用到的参数一般都是局部变量(包括request, response,session,config,page,pageContext等,如下面的方法定义),局部变量是线程安全的,因此不存在线 阅读全文
posted @ 2013-07-13 10:02 傅心词 阅读(823) 评论(0) 推荐(0) 编辑