??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产精品久久久久秋霞蜜臀,www.在线视频,欧美精品少妇videofreehttp://www.aygfsteel.com/kuaister/zh-cnSat, 17 May 2025 14:00:45 GMTSat, 17 May 2025 14:00:45 GMT60Linux 内存相关http://www.aygfsteel.com/kuaister/archive/2008/11/01/237950.html白色天堂白色天堂Sat, 01 Nov 2008 00:27:00 GMThttp://www.aygfsteel.com/kuaister/archive/2008/11/01/237950.htmlhttp://www.aygfsteel.com/kuaister/comments/237950.htmlhttp://www.aygfsteel.com/kuaister/archive/2008/11/01/237950.html#Feedback0http://www.aygfsteel.com/kuaister/comments/commentRss/237950.htmlhttp://www.aygfsteel.com/kuaister/services/trackbacks/237950.html
通常32位cpu使用2U页表机制就已够,但到64位时代,2U页表会佉K表的Ҏ剧增加Q所以通常会用更多的表U数?br /> ia64/ppc64/alpha使用3U页表,x86_64使用?U页表。ؓ兼容q些模型Q?.6.11之后使用了统一?U页表模?br /> Global Directory
Upper Directory
Middle Directory
Page Table
针对不同的架构,讄每一U不同的地址位数Q?的话是不用这一U页表机制?br />
cache
多cpu环境中,每个cpu有自qcacheQ对cache的更新有g机制保证通知其他的cpuq行同步?真的?)

tlb
用来cache表Q加速地址的{换速度。每个cpu有自qtlbQ但不需要同步,因ؓ地址转换和进E相兟?br />


白色天堂 2008-11-01 08:27 发表评论
]]>
Linux下的thread分类http://www.aygfsteel.com/kuaister/archive/2008/09/09/228049.html白色天堂白色天堂Tue, 09 Sep 2008 14:56:00 GMThttp://www.aygfsteel.com/kuaister/archive/2008/09/09/228049.htmlhttp://www.aygfsteel.com/kuaister/comments/228049.htmlhttp://www.aygfsteel.com/kuaister/archive/2008/09/09/228049.html#Feedback0http://www.aygfsteel.com/kuaister/comments/commentRss/228049.htmlhttp://www.aygfsteel.com/kuaister/services/trackbacks/228049.html   旧的pthread实现Q基于process实现pthread。主要问题是signal不符合规范,stack size固定???

NPTL:
  2.6后加入的新实玎ͼredhat as?.4可以支持。更W合pthread的规范。用LE和内核U程采取1:1模式Q支持floating stack?br />


白色天堂 2008-09-09 22:56 发表评论
]]>
disassembler for jvmhttp://www.aygfsteel.com/kuaister/archive/2008/08/24/223921.html白色天堂白色天堂Sat, 23 Aug 2008 16:28:00 GMThttp://www.aygfsteel.com/kuaister/archive/2008/08/24/223921.htmlhttp://www.aygfsteel.com/kuaister/comments/223921.htmlhttp://www.aygfsteel.com/kuaister/archive/2008/08/24/223921.html#Feedback0http://www.aygfsteel.com/kuaister/comments/commentRss/223921.htmlhttp://www.aygfsteel.com/kuaister/services/trackbacks/223921.html 代码比较单,主要是用了udis86的库Q这个可以在sf上下载到Q它的接口还是比较简单的?br />
单的例子Qhotspot解析模式中iconst_0的对应汇~代码:
iconst_0  3 iconst_0  [0xb4d98120, 0xb4d98160]  64 bytes

  0xb4d98120: sub esp, 0x4
  0xb4d98123: fstp dword [esp]
  0xb4d98126: jmp 0x1e
  0xb4d9812b: sub esp, 0x8
  0xb4d9812e: fstp qword [esp]
  0xb4d98131: jmp 0x13
  0xb4d98136: push edx
  0xb4d98137: push eax
  0xb4d98138: jmp 0xc
  0xb4d9813d: push eax
  0xb4d9813e: jmp 0x6
  0xb4d98143: push eax
  0xb4d98144: xor eax, eax
  0xb4d98146: movzx ebx, byte [esi+0x1]
  0xb4d9814a: inc esi
  0xb4d9814b: jmp dword near [ebx*4+0x6900680]



白色天堂 2008-08-24 00:28 发表评论
]]>
WeekReference的应用场?/title><link>http://www.aygfsteel.com/kuaister/archive/2008/07/25/217585.html</link><dc:creator>白色天堂</dc:creator><author>白色天堂</author><pubDate>Fri, 25 Jul 2008 14:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuaister/archive/2008/07/25/217585.html</guid><wfw:comment>http://www.aygfsteel.com/kuaister/comments/217585.html</wfw:comment><comments>http://www.aygfsteel.com/kuaister/archive/2008/07/25/217585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuaister/comments/commentRss/217585.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuaister/services/trackbacks/217585.html</trackback:ping><description><![CDATA[对soft referenceQ比较容易理解它的用处。它天生是为实现cache来设计的。关于weak referenceQ好像很有的清楚。有的和soft reference混在一赯Q有的就是简单翻译java doc中的说明Q看得出译的h自己也不是很理解Q所以只能一W带q?br /> <br /> 我也一直不是很清楚它的实际用途,今天我突然想到WeakReference可能的设计目的?br /> <br /> 从java的内存泄漏说P以前说到java也会内存泄漏的时候往往会Dq样的例子,对象保存在一个全局表中Q造成无法回收。一般的解决Ҏ是不要用全局表或者记得更新。但在实际开发中Q有时必要使用全局表,但无法明知道该对象是否可销毁,因ؓ对象可能被多个线E共享访问,所以程序不能确切的更新表中的引用。这时候weak reference有用武之地Q用WeakHashMap构造全局表,key和value之间是weak referenceQ这L话程序员׃用考虑更新该表了,只要该对象没有强引用指向它,gc可以回收它了?br /> <br /> 回头L一个实际的例子对照看看Q记得在JDK中,weak referenceq是用的很频J的?br /> <br /> <img src ="http://www.aygfsteel.com/kuaister/aggbug/217585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuaister/" target="_blank">白色天堂</a> 2008-07-25 22:51 <a href="http://www.aygfsteel.com/kuaister/archive/2008/07/25/217585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu中找到文件对应的?/title><link>http://www.aygfsteel.com/kuaister/archive/2008/05/21/202055.html</link><dc:creator>白色天堂</dc:creator><author>白色天堂</author><pubDate>Wed, 21 May 2008 15:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuaister/archive/2008/05/21/202055.html</guid><wfw:comment>http://www.aygfsteel.com/kuaister/comments/202055.html</wfw:comment><comments>http://www.aygfsteel.com/kuaister/archive/2008/05/21/202055.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuaister/comments/commentRss/202055.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuaister/services/trackbacks/202055.html</trackback:ping><description><![CDATA[以前用redhat的时候用rpm理软g包,因ؓ不能解决软g的依赖关pd来{到debian。apt实方便了很多,但一直怀念rpm的一个功能,rpm可以查询一个文件具体属于哪个包Q用apt一直没有找到对应的命o?br /> 今天惛_64位ubuntu上编?2位程序的时候发现没?usr/include/gnu/stub-32.hQ在|上搜烦时突然发现apt也可以根据文件来搜烦包。命令是apt-file(~省是没有安装的)?br /> 先安装apt-file<br /> 使用apt-file update同步安装包内部的文gQ它会到你定义的source去获取这些信息,q行会比较慢Q而且没有什么提C,不知道今后会不会都是q样?br /> 然后可以用apt-file find xxx L询了?br /> <br /> <br /> Q每天进步一点点Q?:)<br /> <br /> <img src ="http://www.aygfsteel.com/kuaister/aggbug/202055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuaister/" target="_blank">白色天堂</a> 2008-05-21 23:04 <a href="http://www.aygfsteel.com/kuaister/archive/2008/05/21/202055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tree rewriting的代码生成方?/title><link>http://www.aygfsteel.com/kuaister/archive/2008/05/07/198846.html</link><dc:creator>白色天堂</dc:creator><author>白色天堂</author><pubDate>Tue, 06 May 2008 21:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/kuaister/archive/2008/05/07/198846.html</guid><wfw:comment>http://www.aygfsteel.com/kuaister/comments/198846.html</wfw:comment><comments>http://www.aygfsteel.com/kuaister/archive/2008/05/07/198846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kuaister/comments/commentRss/198846.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kuaister/services/trackbacks/198846.html</trackback:ping><description><![CDATA[代码生成一般采用tree rewriting的方式,先将源代码{换成语法树的形式Q通过模式匚w子树替换成叶结点,同时生成代码指oQ当树全部替换完后代码即生成了。采用这U方式主要关心匹配规则,甚至可以使用lex/yacc之类的工L成code generator generatorQ也便于实现可移植的~译器?br /> <br /> dynamic programing<br /> 前面的算法如果只是从左往右依ơ匹配的话生成的代码质量不高QDP是要考虑指o的代P生成质量较优的代码?br /> <br /> 自底向上为每个节点计一pd值存入数lC[]Q其中index代表使用的register数目Q存储的是相应的代h(要考虑可能增加的store/load指o代hQ,计算某个节点的C[]Ӟ先找到可能的匚w模式Q根据匹配模式选择可能的寄存器数目l合Q计代价后选择最倹{这样遍历整个树后可以得到最代L成方式?br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/kuaister/aggbug/198846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kuaister/" target="_blank">白色天堂</a> 2008-05-07 05:14 <a href="http://www.aygfsteel.com/kuaister/archive/2008/05/07/198846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LCA的Tarjan法的java实现http://www.aygfsteel.com/kuaister/archive/2008/01/07/173485.html白色天堂白色天堂Mon, 07 Jan 2008 15:15:00 GMThttp://www.aygfsteel.com/kuaister/archive/2008/01/07/173485.htmlhttp://www.aygfsteel.com/kuaister/comments/173485.htmlhttp://www.aygfsteel.com/kuaister/archive/2008/01/07/173485.html#Feedback0http://www.aygfsteel.com/kuaister/comments/commentRss/173485.htmlhttp://www.aygfsteel.com/kuaister/services/trackbacks/173485.html 基本描述Q?br />    本n是一个从根开始的深度优先搜烦
1 入节ҎZ个单节点的树 // MAKE_SET
2 Ҏ个子节点Q递归调用该算法完成子树内所有查询,
    再将子节点的ancester指向本节点,归ƈl果?nbsp; // UNION
3 处理完所有子节点后,本节点标ؓchecked
4 遍历查询集中和该节点有关的查询,查另一个节Ҏ否已标ؓcheckedQ如果是的话说明
     1Q?该节点在本节点的子树
     2Q?该节点和本节点在另一节点的子树中Q而且该节点已被查?br />      无论哪种情况Q检查该节点所在树的根是q两个节点的LCA节点
     如果没有标识checkedQ只需单蟩q,当遍历到该节Ҏ可以完成查询了

下面是java的实C码和单测?br />
import java.util.*;
public class Tarjan{
        
static void lca( Node p, ArrayList<Query> q ){
                MAKE_SET(p);
                
//FIND(p).ancester=p;
                for( Node i : p.childs){
                        lca( i, q );
                        UNION( p, i );
                        FIND(p).ancester
=p;
                }
                p.checked
=true;
                
for( Query query : q ){
                        
if( query.p1==p ){
                                
if( query.p2.checked ){
                                        query.result
=FIND(query.p2);
                                }
                        }
else if( query.p2==p ){
                                
if( query.p1.checked ){
                                        query.result
=FIND(query.p1);
                                }
                        }
else{
                                
continue;
                        }
                }
        }

        
static void MAKE_SET( Node p ){
                p.ancester 
= p;
        }

        
static Node FIND( Node p ){
                Node r
=p;
                
for( ; r.ancester!=r; r=r.ancester );
                
return r;
        }

        
static void UNION( Node p, Node q ){
                q.ancester
=p;
        }

        
public static void main( String args[] ){
                
// create tree
                Node p[]=new Node[24];
                p[
0]=new Node(0,null);  // root
                p[1]=new Node(1,p[0]);
                p[
2]=new Node(2,p[0]);
                p[
3]=new Node(3,p[0]);
                p[
4]=new Node(4,p[1]);
                p[
5]=new Node(5,p[1]);
                p[
6]=new Node(6,p[1]);
                p[
7]=new Node(7,p[2]);
                p[
8]=new Node(8,p[2]);
                p[
9]=new Node(9,p[3]);
                p[
10]=new Node(10,p[3]);
                p[
11]=new Node(11,p[3]);
                p[
12]=new Node(12,p[4]);
                p[
13]=new Node(13,p[4]);
                p[
14]=new Node(14,p[6]);
                p[
15]=new Node(15,p[8]);
                p[
16]=new Node(16,p[10]);
                p[
17]=new Node(17,p[10]);
                p[
18]=new Node(18,p[14]);
                p[
19]=new Node(19,p[14]);
                p[
20]=new Node(20,p[17]);
                p[
21]=new Node(21,p[17]);
                p[
22]=new Node(22,p[17]);
                p[
23]=new Node(23,p[11]);

                
// make lca query
                ArrayList< Query > q= new ArrayList<Query>();
                q.add( 
new Query(p[15], p[19]));
                q.add( 
new Query(p[21], p[16]));
                q.add( 
new Query(p[14], p[14]));
                q.add( 
new Query(p[4], p[23]));
                q.add( 
new Query(p[23], p[16]));

                
// lca
                lca( p[0], q );

                
// dump results
                for( Query item : q ){
                        System.out.println( item.p1
+":"+item.p2+": result is:"+item.result );
                }
        }
}

class Node{
        
public Node( int id, Node parent ){
                 
this.id=id;
                
if( parent != null ){
                        parent.childs.add(
this);
                }
else{
                        
assert this.id==0;
                }
                
this.checked=false;
                
this.ancester=null;
                
this.childs=new ArrayList<Node>();
        }
        
int id;
        ArrayList
<Node> childs;
        
public String toString(){
                
return "Node:<"+id+">";
        }
        Node ancester;  
// used for lca search
        boolean checked;        // used for lca search
}

class Query{
        
public Query( Node p1, Node p2 ){
                
assert p1!=null && p2!=null;
                
this.p1=p1;
                
this.p2=p2;
                
this.result=null;
        }
        Node p1;
        Node p2;
        Node result;
}

试使用的树Q?br />
                                             0
                         +--------------+--------------------+
                          |                  |                          |
                         1                  2                        3
                  +-----+------+     +---+       +-------+---------+
                   |       |         |       |      |        |          |             |
                   4     5        6      7      8       9       10           11
            +---+               +              +          +--+------+   |
             |     |                 |              |            |               |   23
          12   13              14             15         16         17
                        +--------+                                +----+----+
                         |           |                                 |       |       |
                        18       19                               20   21   22


PSQ差点忘了,lp生日快乐




白色天堂 2008-01-07 23:15 发表评论
]]>
JVM中的内存分配http://www.aygfsteel.com/kuaister/archive/2007/10/01/150120.html白色天堂白色天堂Mon, 01 Oct 2007 15:10:00 GMThttp://www.aygfsteel.com/kuaister/archive/2007/10/01/150120.htmlhttp://www.aygfsteel.com/kuaister/comments/150120.htmlhttp://www.aygfsteel.com/kuaister/archive/2007/10/01/150120.html#Feedback0http://www.aygfsteel.com/kuaister/comments/commentRss/150120.htmlhttp://www.aygfsteel.com/kuaister/services/trackbacks/150120.html
一般来_在堆上分配的效率要低于栈Q。例如堆是全局的,在多U程E序中要使用锁来q行同步Q不巧的是,l大部分的javaE序都是多线E的。另一斚wQ随着对象的生成和销毁,堆上会生碎片,需要一个或多个freelist来维护,q样也造成额外的开销Q以及空间利用的低效?br />
但这是一般cE序员理解的heap理机制Q也因此有cE序员指责java的内存管理效率低下。其实在jvm的实CQ它会用自己的方式来理堆,增强java的效率。以HotspotZQ每个线E都会拥有一D自qI间UCؓTLAB(Thread Local Alloc Buffer)Q这块空间因为属于线E独有,所以在其中分配对象不需要加锁,其实和栈一P分配对象只要一个指针增加sizeof(object)卛_。如果对象太大超Ztlab的剩余空_此时有多U选择Q?br />     在heap的shareI间中分配,
    重新分配一块tlab
    在old generation中分?br />     触发gcQ释攑ַ有空间?br /> 具体选择何种方式由内存的利用情况和jvm的内存管理策略决定。由多个参数可以q行调整。所以在l大部分情况下(?0%Q,jvm中对象的分配和栈一样高效?br />
关于对象的释放,是java中著名的gc来负责了Q关于gc的介l多如牛毛,而且其中的方式和{略层出不穷Q这片文章就不介l了?br />
从上面的介绍可以看出Q这U方式可以加速对象的分配Q但寚w放不能作到象stack那样高效Q其实有很多对象只是生存期很短的临时对象Q如何识别这些对象ƈ在tlab中更有效的释攑ֺ该是jvm可以q一步优化的方向。据我所知,jdk6的jvm已经使用了相关的技术?br />


白色天堂 2007-10-01 23:10 发表评论
]]>
EOS400Dhttp://www.aygfsteel.com/kuaister/archive/2007/09/09/143767.html白色天堂白色天堂Sun, 09 Sep 2007 05:45:00 GMThttp://www.aygfsteel.com/kuaister/archive/2007/09/09/143767.htmlhttp://www.aygfsteel.com/kuaister/comments/143767.htmlhttp://www.aygfsteel.com/kuaister/archive/2007/09/09/143767.html#Feedback0http://www.aygfsteel.com/kuaister/comments/commentRss/143767.htmlhttp://www.aygfsteel.com/kuaister/services/trackbacks/143767.html
回去试用后果然画面有了飞跃。拍摄h像的层次感,立体感都丰富了不。换机如换刀啊?br />
以后大概会在q上面投入不钱吧,为我今后的钱包默哀一下?br />


白色天堂 2007-09-09 13:45 发表评论
]]>
վ֩ģ壺 | | Ƿ| ɽ| | ܿ| | | Ҧ| | | | | ֶ| | żҸ| ɽ| | ̨| ®| | ʯ| ƽ| ɽ| | ɽ| ˺| ̨ʡ| ״| | | | | | | ͻȪ| | | | Į| |