<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2008年3月13日

    搭建過程備注:
    1. 虛擬機(jī)軟件Vmware 8.0 Workstation,Windows 2008 Enterprise Server, Sql Server 2008 R2。
    2. 倆個節(jié)點平臺版本必須一致,都為企業(yè)版。
    3. 與構(gòu)建Windows 2003群集不同,不能使用vmware的共享磁盤機(jī)制。Windows 2008集群對存儲要求很高,不支持SCSI硬盤做集群。
        本次使用starwind 5.4代替vmware的共享磁盤實現(xiàn)群集存儲。
    4. 搭建Windows集群需要3臺虛擬機(jī):2個節(jié)點+1臺存儲。
    5. 搭建SqlServer 2008集群需要4替虛擬機(jī):2個節(jié)點+1臺DC+1臺存儲。

    搭建順序:
    1. 安裝DC+DNS服務(wù)器。
    2. 安裝集群節(jié)點, 配置雙網(wǎng)卡,域登錄。
    3. 安裝群集磁盤服務(wù)器
    4. 在集群節(jié)點上配置iSCSI發(fā)起。
    5. 在集群節(jié)點上安裝“故障轉(zhuǎn)移群集”功能。
    6. 進(jìn)行故障轉(zhuǎn)移群集驗證和創(chuàng)建。
    7. 至此,Windows集群環(huán)境安裝完畢。
    8. 在集群節(jié)點上按群集方式安裝SqlServer 2008。
    9. SqlServer 2008集群環(huán)境構(gòu)建完畢。

    參考文檔:
    Windows Server 2008的故障轉(zhuǎn)移群集入門: http://os.51cto.com/art/201007/210286.htm
    windows server2008虛擬機(jī)+群集: http://wenku.baidu.com/view/5e5b2be8e009581b6bd9eb1a.html
    Windows2008+sqlserver2008集群安裝:http://wenku.baidu.com/view/601dc74d2b160b4e767fcf46.html

    posted @ 2012-06-21 09:23 bluoy 閱讀(3944) | 評論 (0)編輯 收藏

    神一樣的軟件,膜拜ing...
    連我這天生kernel iptable有缺陷的都能用。

    當(dāng)前版本:2.04.
    還是個Open Source的,改天一定要好好觀摩一番的。

    posted @ 2011-09-28 15:55 bluoy 閱讀(313) | 評論 (0)編輯 收藏

    If you meet following errors below when you try to build your source code:

     

    Checking build tools versions...

    build/core/main.mk:72:

    ************************************************************

    build/core/main.mk:73: You are attempting to build on a 32-bit system.

    build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.

    build/core/main.mk:75:

    ************************************************************

    Don’t panic, just change the code:

    build/core/main.mk

    ifeq ($(BUILD_OS),linux)

    build_arch := $(shell uname -m) 

    ---ifneq (64,$(findstring 64,$(build_arch))) 

    +++ifneq (i686,$(findstring i686,$(build_arch)))

     

    and change the code in four mk files below from “+=-m64” to “+=-m32”


    external/clearsilver/cgi/Android.mk

    external/clearsilver/java-jni/Android.mk

    external/clearsilver/util/Android.mk

    external/clearsilver/cs/Android.mk


    LOCAL_CFLAGS += -m32

    LOCAL_LDFLAGS += -m32

    end.

    posted @ 2011-01-07 10:54 bluoy 閱讀(365) | 評論 (0)編輯 收藏

    I got this idea when i was surfing the web in search of a tool similar to the Nokia Pc Suite for my Linux

    This How-To  works with many NOKIA Mobile Phone, especially for Nokia 3230, 6670, 6680, 6682 e 7610, 6120, Sony Ericsson Z1010, LG U8110/8120.

    First of all, we have to grant access for Mobile Phone to “dialout” group.

    sudo gedit /etc/udev/rules.d/40-permissions.rules

    Now we have to add to the end of file:

    # NOKIA 6120
    BUS==”usb”, SYSFS{idVendor}==”0421″, SYSFS{idProduct}==”002f”, GROUP=”dialout”

    where 0421 and 002f could be different depending on your Mobile Phone.
    To check your idVendor and idProduct, we have to type on terminal

    lsusb
    Bus 003 Device 009: ID 0421:002f Nokia Mobile Phones

    Now, we have to reload udev permission file:

    sudo /etc/init.d/udev restart

    We have to add our username on group “dialout”

    gpasswd -a username dialout

    All basics configurations for USB Data Cable are completed. We can start installation of obexftp and obextool GUI. Obextool GUI is written for tk graphic library, so GUI not have a good design as GTK.

    sudo apt-get install openobex-apps libopenobex1 obexftp obextool

    If you want start obextool from terminal we have to type for the first time:

    export OBEXCMD=”obexftp -t /dev/ttyACM0 -u 1″
    obextool

    or, we can start it simply by typing:

    obextool –obexcmd “obexftp -t /dev/ttyACM0 -u 1″

    When we start Obextool we can see this error message:

    It seems, that your device does not support the memory status feature.
    Memory status will be disabled

    To solve this problem we have to set some values on obextool.cfg:

    sudo gedit /etc/obextool.cfg

    set ObexConfig(config,memstatus) 0
    set ObexConfig(config,filemove) 0

    Another error message that we can see is:

    FIle ‘/FileName/’ could not be uploaded to ‘E:/Path’!
    Please check your file permissions.

    To solve it:

    sudo gedit /etc/obextool.cfg

    set ObexConfig(config,dir_slash) 1

    Good Job! Now your Mobile Phone works well in Ubuntu Gutsy with ObexTool.
    If we want add it as Desktop Entry:

    sudo gedit /usr/share/applications/obextool.desktop

    [Desktop Entry]
    Encoding=UTF-8
    Version=1.0
    Type=Application
    Exec=/usr/bin/obextool –obexcmd “obexftp -t /dev/ttyACM0 -u 1″
    Icon=/usr/share/icons/gnome/scalable/devices/phone.svg
    Terminal=false
    Name=Obextool
    GenericName=
    Comment=Browser your Mobile Phone
    Categories=Application;Utility;

    So, you can find it in your Gnome Panel over: “Applications” -> “Accessories” -> Obextool

    posted @ 2009-04-23 16:30 bluoy 閱讀(381) | 評論 (0)編輯 收藏

    下面的例子實現(xiàn)把一個整數(shù)的各個位上的數(shù)字相加,通過這個例子我們再次理解 connect by.

    create or replace function f_digit_add(innum integer) return number
    is
    outnum integer;
    begin
    if innum<0 then
    return 0;
    end if;
    select sum(nm) into outnum from(
    select substr(innum,rownum,1) nm from dual connect by
    rownum<length(innum)
    );
    return outnum;
    end f_digit_add;
    /

    select f_digit_add(123456) from dual;

    posted @ 2009-04-01 17:02 bluoy 閱讀(831) | 評論 (1)編輯 收藏

    終于搞明白了困惑很久的問題,罪魁禍?zhǔn)走€是jdk啊。天殺的。
    以下內(nèi)容轉(zhuǎn)自網(wǎng)絡(luò):

    測試環(huán)境:Win2K Pro日文版,SUN J2SDK 1.5.0-beta2

    經(jīng)過測試,發(fā)現(xiàn)Shift_JIS和MS932編碼的全角波浪線(“~”)的編碼都是 0x8160(16進(jìn)制,兩個字節(jié),高位在前)。通過sun.io.ByteToCharMS932轉(zhuǎn)換后得到Unicode字符'\uFF5E',而通過sun.io.ByteToCharSJIS轉(zhuǎn)換后則得到Unicode字符'\u301C'。

    反之,Unicode字符'\uFF5E'通過sun.io.CharToByteMS932轉(zhuǎn)換后會得到MS932編碼的本地字符0x8160(16進(jìn)制,兩個字節(jié),高位在前),而Unicode字符'\u301C'通過 sun.io.CharToByteSJIS轉(zhuǎn)換后也會得到Shift_JIS編碼的本地字符0x8160(16進(jìn)制,兩個字節(jié),高位在前),兩者的轉(zhuǎn)換結(jié)果相同。

    結(jié)論:在WinNT/2K/XP上,MS932和Shift_JIS這兩種本地字符集完全相同,只是分別采用JDK的sun.io.ByteToCharMS932和sun.io.ByteToCharSJIS對個別特殊的本地字符進(jìn)行轉(zhuǎn)換后所得到的 Unicode字符并不一樣。實際上,MS932就是WinNT/2K/XP上的Shift_JIS,只是與標(biāo)準(zhǔn)版的Shift_JIS字符集相比,MS932收錄了更多的字符,比如NEC和IBM對Shift_JIS的擴(kuò)展(如日文中的“?????①..?...”等等);然而,JDK中的 ByteToCharSJIS及CharToByteSJIS卻使用了標(biāo)準(zhǔn)的Shift_JIS字符集,所以部分?jǐn)U展字符在從byte轉(zhuǎn)換成char或是從char轉(zhuǎn)換成byte時會出現(xiàn)亂碼,這的確是JDK讓人非常迷惑的一處。

    參考資料1(日文):http://www.asahi-net.or.jp/~ez3k-msym/charsets/jis2ucs.htm

    posted @ 2009-02-03 16:52 bluoy 閱讀(1393) | 評論 (0)編輯 收藏

    1. 函數(shù)的overwrite實現(xiàn)時,函數(shù)參數(shù)類型必須嚴(yán)格一致。與overload不同,并不遵守參數(shù)優(yōu)先匹配的原則。
    所以,不能用子類,或這接口的實現(xiàn)類來妄圖得到overwrite的目的。
    2. 使用反射手法時,getMethod()的調(diào)用,參數(shù)類型必須與要得到的函數(shù)類型嚴(yán)格一致。與overload不同,并不遵守參數(shù)優(yōu)先匹配的原則。
    3內(nèi)部類,要實例化時必須首先實例化包含類。可以理解為內(nèi)部類只是包含類的數(shù)據(jù)成員
    4非public類,非javabean規(guī)范的Bean,內(nèi)部類BeanUtil類無法進(jìn)行操作,比如clone()等等。

    posted @ 2008-12-28 10:54 bluoy 閱讀(190) | 評論 (0)編輯 收藏

    雖然java沒有提供函數(shù)指針的操作,而是必須通過對象來曲線救國。
    不過延伸一下這個思路,其實也未必不是件好事。從某種意義上來說,整個java系統(tǒng),或者對象系統(tǒng),其實就是不計其數(shù)的鉤子組成的系統(tǒng)。因為,參數(shù)傳遞的過程中完全依賴著對象,一種行為和數(shù)據(jù)的結(jié)合體。這里,關(guān)鍵詞是參數(shù)傳遞和對象的行為,當(dāng)然離不開多態(tài)。
            改變既有代碼的行為步驟:
            1. 派生參數(shù)類得到新的子類。
            2. 在子類中覆寫(overwrite)父類既有方法。
            3. 將子類的實例作為參數(shù)傳遞。
            這樣,就得到了改變父類行為的目的。
     對于既有框架自作主張的封裝,阻礙自己的目的的時候,這個做法往往能獨辟蹊徑。

    posted @ 2008-12-28 10:40 bluoy 閱讀(191) | 評論 (0)編輯 收藏

    Spring Framework 的理解以及可維護(hù)性是否得以改善的思考

    Spring的特性:
    1. 提供了一種管理對象的方法,可以把中間層對象有效地組織起來。一個完美的框架“黏合劑”。
    2. 采用了分層結(jié)構(gòu),可以增量引入到項目中。
    3. 有利于面向接口編程習(xí)慣的養(yǎng)成。
    4. 目的之一是為了寫出易于測試的代碼。
    5. 非侵入性,應(yīng)用程序?qū)pring API的依賴可以減至最小限度。
    6. 一致的數(shù)據(jù)訪問介面。
    6. 一個輕量級的架構(gòu)解決方案。

    對Spring的理解
    Spring致力于使用POJOs來構(gòu)建應(yīng)用程序。由框架提供應(yīng)用程序的基礎(chǔ)設(shè)施,將只含有業(yè)務(wù)邏輯的POJOs作為組件來管理。從而在應(yīng)用程序中形成兩條相對獨立發(fā)展的平行線,并且在各自的抽象層面上延長了各自的生命周期。

    Spring的工作基礎(chǔ)是Ioc。Ioc將創(chuàng)建對象的職責(zé)從應(yīng)用程序代碼剝離到了框架中,通常2中注入方式:setter 和 ctor參數(shù)。
    每個Bean定義被當(dāng)作一個POJO(通過類名和JavaBean的初始屬性或構(gòu)造方法參數(shù)兩種方式定義的Bean)。
    Spring的核心在org.springframework.beans,更高抽象層面是BeanFactory. BeanFactory是一個非常輕量級的容器。

    關(guān)于可維護(hù)性的思考
    Spring之類的技術(shù)確實帶來了應(yīng)用系統(tǒng)的可維護(hù)性的提高嗎?
    Ioc, AOP之類的技術(shù),本質(zhì)上都是將原本位于應(yīng)用程序代碼中"硬編碼"邏輯,剝離出來放到了配置文件中(或者其他形式)。主流聲音都是認(rèn)為提高了應(yīng)用程序的可維護(hù)性。

    但如果從以下方面觀察,結(jié)合項目實際經(jīng)驗,個人感覺這些技術(shù)的應(yīng)用大大降低了應(yīng)用程序的可維護(hù)性,尤其是面對一個陌生的系統(tǒng),或者項目人員變動頻繁的時候。
    1. 中斷了應(yīng)用程序的邏輯,使代碼變得不完整,不直觀。此時單從Source無法完全把握應(yīng)用的所有行為。
    2. 將原本應(yīng)該代碼化的邏輯配置化,增加了出錯的機(jī)會以及額外的負(fù)擔(dān)。
    3. 時光倒退,失去了IDE的支持。在目前IDE功能日益強(qiáng)大的時代,以往代碼重構(gòu)等讓人頭痛的舉動越來越容易。而且IDE還提供了諸多強(qiáng)大的輔助功能,使得編程的門檻降低很多。通常來說,維護(hù)代碼要比維護(hù)配置文件,或者配置文件+代碼的混合體要容易的多。
    4. 調(diào)試階段不直觀,后期的bug對應(yīng)階段,不容易判斷問題所在。
    5. 性能問題。雖說硬件性能日新月異,但是性能也是在不經(jīng)意間一點一點地流失的。從匯編到高級語言,到面向?qū)ο螅教摂M機(jī),一直處于這樣的發(fā)展趨勢。

    posted @ 2008-07-06 10:21 bluoy 閱讀(2011) | 評論 (3)編輯 收藏

    項目中組員偶然寫了一段垃圾的sql語句,不想?yún)s誤打誤撞的發(fā)現(xiàn)了一個jdbc的bug,包括Oracle 10g附帶的版本。

    詳細(xì)描述可以參考如下代碼:
       public static void testSetTimestampBug() throws Exception{
            Calendar calendar = new GregorianCalendar();
            Date d = calendar.getTime();
            
            String sql = "select 1+1 from dual where ?-sysdate<1";         //error sql
            String sql1 = "select ?-sysdate from dual";                          //no error sql
            String sql2 = "select 1+1 from dual where ?-1<sysdate";       //no error sql
            PreparedStatement pst = cn.prepareStatement(sql);
            //pst.setDate(1, new java.sql.Date(d.getTime()));                 //no  error
            pst.setTimestamp(1, new java.sql.Timestamp(d.getTime()));   //bug!!!, throw SQLException: ORA-00932
        }
    三種sql的寫法中,第一種寫法在使用setTimestamp()時會出錯,其他倆種卻不會有問題。
    即正常調(diào)用PreparedStatement.setTimestamp()方法,遇到某些特殊寫法的sql語句卻會出錯。
    本例中,拋出如下例外:
    java.sql.SQLException: ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL.
    然而,如果使用setDate()方法,則一切正常,三種寫法都沒有問題。

    因為有這個問題,如果在持久層使用了其他的中間件,則這個問題可能變的更加隱蔽,比如iBatis中的處理是這樣的:
    java.util.Date ---> ibatis.DateTypeHandler----->PreparedStatement.setTimestamp() 
    java.sql.Date ---> ibatis.SqlDateTypeHandler----->PreparedStatement.setDate()
    如果不注意輸入?yún)?shù)類型的話,就會遇到上述問題。我就因此費了不少周折。
    對于iBatis的使用建議,保證入口參數(shù)類型始終為java.sql.Date即可。

    posted @ 2008-03-26 17:17 bluoy 閱讀(1791) | 評論 (0)編輯 收藏

    Web架構(gòu)特性及REST架構(gòu)風(fēng)格(部分內(nèi)容摘自網(wǎng)絡(luò))

    良好的Web架構(gòu)風(fēng)格:
        1. 客戶/服務(wù)器模式:  實現(xiàn)了UI與數(shù)據(jù)的分離。
        2. 服務(wù)端無狀態(tài)性: 可見性,可靠性,可伸縮性等方面的改善。
         可見性-無狀態(tài)性使得服務(wù)器不必要維護(hù)海量的上下文(Context)。
         可靠性-無狀態(tài)性減少了服務(wù)器從局部錯誤中恢復(fù)的任務(wù)量。
         可伸縮性-無狀態(tài)性使得服務(wù)器可以很容易的釋放資源。
        3. 緩存: 減少服務(wù)端不必要的處理。
        4. 可伸縮性: 便于分布式和集群部署。
         上面的2,3點也是影響4的主要因素。而隨著系統(tǒng)用戶規(guī)模的指數(shù)上升,可伸縮性將變的至關(guān)重要。

    現(xiàn)在大多數(shù)應(yīng)用程序都忽略或者違反了上述2, 3的風(fēng)格。當(dāng)然也肯定失去了4帶來的好處。
    比如Java Servlet中HttpSession的應(yīng)用,使服務(wù)器端保存了客戶端的狀態(tài)。
    時下流行的動態(tài)頁面的做法也使得資源緩存變得困難或者不可能。
    這些都直接影響了應(yīng)用的可伸縮性。

    改善現(xiàn)狀的思路是,把服務(wù)端的處理和狀態(tài)前移,由客戶端來實現(xiàn)。使服務(wù)端回歸到無狀態(tài)的特性。
    以采用ajax技術(shù)的應(yīng)用系統(tǒng)為例:因為不需要完全刷新就可以與服務(wù)器進(jìn)行交互,使得有狀態(tài)客戶機(jī)成為可用選擇。基于瀏覽器的應(yīng)用程序代碼可以在必要時獲取新的服務(wù)器數(shù)據(jù),并把這些數(shù)據(jù)織入當(dāng)前頁面。
    將處理和狀態(tài)前移到每個客戶機(jī)上后,實現(xiàn)了無狀態(tài)的服務(wù)端;同時緩存服務(wù)器可以緩存ajax引擎(比如dojo, prototype etc.),以及狀態(tài)無關(guān)的數(shù)據(jù)。
    個人理解,多種瀏覽器的plug-in技術(shù)(Sun的applet, MS的ActiveX等等),都應(yīng)該是這種思路的不同技術(shù)實現(xiàn)。

    經(jīng)過以上分析整理,實際上已經(jīng)涉及到了時下流行的一個概念-REST.

    REST(Representational State Transfer)來源于Dr. Roy Thomas Fielding,  <Architectural Styles and the Design of Network-based Software Architectures>
    當(dāng)瀏覽器瀏覽訪問一個url資源時,返回的頁面即為該url資源的representation,這個representation給瀏覽器一個state,當(dāng)
    瀏覽器訪問下一個url資源時,瀏覽器的state就transfer了。
    REST其本身只是為分布式超媒體系統(tǒng)(distributed hypermedia systems)設(shè)計的一種架構(gòu)風(fēng)格,而不是某個標(biāo)準(zhǔn),框架。

    REST的設(shè)計準(zhǔn)則
        1.網(wǎng)絡(luò)上的所有事物都被抽象為資源(resource);
        2.每個資源對應(yīng)一個唯一的資源標(biāo)識符(resource identifier);
        3.通過通用的連接器接口(generic connector interface)對資源進(jìn)行操作;
        4.對資源的各種操作不會改變資源標(biāo)識符;
        5.所有的操作都是無狀態(tài)的(stateless)。

    REST中的資源所指的不是數(shù)據(jù),而是數(shù)據(jù)和表現(xiàn)形式的組合。
    REST是基于Http協(xié)議的,任何對資源的操作行為都是通過Http協(xié)議來實現(xiàn)。以往的Web開發(fā)大多數(shù)用的都是Http協(xié)議中的GET和POST方法,對其他方法很少使用,這實際上是因為對Http協(xié)議認(rèn)識片面的理解造成的。Http不僅僅是一個簡單的運載數(shù)據(jù)的協(xié)議,而是一個具有豐富內(nèi)涵的網(wǎng)絡(luò)軟件的協(xié)議。他不僅僅能對互聯(lián)網(wǎng)資源進(jìn)行唯一定位,而且還能告訴我們?nèi)绾螌υ撡Y源進(jìn)行操作。Http把對一個資源的操作限制在4個方法以內(nèi):GET, POST,PUT和DELETE,這正是對資源CRUD操作的實現(xiàn)。由于資源和URI是一一對應(yīng)的,執(zhí)行這些操作的時候URI是沒有變化的,這和以往的 Web開發(fā)有很大的區(qū)別。正由于這一點,極大的簡化了Web開發(fā),也使得URI可以被設(shè)計成更為直觀的反映資源的結(jié)構(gòu),這種URI的設(shè)計被稱作 RESTful的URI。這位開發(fā)人員引入了一種新的思維方式:通過URL來設(shè)計系統(tǒng)結(jié)構(gòu)。當(dāng)然了,這種設(shè)計方式對一些特定情況也是不適用的,也就是說不是所有的URI都可以RESTful的。
    REST 之所以可以提高系統(tǒng)的可伸縮性,就是因為它要求所有的操作都是無狀態(tài)的。由于沒有了上下文(Context)的約束,做分布式和集群的時候就更為簡單,也可以讓系統(tǒng)更為有效的利用緩沖池(Pool)。并且由于服務(wù)器端不需要記錄客戶端的一系列訪問,也減少了服務(wù)器端的性能。

    posted @ 2008-03-24 16:35 bluoy 閱讀(394) | 評論 (0)編輯 收藏

           Java語言編程中更新XML文檔的四種方法。第一種方法是直接讀寫XML文件。第二種方法是使用Apache Crimson的XmlDocument類,這種方法極為簡單,使用方便,如果你選用Apache Crimson作為XML解析器,那么不妨使用這種方法,不過這種方法似乎效率不高(源于效率低下的Apache Crimson),另外,高版本的JAXP或者是Java XML Pack、JWSDP不直接支持Apache Crimson,亦即這種方法不通用。第三種方法是使用JAXP的XSLT引擎(Transformer類)來輸出XML文檔,這種方法也許是標(biāo)準(zhǔn)的方法 了,使用起來十分靈活,特別是可以自如控制輸出格式,我們推薦采用這種方法。第四種方法是第三種方法的變種,采用了Xalan XML Serializer,引入了串行化操作,對于大量文檔的修改/輸出有優(yōu)越性,可惜的是要重復(fù)設(shè)置XSLT引擎的屬性和XML Serializer的輸出屬性,比較麻煩,而且依賴于Apache Xalan和Apache Xerces技術(shù),通用性略顯不足。除此之外,實際上應(yīng)用別的API(比如dom4j、JDOM、Castor、XML4J、Oracle XML Parser V2)也有很多辦法可以更新XML文檔。

    概念介紹
            Xerces/Crimson是XML解析器,Xalan是XSLT處理器,xml-apis.jar實際上是JAXP。
            Apache Crimson的前身是Sun Project X Parser, 至今Apache Crimson的很多代碼都是從X Parser中直接移植過來的。早期的JAXP是和X Parser捆綁在一起的。后來的 JAXP和Apache Crimson捆綁在一起,比如JAXP 1.1。最新的JAXP 1.2 EA(Early Access)改弦更張,采用性能更好的Apache Xalan和Apache Xerces分別作為XSLT處理器和XML解析器,不能直接支持Apache Crimson了。
            dom4j(dom4j.jar)是一個Java的XML API,類似于jdom,用來讀寫XML文件的。dom4j是一個非常非常優(yōu)秀的Java XML API,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,對主流的Java XML API進(jìn)行的性能、功能和易用性的評測,dom4j無論在那個方面都是非常出色的。

    posted @ 2008-03-19 10:27 bluoy 閱讀(1980) | 評論 (0)編輯 收藏

    .NET垃圾收集器的過去、現(xiàn)在和未來(一)

    Patrick Dussud介紹:
    Patrick Dussud在微軟工作了11年,曾經(jīng)負(fù)責(zé)VBA、Jscript、MS Java等語言運行時的垃圾收集器(Garbage Collector)的設(shè)計,目前負(fù)責(zé).NET CLR垃圾收集器的設(shè)計。他是.NET CLR的架構(gòu)師,WinFX的首席架構(gòu)師,Windows架構(gòu)師組的成員。
    在微軟之前,Patrick是德州儀器(TI)Explorer工作站系統(tǒng)的主要設(shè)計人,Lucid公司Energize產(chǎn)品的首席架構(gòu)師。

    關(guān)鍵內(nèi)容摘要

    1. 微管理 / 內(nèi)存的顯式管理 ---  手動內(nèi)存管理(new/delete)
            你必須保證在釋放之前內(nèi)存沒有被別人使用,如果你把內(nèi)存給了別人,往往你就不確定應(yīng)該何時釋放內(nèi)存了。當(dāng)你釋放了內(nèi)存,不知道別人正在使用這塊內(nèi)存時,就產(chǎn)生了程序崩潰的問題。所以,當(dāng)你顯式進(jìn)行“new”和“delete”時,內(nèi)存管理是一個復(fù)雜的問題,并且,此時你的代碼不可組合。要么你必須確定對自己的內(nèi)存有完全的控制,因此,要達(dá)到這種完全隔離的目的,你必須在將內(nèi)存?zhèn)鬟f給別的模塊時進(jìn)行完全拷貝,這樣,別的模塊就只對這個完全拷貝的內(nèi)存負(fù)責(zé)。要么你就得在某個地方形成對整個內(nèi)存池的統(tǒng)一的管理,這就是自動化內(nèi)存管理,這就是垃圾收集器的工作。

    2. 對象終止器的調(diào)用時機(jī)由垃圾收集器決定,這些對象的析構(gòu)函數(shù)被調(diào)用的先后順序是無法預(yù)先確定的。提出了“關(guān)鍵終止化對象”的概念。當(dāng)有一系列對象需要終止化時,關(guān)鍵終止化對象最后被終止化,直到上層對象干完工作前。

    3.  工作機(jī)理: 垃圾收集器首先遍歷所有的棧和靜態(tài)變量,然后返回最初的樹集。然后遍歷樹集對程序能夠到達(dá)的每一個對象作標(biāo)記。此時,我們就能逐個對象地檢查內(nèi)存,發(fā)現(xiàn)它被標(biāo)記了,好的,留下。沒有被標(biāo)記?喔,我們有一個垃圾了。

    4.  垃圾收集器的絕大部分速度和效率都來源于對回收策略的調(diào)整。通過保持內(nèi)存緊湊,形成緩存本地化,頁面本地化等等優(yōu)勢,很可能其效率甚至高于傳統(tǒng)“new”和“delete” 操作,尤其是對于非常難以管理的服務(wù)器內(nèi)存來說更是如此。

    posted @ 2008-03-13 21:26 bluoy 閱讀(347) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲一区二区三区国产精品无码| 狠狠入ady亚洲精品| 午夜视频免费成人| 特级毛片爽www免费版| 久久精品亚洲日本佐佐木明希| 91在线视频免费播放| 美女被免费网站在线视频免费 | 在线v片免费观看视频| 免费看美女午夜大片| 亚洲视频中文字幕在线| 国产一区二区三区免费在线观看| a毛片在线免费观看| 亚洲Av永久无码精品一区二区| 国产aⅴ无码专区亚洲av麻豆| 青青在线久青草免费观看| 日韩电影免费在线观看网址| 亚洲第一二三四区| 亚洲一区无码精品色| 成年女人毛片免费播放人| 西西人体免费视频| 看亚洲a级一级毛片| 亚洲成A∨人片在线观看无码| 红杏亚洲影院一区二区三区| 一二三四免费观看在线视频中文版| 国产高清对白在线观看免费91| 亚洲乱码在线观看| 亚洲AV第一页国产精品| 亚洲国产人成精品| 妞干网免费观看视频| 99在线视频免费| 99re6在线视频精品免费| 综合偷自拍亚洲乱中文字幕| 亚洲中文字幕久在线| 亚洲AV人人澡人人爽人人夜夜| 亚洲第一成人影院| 韩国二级毛片免费播放| 国产免费女女脚奴视频网| 伊人免费在线观看高清版| 黄色网址免费在线观看| 瑟瑟网站免费网站入口| 亚洲AV日韩AV无码污污网站|