• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            人生亦編程

            --Programmable Life
            posts - 86, comments - 43, trackbacks - 0, articles - 7

                打開燈,凌晨4:30,我竟然醒了,毫無睡意,閉上眼,依稀是好友的面孔,高中的朋友,大學(xué)的朋友,仿佛又回到他(她)們身邊的樣子,看來我是寂寞了。耳旁依稀是以前喜歡聽的一首歌,悲傷的、凄涼的、很多年不曾仔細(xì)聽過、自從上大學(xué)以后、那首《浪人情歌》,看來我就鐘意這悲傷的調(diào)調(diào)。
                 昨晚是自己煮面吃的,七年了,七年不曾操刀,如今切起菜來,感覺就是一個(gè)大漢拿著繡花針對(duì)針眼(其實(shí)我寧愿做針線活的),每一刀都切的很慢,每一刀都切得很仔細(xì),每一刀都像是在切一件藝術(shù)品......(我實(shí)在不知道說什么了,所以用省略號(hào)代替)。
                 算了,突然沒了寫下去的興致,繼續(xù)睡覺吧,NIGHT!
                  
                                                                                                                                    --by-- 在寒風(fēng)中葉落
                                                                                                                                                                         06年9月1日

            ps.這是晚上寫的,所以沒有條理的。

            posted @ 2006-09-01 20:16 人生亦編程 閱讀(87) | 評(píng)論 (0)編輯 收藏

            有個(gè)叫profiler的工具,是用來檢測代碼效率的,現(xiàn)轉(zhuǎn)用法如下,用得著的時(shí)候再去學(xué)它。

            NetBeans IDE 4.1/5.0 Profiler 教程

            本文旨在介紹配合使用 NetBeans Profiler v5.0 或 Profiler Milestone 8 的內(nèi)容。如果您使用的是 Milestone 5,請(qǐng)使用此版本。如果您使用的是 Milestone 6,請(qǐng)使用此版本。

            預(yù)計(jì)持續(xù)時(shí)間:50 分鐘

            NetBeans Profiler 是一個(gè)功能強(qiáng)大的工具,它提供了有關(guān)應(yīng)用程序運(yùn)行時(shí)行為的重要信息。NetBeans Profiler 產(chǎn)生的開銷相對(duì)來說較小,它可以跟蹤線程狀態(tài)、CPU 性能和內(nèi)存使用情況。本教程將向您介紹如何使用 NetBeans Profiler 來完成以下操作:

            • 監(jiān)視應(yīng)用程序的運(yùn)行時(shí)行為,其中包括:
              • 堆內(nèi)存大小
              • 垃圾回收統(tǒng)計(jì)信息
              • 線程計(jì)數(shù)
              • 線程狀態(tài):運(yùn)行、休眠、等待、受阻
            • 確定應(yīng)用程序方法使用的 CPU 時(shí)間
            • 監(jiān)視應(yīng)用程序創(chuàng)建對(duì)象的過程

            先決條件

            本教程假定您已經(jīng)具有了一些基本的 Java 編程和 NetBeans IDE 使用經(jīng)驗(yàn)。

            教程所需的軟件:

            • 下載并安裝 Java 2 Platform Standard Edition v5.0, Update 4(或更高版本)。請(qǐng)注意,NetBeans IDE 需要完整的 JDK,而不僅僅是 JRE。請(qǐng)記錄此安裝目錄。
            • 下載并安裝 NetBeans IDE v4.1 或 v5.0。請(qǐng)記錄此安裝目錄。當(dāng)系統(tǒng)提示您選擇 JDK 時(shí),請(qǐng)指定 v5.0, Update 4(或更高版本的)JDK。
            • 下載并安裝用于 NetBeans IDE v5.0 的 NetBeans Profiler v5.0。如果使用的是 NetBeans IDE 4.1,請(qǐng)下載 Milestone 8
              Profiler 安裝程序會(huì)要求您修改 NetBeans IDE 安裝;請(qǐng)指定用于 NetBeans IDE 的安裝目錄。
              注意:Profiler v5.0 只能與 NetBeans IDE v5.0 一起使用;而 Profiler Milestone 8 只能與 NetBeans IDE v4.1 一起使用。
            • 下載教程 zip 文件,其中包括練習(xí)中使用的項(xiàng)目。

            本文使用的表示法

            • <NETBEANS_HOME> - NetBeans IDE 安裝目錄
            • <USER_HOME> - 用戶的 home 目錄
            • <tutorial_root> - 解壓縮教程 zip 文件所在的目錄
              • 本文使用 <tutorial_root> 來表示解壓縮此教程的 zip 文件所在的目錄。此教程的 zip 文件的名稱為 profilertutorial.zip
              • 將教程 zip 文件解壓縮到 <tutorial_root> 目錄時(shí),系統(tǒng)會(huì)創(chuàng)建一個(gè)名為 netbeansprofiler 的子目錄。例如,在 Windows 操作系統(tǒng)中,如果已將教程 zip 文件解壓縮到驅(qū)動(dòng)器 E:\ 的根目錄中,則系統(tǒng)會(huì)創(chuàng)建 E:\netbeansprofiler 子目錄。在 Solaris/Linux 操作系統(tǒng)中,如果已將教程 zip 文件解壓縮到 /home/username 目錄中,則系統(tǒng)會(huì)創(chuàng)建 /home/username/netbeansprofiler 子目錄。

            教程練習(xí)

            參考資源:



            練習(xí) 0:安裝并配置教程環(huán)境

            在開始學(xué)習(xí)教程之前,請(qǐng)先檢查以下內(nèi)容:

            1. 啟動(dòng) NetBeans IDE,并確認(rèn) IDE 已打開。通過選擇“性能分析”>“幫助”>“關(guān)于性能分析器...”,驗(yàn)證安是否裝了 NetBeans Profiler。
              • 在 Windows 操作系統(tǒng)中,雙擊 NetBeans IDE 圖標(biāo)
              • 在 Solaris/Linux 操作系統(tǒng)中,打開終端窗口,然后鍵入 <NETBEANS_HOME>/bin/netbeans
            2. 僅限 NetBeans IDE v4.1:安裝所需的修補(bǔ)程序。
              1. 從“工具”菜單中選擇“更新中心”,以訪問 NetBeans 更新中心。
              2. 確保選中了“NetBeans 修補(bǔ)程序更新中心”,然后單擊“下一步”按鈕。建立連接后,將顯示一個(gè)更新列表。
              3. 在“NetBeans 修補(bǔ)程序更新中心”條目下,選擇“NetBeans Profiler(J2EE 項(xiàng)目 - Tomcat5 支持)”。該操作還將自動(dòng)選擇 "Tomcat 5 Server" 條目。
              4. 單擊“下一步”按鈕,并按照說明進(jìn)行操作以便 IDE 可以安裝這些修補(bǔ)程序。




            練習(xí) 1:監(jiān)視 Swing 應(yīng)用程序中的線程狀態(tài)(15 分鐘)

            本練習(xí)的學(xué)習(xí)目的:

            在本練習(xí)中,您將學(xué)習(xí)如何使用 NetBeans Profiler 監(jiān)視 J2SE 應(yīng)用程序中的線程狀態(tài)。這樣,您就可以診斷樣例應(yīng)用程序中的性能問題。

            背景信息:

            Swing 庫為 J2SE 應(yīng)用程序提供了圖形用戶界面組件。Swing 庫會(huì)使用到多個(gè)線程,利用 NetBeans Profiler 這一功能強(qiáng)大的工具,您可以分析出每個(gè)線程所花費(fèi)的處理時(shí)間,從而利用這些分析信息來解決性能問題。

            執(zhí)行步驟:

            1. 選擇“文件”>“打開項(xiàng)目”。找到 <tutorial_root>/netbeansprofiler/exercises 文件夾。選擇 exercise1 文件夾,然后單擊“打開項(xiàng)目文件夾”按鈕。
            2. 在“項(xiàng)目”窗口中,右鍵單擊 exercise1 條目并選擇“清理并生成項(xiàng)目”。然后,再次右鍵單擊 exercise1 條目并選擇“運(yùn)行項(xiàng)目”。此時(shí),將顯示該程序的窗口,如下所示。

              查看應(yīng)用程序的窗口

            3. 將 "Seconds Before Notification" 設(shè)置為 30。
            4. 單擊 "Start!" 按鈕。請(qǐng)注意,該程序無法正確地刷新屏幕。
            5. 單擊 "Exit" 按鈕。請(qǐng)注意,該程序根本不會(huì)作出響應(yīng)。
            6. 將另一個(gè)窗口放在該窗口的某一部分上,以遮擋該窗口的視圖。當(dāng)移開另一個(gè)窗口時(shí),您會(huì)注意到樣例應(yīng)用程序沒有相應(yīng)地刷新其窗口。如下面的示例所示。


            7. 30 秒后,最終將顯示一個(gè)消息框,如下所示。單擊消息框上的 "OK" 按鈕。


            8. 應(yīng)用程序窗口將再次開始響應(yīng)。單擊 "Exit" 按鈕將其關(guān)閉。
            9. 選擇“性能分析”>“分析主項(xiàng)目”。
            10. 如果出現(xiàn)一個(gè)對(duì)話框,詢問您是否允許修改項(xiàng)目生成腳本,請(qǐng)單擊“確定”。如下面的示例所示。


            11. 此時(shí)會(huì)顯示“選擇性能分析任務(wù)”對(duì)話框。單擊占據(jù)較大區(qū)域的“監(jiān)視應(yīng)用程序”按鈕。
            12. 應(yīng)選中“啟用線程監(jiān)視”復(fù)選框。
            13. 單擊“運(yùn)行”按鈕。如果顯示一個(gè)對(duì)話框,指示您必須先收集 Profiler 的校準(zhǔn)信息,請(qǐng)單擊“確定”按鈕。如下面的示例所示。

              選擇“性能分析”>“高級(jí)命令”>“運(yùn)行性能分析器校準(zhǔn)”。完成校準(zhǔn)后,Profiler 會(huì)顯示一個(gè)對(duì)話框,請(qǐng)單擊“確定”按鈕。如下面的示例所示。

              要進(jìn)行性能分析,請(qǐng)返回至上面的第 9 步。

            14. 完成上述步驟后,將啟動(dòng)該應(yīng)用程序,并且 IDE 會(huì)顯示“性能分析器”控制面板,如下所示。


            15. 性能分析器將在其主窗口中顯示線程狀態(tài),如下面的示例所示。


              它使用顏色編碼來顯示線程狀態(tài)。

              • 綠色:線程正在運(yùn)行或準(zhǔn)備運(yùn)行。
              • 紫色:線程正在調(diào)用 Thread.sleep(),處于休眠狀態(tài)。
              • 黃色:線程正在調(diào)用 Object.wait(),處于等待狀態(tài)。
              • 紅色:線程在嘗試訪問同步的塊或方法時(shí)受阻。

            16. 找到樣例 Swing 應(yīng)用程序的窗口(NetBeans IDE 窗口可能在其上面)。單擊樣例應(yīng)用程序中的 "Start!" 按鈕,同時(shí)監(jiān)視標(biāo)記為 AWT-EventQueue-0 的線程所發(fā)生的變化。它將變?yōu)榫G色并持續(xù)這種狀態(tài)整整 30 秒鐘,如以下樣例所示。

              此圖形顯示了應(yīng)用程序沒有響應(yīng)的原因。標(biāo)記為 AWT-EventQueue-0 的線程是 Swing 用來處理窗口事件的事件分發(fā)線程 (Event Dispatch Thread, EDT)。在正常運(yùn)行的 Swing 應(yīng)用程序中,EDT 的大部分時(shí)間處于等待狀態(tài)而運(yùn)行的時(shí)間卻很少,因?yàn)樗挥性诜职l(fā)事件時(shí)才會(huì)運(yùn)行很短的一段時(shí)間。但是,如果應(yīng)用程序中的事件處理程序未立即返回,則程序?qū)⑼V鬼憫?yīng),就像在此示例中一樣。

            17. 30 秒后,屏幕將顯示應(yīng)用程序的消息框。找到該消息框(NetBeans IDE 窗口可能在其上面)并單擊 "OK" 按鈕。然后,單擊樣例應(yīng)用程序的 "Exit" 按鈕,將其關(guān)閉。
            18. “項(xiàng)目”窗口與“性能分析器”控制面板共享同一個(gè)空間;單擊“項(xiàng)目”標(biāo)簽將會(huì)顯示“項(xiàng)目”窗口。
            19. 在“項(xiàng)目”窗口中,雙擊 exercise1 條目以將其展開,然后展開“源包”和 profilingthreads 條目。右鍵單擊 DisplayForm.java 條目并選擇“打開”。
            20. 在包含 DisplayForm.java 的編輯器窗口中,取消第 132 行至第 157 行的代碼塊注釋。提示:如果未將編輯器配置為顯示行號(hào),請(qǐng)選擇“視圖”>“顯示行號(hào)”。
            21. 在包含 DisplayForm.java 的編輯器窗口中,取消(或注釋掉)第 122 行到第 128 行的代碼塊注釋。下圖突出顯示了取消注釋的代碼塊。


            22. 選擇“文件”>“保存”。您剛才刪除了未正確使用 EDT 的代碼,并利用了更穩(wěn)定可靠的解決方案來替代它?,F(xiàn)在,應(yīng)用程序可以及時(shí)地作出響應(yīng)。
            23. 選擇“生成”>“生成主項(xiàng)目”(或按 F11 鍵)。
            24. 選擇“性能分析”>“分析主項(xiàng)目”。
            25. 將顯示“選擇性能分析任務(wù)”對(duì)話框。單擊占據(jù)較大區(qū)域的“監(jiān)視應(yīng)用程序”按鈕。
            26. 確保選中了“啟用線程監(jiān)視”。
            27. 單擊“運(yùn)行”按鈕。
            28. 在顯示樣例程序時(shí),單擊 "Start!" 按鈕。請(qǐng)注意,此時(shí)的性能分析線程圖已經(jīng)發(fā)生了變化,如以下示例所示。

              EDT 為黃色,應(yīng)用程序創(chuàng)建的名為 "Our SwingWorker #1" 的線程為綠色。由于 EDT 不是用來執(zhí)行耗時(shí)任務(wù)的,因此,按鈕和其他程序控件仍保持響應(yīng)的狀態(tài)。

            29. 在樣例程序中單擊 "Exit"。
            30. 右鍵單擊 Profiler 圖形中的 AWT-EventQueue-0 線程,然后選擇“線程詳細(xì)信息”。Profiler 會(huì)顯示一個(gè)餅圖,表明了每種狀態(tài)所花的時(shí)間;如以下示例所示。

              該圖形可以幫助您判斷程序在每個(gè)線程中所花費(fèi)的時(shí)間是否恰當(dāng)。上述示例是代碼修復(fù)后的示例,因此,它顯示了 EDT 在大部分時(shí)間中都處于等待狀態(tài)的情形,這正好是該線程應(yīng)具有的行為。

            31. 在“項(xiàng)目”窗口中,右鍵單擊 exercise1 條目,然后選擇“關(guān)閉項(xiàng)目”。

            小結(jié):

            在本練習(xí)中,您學(xué)習(xí)了如何使用 Profiler 來啟動(dòng)應(yīng)用程序,以及如何解釋 Profiler 的線程信息圖形,以此來跟蹤 Swing 應(yīng)用程序中的性能問題。

            返回頁首



            練習(xí) 2:確定某個(gè)方法使用的 CPU 時(shí)間(15 分鐘)

            本練習(xí)的學(xué)習(xí)目的:

            在本練習(xí)中,您將學(xué)習(xí)如何使用 Profiler 來確定某個(gè)應(yīng)用程序的方法所花費(fèi)的時(shí)間。

            背景信息:

            CPU 的性能問題通常與應(yīng)用程序的特定功能有關(guān)。例如,在報(bào)告系統(tǒng)中,某個(gè)報(bào)告的運(yùn)行速度可能比其他報(bào)告慢。只分析應(yīng)用程序中出現(xiàn)性能問題的部分,可以大大減少性能分析器產(chǎn)生的開銷。在本練習(xí)中,您將使用 NetBeans Profiler 來檢查 Web 應(yīng)用程序中 CPU 的使用情況。在練習(xí) 3 中,我們?nèi)匀皇褂迷摌永?Web 應(yīng)用程序來說明如何通過 Profiler 查找內(nèi)存泄漏。

            執(zhí)行步驟:

            1. 選擇“文件”>“打開項(xiàng)目”。找到 <tutorial_root>/netbeansprofiler/exercises 文件夾。選擇 exercise2 文件夾,并確保選中“作為主項(xiàng)目打開”。單擊“打開項(xiàng)目文件夾”按鈕。
            2. 在“項(xiàng)目”窗口中,單擊 exercise2 條目,然后從菜單中選擇“生成”>“清理并生成主項(xiàng)目”。
            3. 從菜單中選擇“性能分析”>“分析主項(xiàng)目”。如果出現(xiàn)一個(gè)對(duì)話框,詢問您是否允許修改項(xiàng)目生成腳本,請(qǐng)單擊“確定”。
            4. 將顯示“選擇性能分析任務(wù)”對(duì)話框。
            5. 單擊“分析性能”按鈕。
            6. 選擇“部分應(yīng)用程序”單選按鈕。然后,單擊位于“部分應(yīng)用程序”單選按鈕旁邊的“選擇”按鈕。此時(shí)將顯示“指定根方法”窗口。

              注意:下面的三個(gè)步驟僅適用于 Milestone 8。

            7. 在“指定根方法”窗口中,單擊“從項(xiàng)目添加...”按鈕以添加要分析的根方法。將會(huì)顯示“選擇方法”窗口。
            8. 在“選擇方法”窗口中,單擊“選擇”按鈕。Profiler 將顯示“選擇類”窗口。
            9. 在“類名”文本字段中輸入 Per。等待 IDE 為您顯示適用的類列表。選擇 Performance 類。單擊“打開”按鈕以打開其方法列表。

              注意:下面的兩個(gè)步驟只適用于 Profiler v5.0。

            10. 在“指定根方法”窗口中,單擊“從項(xiàng)目添加...”按鈕以添加要分析的根方法。將會(huì)顯示“選擇方法”窗口。
            11. 在“類名”文本字段中,鍵入 demo.Performance,然后按 Enter 鍵。

              查看“選擇方法”對(duì)話框

            12. 在根方法列表中單擊 processRequest 方法以將其選中,然后單擊“確定”按鈕。您剛才已將 demo.Performance.processRequest 選中為性能分析的根方法。這意味著,性能分析器將分析 demo.Performance.processRequest 方法和它調(diào)用的所有方法,以及這些方法又調(diào)用的所有方法,依此類推。性能分析器將從 demo.Performance.processRequest 開始,通過分析方法調(diào)用圖形來確定哪些方法需要分析。它將只分析那些需要分析的方法,應(yīng)用程序的其余部分將在沒有任何性能分析開銷的情況下繼續(xù)以最快的速度運(yùn)行。
            13. 在“指定根方法”窗口中單擊“確定”按鈕。
            14. 在“分析性能”窗口中,從過濾器列表中選擇“快速過濾器”,然后單擊位于“快速過濾器”條目旁邊的 "..." 按鈕以指定進(jìn)行分析的方法。將顯示“設(shè)置快速過濾器”窗口。驗(yàn)證是否已選中了“排除”單選按鈕。然后,在“過濾器值”文本字段中輸入 org.apache 并單擊“確定”按鈕。這樣,性能分析器將不分析所有 org.apache 包(及其子包)中的方法,即使這些方法被選定的根方法調(diào)用也是如此。這會(huì)減少性能分析的開銷,并過濾掉無關(guān)的信息。

              “設(shè)置快速過濾器”對(duì)話框

            15. 在“選擇性能分析任務(wù)”窗口中,單擊“運(yùn)行”按鈕。如果出現(xiàn)一個(gè)對(duì)話框,要求您提供校準(zhǔn)信息,請(qǐng)單擊“確定”按鈕;在性能分析器顯示的對(duì)話框說明校準(zhǔn)已完成后,請(qǐng)單擊該對(duì)話框的“確定”按鈕。
            16. IDE 將啟動(dòng) Tomcat,并在 Web 瀏覽器窗口中顯示 Web 應(yīng)用程序的 index.jsp 頁。同時(shí),將在后臺(tái)運(yùn)行性能分析器。注意:缺省情況下,將在成為焦點(diǎn)的瀏覽器窗口中顯示 index.jsp 頁;您可能需要打開另一個(gè)瀏覽器窗口,以便在運(yùn)行 Web 應(yīng)用程序時(shí)可以閱讀這些說明。
            17. 因?yàn)橐堰x擇了 demo.Performance.processRequest 作為根方法,所以,您需要使用導(dǎo)致該根方法運(yùn)行的 Web 應(yīng)用程序部分:在 Web 瀏覽器中,單擊“性能問題”以轉(zhuǎn)至“性能”演示頁。在“性能”演示頁上的輸入文本字段中輸入 123456。請(qǐng)不要選中“已優(yōu)化”選項(xiàng)。單擊“提交查詢”按鈕,計(jì)算小于或等于 123456 的最大素?cái)?shù)。
            18. 需要幾秒鐘的時(shí)間才能出現(xiàn)響應(yīng),這是因?yàn)橛?jì)算最大素?cái)?shù)的算法存在一些性能問題,同時(shí),在監(jiān)視 processRequest 方法的性能時(shí),性能分析器也會(huì)產(chǎn)生一些開銷。
            19. 當(dāng)瀏覽器中顯示 "123449" 結(jié)果后,請(qǐng)單擊 “獲取結(jié)果”按鈕 按鈕,或者選擇“性能分析”>“生成收集結(jié)果的快照”。單擊位于 CPU 使用情況快照底部的“組合”標(biāo)簽。性能分析器將顯示最新的性能結(jié)果,如下所示。

              查看性能結(jié)果。

              頂部窗口顯示了從根方法開始的完整方法調(diào)用圖形。底部窗口是重點(diǎn)描述的部分;它顯示了應(yīng)用程序中的熱點(diǎn),即執(zhí)行時(shí)間最長的那些方法。

            20. 要查看并解釋這些結(jié)果,請(qǐng)注意 processRequest 方法總共運(yùn)行的時(shí)間為 4308 毫秒 (ms)。然而您會(huì)發(fā)現(xiàn),運(yùn)行 processRequest 方法本身的指令只花費(fèi)了很少的時(shí)間,processRequest 的“自用時(shí)間”僅為 10.1 毫秒。絕大部分時(shí)間花在了 processRequest 調(diào)用的其他方法上。底部窗口中顯示的熱點(diǎn)是按“自用時(shí)間”進(jìn)行排序的。通過查看該列表,您可以看到 calculate 方法占用了 97.8% 的執(zhí)行時(shí)間。考慮到為 calculate 方法分配的工作量,這就不足為奇了。
            21. 為了幫助您確定如何優(yōu)化應(yīng)用程序,NetBeans Profiler 可以識(shí)別代碼中無法預(yù)料的瓶頸,或者識(shí)別妨礙應(yīng)用程序隨意縮放的瓶頸。單擊熱點(diǎn)列表中的 calculate 條目以了解時(shí)間究竟花在什么地方,這會(huì)更新調(diào)用圖形窗口以顯示 calculate。因?yàn)?calculate 方法不調(diào)用任何其他方法,所以請(qǐng)右鍵單擊 calculate 條目,然后選擇“轉(zhuǎn)至源代碼”以便檢查源代碼。您會(huì)發(fā)現(xiàn)它使用了效率很低的算法,所以應(yīng)該重新設(shè)計(jì)這種算法。
            22. 選擇“性能分析”>“重置收集的結(jié)果”以清除性能分析器的緩沖區(qū)。要將 calculate 的運(yùn)行時(shí)與優(yōu)化的算法 calculate2 作比較,請(qǐng)?jiān)?Web 瀏覽器中選中“已優(yōu)化”選項(xiàng),然后單擊“提交查詢”。等待顯示結(jié)果,然后重新選擇“性能分析”>“生成收集結(jié)果的快照”。請(qǐng)注意,processRequest 方法只運(yùn)行了 107 毫秒,而 calculate2 方法所花的時(shí)間還不到執(zhí)行時(shí)間的 10%!

              查看性能結(jié)果。


            23. 注意:我們將繼續(xù)在本練習(xí)的基礎(chǔ)上進(jìn)行下面的練習(xí),因此,請(qǐng)不要關(guān)閉任何窗口。

            小結(jié):

            在本練習(xí)中,您學(xué)習(xí)了如何使用性能分析器執(zhí)行方法性能分析。

            返回頁首



            練習(xí) 3:分析對(duì)象創(chuàng)建過程以查找內(nèi)存泄漏(20 分鐘)

            本練習(xí)的學(xué)習(xí)目的:

            作為練習(xí) 2 的后續(xù)練習(xí),我們將在本練習(xí)中學(xué)習(xí)如何解釋某些性能分析器的圖形以監(jiān)視應(yīng)用程序創(chuàng)建對(duì)象的過程。下面將顯示一個(gè)內(nèi)存泄漏示例。

            執(zhí)行步驟:

            1. 本練習(xí)是在練習(xí) 2 的基礎(chǔ)上進(jìn)行的,因此,請(qǐng)務(wù)必遵循練習(xí) 2 中的步驟。
            2. 從菜單中選擇“性能分析”>“分析主項(xiàng)目”。如果出現(xiàn)一個(gè)對(duì)話框,詢問您是否要停止當(dāng)前的性能分析器進(jìn)程以啟動(dòng)新進(jìn)程(如下所示),請(qǐng)單擊“是”按鈕繼續(xù)執(zhí)行。

              “停止并重新啟動(dòng)性能分析器”對(duì)話框

              將顯示“選擇性能分析任務(wù)”對(duì)話框。

            3. 在“選擇性能分析任務(wù)”對(duì)話框中,單擊占據(jù)較大區(qū)域的“監(jiān)視應(yīng)用程序”按鈕。
            4. 單擊“運(yùn)行”按鈕。IDE 將會(huì)在左側(cè)顯示“性能分析器”控制臺(tái)。單擊 查看“遙測概覽”按鈕 按鈕,或者選擇“性能分析”>“視圖”>“遙測概覽”。NetBeans Profiler 將在底部的輸出窗口中顯示三個(gè)圖形,如下所示。

              查看監(jiān)視器圖形

              在左側(cè)的圖形中,紅色的陰影部分表示分配的 JVM 堆大小。紫色的覆蓋部分表示實(shí)際使用的堆空間大小。在上面的示例中,上次更新所分配的堆大小已超過了 20 MB。其中,實(shí)際用來保存 Java 對(duì)象的堆大小略大于 10 MB。

              右側(cè)圖形顯示了 JVM 中的活動(dòng)線程數(shù)。

              中間的圖形顯示了兩種重要的堆統(tǒng)計(jì)信息。

              • 藍(lán)線是 JVM 執(zhí)行垃圾回收的時(shí)間占執(zhí)行時(shí)間的百分比,它是以圖形右側(cè)上的 Y 軸為參照繪制的。JVM 執(zhí)行垃圾回收所花的時(shí)間不能用來運(yùn)行應(yīng)用程序。因此,如果藍(lán)線占據(jù)較大的百分比,則需要考慮調(diào)整 JVM,方法是:配置更大的堆大?。ㄕ?qǐng)參閱 -Xmx 參數(shù)文檔),或者轉(zhuǎn)換到不同的垃圾回收算法中。
              • 紅線表示存活的生成數(shù),它是以圖形左側(cè)的 Y 軸為參照進(jìn)行繪制的。存活生成數(shù)是指 JVM 堆上所有 Java 對(duì)象不同生存期的數(shù)量,其中“生存期”被定義為對(duì)象存活時(shí)的垃圾回收次數(shù)。如果存活生成數(shù)的值較小,則表明堆上的大部分對(duì)象的存活時(shí)間基本相同。但是,如果存活生成數(shù)的值隨著時(shí)間的變化而增長到一個(gè)很高的比率,則表明應(yīng)用程序正在分配新的對(duì)象,同時(shí)保持對(duì)已分配的多個(gè)舊對(duì)象的引用。如果實(shí)際上不再需要這些舊對(duì)象,則應(yīng)用程序正在浪費(fèi)(或“泄漏”)內(nèi)存。

            5. 性能分析器可以對(duì) CPU 性能或內(nèi)存使用情況進(jìn)行詳細(xì)的分析,但不能同時(shí)進(jìn)行這兩種分析。要了解有關(guān)在 JVM 堆上分配對(duì)象以及執(zhí)行對(duì)象的垃圾回收的詳細(xì)信息,請(qǐng)修改性能分析器的設(shè)置。單擊 查看“修改性能分析”按鈕 按鈕,或者選擇“性能分析”>“修改性能分析”。
            6. 單擊“分析內(nèi)存使用情況”按鈕。
            7. 選擇“記錄對(duì)象創(chuàng)建和垃圾回收”單選按鈕。
            8. 選中“記錄分配的棧跟蹤”復(fù)選框。
            9. 單擊“確定”按鈕。
            10. 現(xiàn)在,您已經(jīng)選擇了分析內(nèi)存使用情況,您需要運(yùn)行應(yīng)用程序以確定它是否有效地使用了內(nèi)存。單擊“內(nèi)存泄漏”以轉(zhuǎn)至 MemoryLeak 演示頁。
            11. 在 MemoryLeak 演示頁上,單擊“開始泄漏”。
            12. 請(qǐng)注意存活生成數(shù)圖形中的峰值,如以下示例所示。這表明可能出現(xiàn)了內(nèi)存泄漏。

              存活生成數(shù)圖形所示的峰值。

            13. 選擇“性能分析”>“視圖”>“實(shí)時(shí)結(jié)果”。Profiler 將顯示 JVM 堆中分配的對(duì)象的動(dòng)態(tài)視圖。缺省情況下,它將按每個(gè)類的所有實(shí)例使用的字節(jié)數(shù)進(jìn)行排序。由于懷疑可能出現(xiàn)了內(nèi)存泄漏,因此,請(qǐng)單擊“生成數(shù)”列,按每個(gè)類的不同對(duì)象生存期數(shù)量對(duì)顯示結(jié)果進(jìn)行排序。下面顯示了得到的顯示結(jié)果示例。

              先前的生成數(shù)圖形。
              這些列提供了對(duì)象分配和內(nèi)存使用情況信息。

              • “分配的對(duì)象”是性能分析器正在監(jiān)視的對(duì)象數(shù)。在本示例中,共監(jiān)視了 38 個(gè) float[] 實(shí)例。缺省情況下,該數(shù)字約為應(yīng)用程序?qū)嶋H分配的對(duì)象數(shù)的 10%。通過只監(jiān)視已創(chuàng)建對(duì)象的一部分,性能分析器可以顯著地減少它在 JVM 中的開銷,這樣,應(yīng)用程序就幾乎可以按最快的速度運(yùn)行了。
              • “活動(dòng)對(duì)象”是仍在 JVM 堆中并因此占用內(nèi)存的已分配對(duì)象數(shù)。
              • 兩個(gè)“活動(dòng)字節(jié)”列顯示了活動(dòng)對(duì)象所占用的堆內(nèi)存量。一個(gè)列顯示圖形,另一個(gè)列顯示文本。
              • “平均生存期”值是使用活動(dòng)對(duì)象計(jì)算的。每個(gè)對(duì)象的生存期是它存活時(shí)的垃圾回收次數(shù)。生存期總和除以活動(dòng)對(duì)象數(shù)得到的結(jié)果就是平均生存期。
              • “生成數(shù)”值是使用活動(dòng)對(duì)象計(jì)算的。與平均生存期相同,對(duì)象生存期是它存活時(shí)的垃圾回收次數(shù)?!吧蓴?shù)”值是活動(dòng)對(duì)象的不同生存期數(shù)量。

            14. 隨著程序繼續(xù)運(yùn)行,性能分析器將更新顯示結(jié)果。請(qǐng)留意 float[]double[] 條目。請(qǐng)注意其生成數(shù)值是如何持續(xù)增加的。結(jié)果是,float[]double[] 在列表中持續(xù)上移。最終,它們會(huì)顯示在列表的頂部,緊靠 java.util.HashMap$Entry(其生代數(shù)值也在不斷增加)下面。隨著應(yīng)用程序繼續(xù)運(yùn)行,java.util.HashMap$Entryfloat[]double[] 生成數(shù)值持續(xù)增加,但任何其他類沒有增加。如下面的示例所示。

              后期的生成數(shù)圖形。

            15. 要了解導(dǎo)致生成數(shù)值持續(xù)增加的原因,請(qǐng)選擇“性能分析”>“生成收集結(jié)果的快照”。按生成數(shù)對(duì)顯示結(jié)果進(jìn)行排序。右鍵單擊 double[] 條目,然后選擇“顯示分配棧跟蹤”。性能分析器將顯示所有分配了一個(gè)或多個(gè) double[] 對(duì)象的方法。如下面的示例所示。

              double[] 棧跟蹤。
              請(qǐng)注意,在分配了 double[] 對(duì)象的方法中,只有一個(gè)方法創(chuàng)建了具有較大生成數(shù)值的 double[] 對(duì)象。該方法是 run(),它位于具有相應(yīng)名稱 demo.memoryleak.LeakThread 的類中。

            16. 右鍵單擊 run() 方法條目,然后選擇“轉(zhuǎn)至源代碼...”。性能分析器將顯示源代碼,如下所示。引起泄漏的代碼
              請(qǐng)注意,正在分配 double[]float[] 對(duì)象,并隨后將其放在 HashMap 中。但一直并未刪除它們,這意味著,HashMap 保留的引用將會(huì)妨礙 JVM 對(duì)這些對(duì)象進(jìn)行垃圾回收。這是非常典型的 Java 內(nèi)存泄漏:將對(duì)象放在 Map 中,然后就忘記處理它們了。由于本示例中使用的 Map 就是 HashMap,因此,關(guān)聯(lián)的 java.util.HashMap$Entry 對(duì)象也出現(xiàn)了泄漏。

            17. 選擇“性能分析”>“停止”來結(jié)束性能分析會(huì)話,或者單擊 “停止”按鈕 按鈕。
            18. 在“項(xiàng)目”窗口中,選擇 exercise2 條目,然后從菜單中選擇“文件”>“關(guān)閉項(xiàng)目”。

            小結(jié):

            在本練習(xí)中,您學(xué)習(xí)了如何使用性能分析器來監(jiān)視應(yīng)用程序創(chuàng)建對(duì)象的過程。您還看到了性能分析器在應(yīng)用程序出現(xiàn)內(nèi)存泄漏時(shí)所提供的各種類型的分析指數(shù)。

            posted @ 2006-08-31 08:42 人生亦編程 閱讀(552) | 評(píng)論 (0)編輯 收藏

            ?  1,事業(yè)永遠(yuǎn)第一
              雖然金錢不是萬能的,但沒有錢是萬萬不能的,雖然這句話很俗,但絕對(duì)有道理,所以30歲之前,請(qǐng)把你大部分精力放在你的事業(yè)上.
              2,別把錢看得太重
              不要抱怨自己現(xiàn)在工資低,銀行存款4位數(shù)以下,看不到前途,現(xiàn)在要做的就是努力學(xué)習(xí),即使你文憑再高,怎么把理論運(yùn)用到實(shí)踐還是需要一個(gè)很長的鍛煉過程,社會(huì)永遠(yuǎn)是一所最博大的大學(xué),它讓你學(xué)到的知識(shí)遠(yuǎn)比你在學(xué)校學(xué)到的重要得多,所以同樣,你也別太介意學(xué)歷低.30歲之前靠自己能力買車買房的人還是極少.
              3,學(xué)會(huì)體諒父母
              別嫌他們嘮叨,等你為人父了你就知道可憐天下父母心,在他們眼里你還是個(gè)孩子,但他們真的老了,現(xiàn)在得你哄他們開心了,也許只要你的一個(gè)電話,一點(diǎn)小禮物,就可以讓他們安心,很容易做到.
              4,交上好朋友
              朋友對(duì)你一生都影響重大,不要去結(jié)識(shí)太多酒肉朋友,至少得有一個(gè)能在關(guān)鍵時(shí)刻幫助你的朋友,如果遇到這么一個(gè)人,就好好把握,日后必定有用,不管他現(xiàn)在是富還是窮.
              5,別太相信愛情
              心中要有愛,但請(qǐng)別說也別相信那些瓊瑤阿姨小說里面的山盟海誓,世上本無永恒,重要的是責(zé)任,但女人心海底針,心變了,一切都成枉然,你要做的就是該出手時(shí)就出手,該放手時(shí)別猶豫.30歲之前的愛情不是假的,但只是大多數(shù)人都沒有能真正把握好的能力,所以學(xué)會(huì)量力而行.
              6,別擔(dān)心至今還保留初吻
              愛情不在多而在精,別以為自己20多歲還沒碰過女孩子就害怕自己永遠(yuǎn)找不到老婆
            .以后你會(huì)有很多機(jī)會(huì)認(rèn)識(shí)女孩子,要知道這個(gè)社會(huì)雖然男人多于女人,但現(xiàn)實(shí)是女人其實(shí)比男人更擔(dān)心這個(gè)問題.男人30一枝花,你在升值而不是貶值,成熟的愛情往往更美麗更長久,所以不要像瘋狗一樣看到女孩就想追,學(xué)會(huì)品味寂寞.
              7,不要沉迷于任何東西
              所謂玩物而喪志,網(wǎng)絡(luò)游戲是你在出校門之前玩的,你現(xiàn)在沒有多余的時(shí)間和精力花費(fèi)到這上面,否則你透支的東西以后都得償還.一個(gè)人要有興趣,愛好,但請(qǐng)分清楚輕重. ps.記得一個(gè)初中的好友給了我八個(gè)字:玩物喪志、玩人喪德。所以我一直過得都兢兢業(yè)業(yè)。
              8,年輕沒有失敗
              不要遇到挫折就灰心
            ,年輕人要時(shí)刻保持積極向上的態(tài)度.失敗了,重來過;失去了,再爭取別的。錯(cuò)過了,要分析,下次來,要把握;幼稚了,下次,成熟點(diǎn)。不要緊,會(huì)好的,哪怕到了極點(diǎn),也不要放棄,相信一定可以挺過去。不要消極,會(huì)好的。曾經(jīng)的錯(cuò),過去了,總不能回味在過去?,F(xiàn)在的,很好,累完了,很舒服。不要傷,總會(huì)有人在支撐你。
              9,不要輕易崇拜或者鄙視一個(gè)人
              人都有偶像,但請(qǐng)擁有你自己的個(gè)性.不要刻意去模仿一個(gè)人,因?yàn)槟憔褪悄?是唯一的,獨(dú)一無二的,要有自信.也不要全盤否定一個(gè)人,每個(gè)人是有價(jià)值的,如果你不能理解他,也請(qǐng)學(xué)會(huì)接受.
              10,要有責(zé)任心.
              不管你曾經(jīng)怎樣,但請(qǐng)從現(xiàn)在開始做一個(gè)正直的人.男人要有責(zé)任心,無論是工作還是生活上,一個(gè)有責(zé)任心的人才能讓別人有安全感,才能讓別人覺得你是一個(gè)值得信賴的人.我們不要懦弱,但請(qǐng)不要傷害愛你的人和你愛的人,尤其是善良的女孩,因?yàn)檫@個(gè)世界善良的女孩不多了,即使不想擁有,但也請(qǐng)讓她保持她美麗的心.
              11,男人的外貌并不重要.
              不要為自己的長相身高而過分擔(dān)心,一個(gè)心地善良,為人正直的男人遠(yuǎn)比那些空有英俊相貌,挺拔身材但內(nèi)心齷齪的男人要帥得多.如果有人以貌取人,請(qǐng)不要太在意,因?yàn)槟悴挥萌橐粋€(gè)低級(jí)趣味的人而難過.ps.感激涕零,終于遇到一個(gè)知音了......
              12,學(xué)會(huì)保護(hù)身體
              不要以為現(xiàn)在抽煙喝酒,熬夜通宵也沒什么事.那是因?yàn)槟愕纳眢w正處于你一生的黃金時(shí)段.30歲以后你就能明白力不從心這個(gè)實(shí)囊庖辶?身體是革命的本錢,沒有好的身體什么也做不了,所以要盡量讓自己過有規(guī)律的健康生活.
              13,別覺得一事無成.
              你現(xiàn)在還沒有資格談成功,當(dāng)然如果你有千萬資產(chǎn)的除外.一開始太固定的職業(yè)并不一定是好事,或許在不斷的改行當(dāng)中,你會(huì)學(xué)到更豐富的知識(shí),而且可以挖掘出自己的潛能,找到最適合你的工作.
              14,請(qǐng)認(rèn)真工作
              即使你現(xiàn)在的工作再怎么無聊再怎么低級(jí),也請(qǐng)你認(rèn)真去對(duì)待,要知道任何成功人士都是從最小的事做起,或許你現(xiàn)在學(xué)不到多么了不起的知識(shí),但起碼你要學(xué)會(huì)良好的工作態(tài)度和工作方法,這對(duì)以后很重要.
              15,請(qǐng)認(rèn)真對(duì)待感情.
              不要羨慕那些換女人像換鞋一樣的花花公子,逢場作戲的愛情只是讓你浪費(fèi)時(shí)間浪費(fèi)精力,一個(gè)人最痛苦的不是找不到愛人,而是心中沒有了愛,當(dāng)你把我愛你3個(gè)字變成你最容易說的一句話時(shí),那么你在愛情的世界里已經(jīng)很難找到真正的幸福了.愛情沒有公平,總有一個(gè)人比對(duì)方付出得多,即使沒有結(jié)果,也別覺得不值,因?yàn)槟愕母冻霾还馐菫榱怂?也是為了你自己的愛,為愛付出是很可貴的,贊自己一下.
              16.請(qǐng)留一點(diǎn)童心
              在內(nèi)心深處,哪怕只是一個(gè)很小的角落里,請(qǐng)保持一份童心,不是幼稚,但有的時(shí)候單純一點(diǎn)會(huì)讓你很快樂.所以不要太計(jì)較得失,生活本無完美.


            ps.深合吾心。

            posted @ 2006-08-28 19:43 人生亦編程 閱讀(141) | 評(píng)論 (0)編輯 收藏

            ?????????在德國“萊比錫游戲展2006(Game Convention 2006)”大展上,美國暴雪公司(Blizzard)首席運(yùn)營官Paul Sams暗示,《星際爭霸2(Starcraft2)》將有可能在2007年面世。

              在接受媒體采訪時(shí),這位暴雪公司COO表示,《星際爭霸》是他一直以來最喜歡的游戲之一。暴雪公司目前正在同時(shí)開發(fā)三款不同的游戲,而他自己將有幸成為向世界玩家公布《星際爭霸2》的第一人。

              此外,他暗示暴雪公司將在2007年召開公司主線產(chǎn)品的發(fā)表會(huì),但沒有提供有關(guān)此次會(huì)議以及即將在發(fā)表會(huì)上公布的產(chǎn)品的細(xì)節(jié)資料。媒體廣泛猜測,《星際爭霸》和《 暗黑破壞神 (Diablo)》新作即將出現(xiàn)在此次發(fā)表會(huì)上。

            posted @ 2006-08-28 13:01 人生亦編程 閱讀(176) | 評(píng)論 (0)編輯 收藏

            ?????????喬布斯去年在斯坦福大學(xué)畢業(yè)典禮上的講話。
              下面是演講原文的節(jié)選。
              今天我非常榮幸來參加你們的畢業(yè)典禮。我自己從來沒有從大學(xué)畢業(yè),所以今天應(yīng)該是我距離畢業(yè)典禮最近的一次。今天我只想給你們講三個(gè)我生活中的真實(shí)故事。僅此而已,沒有什么長篇大論,就是三個(gè)故事。
              第一個(gè)故事是關(guān)于把點(diǎn)連成線。
              十七歲的時(shí)候,我進(jìn)了大學(xué)。當(dāng)時(shí)我很天真,選了一所學(xué)費(fèi)幾乎和斯坦福大學(xué)一樣昂貴的學(xué)校,當(dāng)工人的養(yǎng)父母傾其所有的積蓄為我支付了大學(xué)學(xué)費(fèi)。讀了六個(gè)月后,我卻看不出上學(xué)有任何意義。我既不知道自己這一生想干什么,也不確定大學(xué)能幫我弄明白自己想干什么。所以,我決定退學(xué)。當(dāng)年做出這個(gè)決定的時(shí)候心里還有點(diǎn)打鼓,但現(xiàn)在往回看,那卻是我有生以來做出的最好的決定之一。從退學(xué)那一刻起,我就可以不再選那些我毫無興趣的必修課,而開始去旁聽一些在我看來更有意思的課。
              當(dāng)時(shí),我所在的學(xué)校的書法課大概是全國最好的。校園里所有的公告欄和每個(gè)抽屜標(biāo)簽上的字都寫得非常漂亮。我退學(xué)后不用正常上課了,所以我決定選一門書法課,學(xué)學(xué)怎么寫好字。
              當(dāng)時(shí)我并不指望書法在以后的生活中能有什么實(shí)用價(jià)值。但是,十年之后,我們?cè)谠O(shè)計(jì)第一臺(tái) Macintosh 計(jì)算機(jī)時(shí),以前學(xué)的書法一下子浮現(xiàn)在我眼前。于是,我們把這些東西全都設(shè)計(jì)進(jìn)了計(jì)算機(jī)中。這是第一臺(tái)有這么漂亮的文字版式的計(jì)算機(jī)。要不是我當(dāng)初在大學(xué)里偶然選了這么一門課,Macintosh 計(jì)算機(jī)絕不會(huì)有那么多種印刷字體或間距安排合理的字號(hào)。要不是退了學(xué),我也不會(huì)碰巧選了那門書法課。當(dāng)然,我在大學(xué)里不可能把當(dāng)時(shí)的點(diǎn)向前延伸,連成一條線;但是現(xiàn)在回過頭去看,那條線卻無比清晰。
              你們現(xiàn)在同樣不可能從現(xiàn)在這個(gè)點(diǎn)上連出通向未來的那一條線。只有當(dāng)你回頭看時(shí),才會(huì)發(fā)現(xiàn)這些過去的點(diǎn)其實(shí)已經(jīng)畫出了那條線。所以,要相信每一個(gè)點(diǎn)遲早都會(huì)連接到一起。
              第二個(gè)故事是關(guān)于好惡與得失。
              幸運(yùn)的是,我在很小的時(shí)候就發(fā)現(xiàn)自己喜歡做什么。我在 20 歲時(shí)和沃茲在我父母的車庫里辦起了蘋果公司。我們干得很賣力,十年后,蘋果公司就從車庫里我們兩個(gè)人發(fā)展成為一個(gè)市值 20 億美元、擁有4000多名員工的大企業(yè)。而在此之前的一年,我們剛推出了我們Macintosh電腦,當(dāng)時(shí)我剛過而立之年??珊髞?,我被解雇了。你怎么會(huì)被自己辦的公司解雇呢?是這樣,隨著蘋果公司越做越大,我們聘請(qǐng)了一位我認(rèn)為非常有才華的人與我一道管理公司。在開始的一年多里,一切都很順利??墒?,隨后我倆對(duì)公司前景的看法開始出現(xiàn)分歧,最后我倆反目了。這時(shí),董事會(huì)站在了他那一邊,所以在30 歲那年,我離開了公司,而且這件事鬧得滿城風(fēng)雨。我成年后的整個(gè)生活重心都沒有了,這使我心力交瘁。
              一連幾個(gè)月,我真的不知道應(yīng)該怎么辦。這次失敗弄得沸沸揚(yáng)揚(yáng)的,我甚至想過逃離硅谷。但是,漸漸地,我開始有了一個(gè)想法——我仍然熱愛我過去做的一切。在蘋果公司發(fā)生的這些風(fēng)波絲毫沒有改變這一點(diǎn)。于是,我決定從頭開始。
              雖然當(dāng)時(shí)我并沒有意識(shí)到,但事實(shí)證明,被蘋果公司炒魷魚是我一生中碰到的最好的事情。盡管前景未卜,但從頭開始的輕松感取代了保持成功的沉重感。這使我進(jìn)入了一生中最富有創(chuàng)造力的時(shí)期之一。
              在此后的五年里,我開了一家名叫 NeXT 的公司和一家叫Pixar的公司,我還愛上一位了不起的女人,后來娶了她。Pixar公司推出了世界上第一部用電腦制作的動(dòng)畫片《玩具總動(dòng)員》,它現(xiàn)在是全球最成功的動(dòng)畫制作室。世道輪回,蘋果公司買下 NeXT 后,我又回到了蘋果公司,我們?cè)?NeXT 公司開發(fā)的技術(shù)成了蘋果公司這次重新崛起的核心。我和勞倫娜也建立了美滿的家庭。
              我確信,如果不是被蘋果公司解雇,這一切決不可能發(fā)生。這是一劑苦藥,可我認(rèn)為苦藥利于病。有時(shí)生活會(huì)當(dāng)頭給你一棒,但不要灰心。我堅(jiān)信讓我一往無前的唯一力量就是我熱愛我所做的一切。所以,一定得知道自己喜歡什么,選擇愛人時(shí)如此,選擇工作時(shí)同樣如此。工作將是生活中的一大部分,讓自己真正滿意的唯一辦法,是做自己認(rèn)為是有意義的工作;做有意義的工作的唯一辦法,是熱愛自己的工作。你們?nèi)绻€沒有發(fā)現(xiàn)自己喜歡什么,那就不斷地去尋找,不要急于做出決定。就像一切要憑著感覺去做的事情一樣,一旦找到了自己喜歡的事,感覺就會(huì)告訴你。
              我的第三個(gè)故事是關(guān)于死亡。
              17 歲那年,我讀到過這樣一段話,大意是:“如果你把每一天都當(dāng)作生命的最后一天過,總有一天你的假設(shè)會(huì)成為現(xiàn)實(shí)?!蔽矣涀×诉@句話,從那時(shí)起,33 年過去了,我每天早晨都對(duì)著鏡子捫心自問: “假如今天是我生命中的最后一天,我還會(huì)去做今天要做的事嗎?”如果一連許多天我的回答都是“不”,我知道自己應(yīng)該有所改變了。
              大約一年前,我被診斷患了癌癥。那天早上七點(diǎn)半,我做了一次掃描檢查,結(jié)果清楚地表明我的胰腺上長了一個(gè)瘤子,可那時(shí)我連胰腺是什么還不知道呢!醫(yī)生告訴我說,幾乎可以確診這是一種無法治愈的惡性腫瘤,我最多還能活 3 到 6 個(gè)月。
              我整天都想著診斷結(jié)果。到了晚上,我做了一次組織切片檢查,他們把一個(gè)內(nèi)窺鏡通過喉嚨穿過我的胃進(jìn)入腸子,用針頭在胰腺的瘤子上取了一些細(xì)胞組織。當(dāng)時(shí)我用了麻醉劑,陪在一旁的妻子后來告訴我,醫(yī)生在顯微鏡里看了細(xì)胞之后叫了起來,原來這是一種少見的可以通過外科手術(shù)治愈的惡性腫瘤。我做了手術(shù),現(xiàn)在好了。
              這是我和死神離得最近的一次,我希望也是今后幾十年里最近的一次。有了這次經(jīng)歷之后,現(xiàn)在我可以更加實(shí)在地和你們談?wù)撍劳?,那就?誰都不愿意死。即使是那些想進(jìn)天堂的人也不會(huì)愿意為了進(jìn)天堂而去死。然而,死亡是我們共同的歸宿,沒人能擺脫。我們注定會(huì)死,因?yàn)樗劳龊芸赡苁巧詈玫囊豁?xiàng)發(fā)明。它推進(jìn)生命的新辰換代。現(xiàn)在,你們就是新的,但在不久的將來,你們也會(huì)逐漸成為舊的,也會(huì)被淘汰。
              你們的時(shí)間都有限,所以不要按照別人的意愿去活,這是浪費(fèi)時(shí)間。不要讓別人觀點(diǎn)的聒噪聲淹沒自己的心聲。最主要的是,要有跟著自己感覺和直覺走的勇氣。無論如何,感覺和直覺早就知道你到底想成為一個(gè)什么樣的人,其它的都不重要

            posted @ 2006-08-25 12:26 人生亦編程 閱讀(110) | 評(píng)論 (0)編輯 收藏

            一個(gè)新手去收高利貸,他把借條拿出來*笑著說:白紙黑字明明白白地寫著你欠我100萬!難道你想賴帳?!人家表示確實(shí)沒有那么多錢,他威脅道:哼哼!別怪我沒提醒你!明天再交不出錢,你的房子就像它一樣——他掏出打火機(jī)就把借條燒了……

            一只老鼠被貓追趕,誤入花店。老鼠發(fā)現(xiàn)無路可逃,順手抱起一束玫瑰花當(dāng)武器,作頑強(qiáng)抵抗……貓?bào)@呆了,立馬低下了頭,羞澀地說:死鬼,太突然了…….


            護(hù)士:“醫(yī)生,不好了!剛才那個(gè)病人吃了我們給她的藥,一出診所的們就暈倒了!”醫(yī)生:“趕快,把她的身體翻個(gè)個(gè)兒,擺成是剛剛進(jìn)門的樣子!”


            執(zhí)行死刑的警官走進(jìn)牢房,一邊抖著雨衣一邊向犯人宣布命令,犯人驚異地說:冒這么大的雨去刑場?警官說:你有什么可抱怨的,我還得冒著雨回來呢!


            唐僧:此番取經(jīng)應(yīng)當(dāng)找個(gè)快捷方式!

                悟空:坐飛機(jī)比騎馬快!

                八戒:神六更快!

                沙僧拿出一支槍:聽說這玩藝兒立馬就送人上西天。


            一個(gè)人騎摩托車喜歡反穿衣服,就是把扣子在后面扣上,可以擋風(fēng)。一天他酒后駕駛,翻了,一頭栽在路旁。

              警員趕到后...

              警員甲:好嚴(yán)重的車禍。

              警員乙:是啊,腦袋都撞到后面去了。

              警員甲:嗯,還有呼吸,我們幫他把頭轉(zhuǎn)回來吧。

              警員乙:好.....一、二使勁,轉(zhuǎn)回來了。

              警員甲:嗯,沒有呼吸了......


            問: 世界上最最黑暗的動(dòng)漫人物是誰?

            答: 機(jī)器貓

            為什么: 因?yàn)樗焓植灰娢逯?

            問: 世界上最富有同情心的動(dòng)漫人物是誰?

            答: 還是機(jī)器貓

            為什么: 因?yàn)樗偸窍蛉松斐?圓手 !


            一對(duì)情侶吵架。女:“你每一樣?xùn)|西都比不上任何人!”男:“對(duì),尤其是女朋友!”


            女:你喜歡我天使的臉孔,還是魔鬼的身材?男:我……我喜歡你的幽默感。


            一高中男孩,半夜打電話給他女友談情說愛。

            很不幸被女孩的母親接到,問明來意后女友的母親很不悅地問:「你姓啥?」

            男孩說:「我姓魏。」

            母親又問:「魏什么?」

            這時(shí)男方緊張的回答:「我也不知道為什么?我爸也姓魏。」


            一個(gè)人在沙漠里快要餓死了,這時(shí)他撿到了神燈。

            神燈:“我只可以實(shí)現(xiàn)你一個(gè)愿望,快說吧,我趕時(shí)間?!?

            人:“我要老婆……”

            神燈立刻變出一個(gè)美女,然后不屑的說:“都快餓死了還貪圖美色!可悲!”說完就消失了。

            人:“……餅?!?

            (老婆餅是一種糕點(diǎn))


            小米粒:“媽媽,我餓!”

            米媽媽:“乖,爸爸找不到工作,家里已經(jīng)沒有吃的了。”

            小米粒:“可是我餓~~~”

            米媽媽:“唉……好吧,你去隔壁借點(diǎn)咸菜,我去給你爸爸燒洗澡水。”


            有一人獨(dú)自在森林中冒險(xiǎn),突然發(fā)現(xiàn)自己被食人族重重包圍。于是對(duì)天空大喊:“我死定了,上帝救救我!”

            只見天空出現(xiàn)一到光傳來一個(gè)聲音:“還不一定,你再撿起地上一顆大石頭,把帶頭的酋長砸死?!庇谑撬麚炱鸬厣献畲蟮囊活w石頭,狠狠的砸向酋長,正好把酋長砸死。族人全都呆了一呆,接著怒目相向,這時(shí)天上又傳來一陣聲音:”現(xiàn)在你才真的死定了。”


            一個(gè)伐木工人去應(yīng)征工作

            工頭:前面的樹林你去試試看...看你一分鐘能鋸幾棵樹.....

            過了一分鐘....

            工頭:哇....一分鐘20棵....太厲害了.....你以前在哪工作的?

            工人:撒哈拉森林......

            工頭:沒聽過ㄝ......我只聽過撒哈拉沙漠ㄝ......

            工人:對(duì)啊.....后來改名字啦


            警察:“說,你叫什么?”

            犯人:“我叫成龍。”

            警察:“你怎么不叫陳真,給我把態(tài)度放端正了~好好說你叫什么~?”

            犯人:“我叫陳真?!?


            王先生的兒子讀小學(xué)三年級(jí)時(shí),有一天又因數(shù)學(xué)屢教不會(huì),

            被他個(gè)性急躁的媽媽痛罵。

            王先生在書房外,聽到兒子被罵得很慘,

            心想等一下兒子被罵完出來,我要安慰他一下,免得在他小心靈里留下被罵的陰影。

            兒子被罵完,垮著一張臉出了書房,

            為先了解他被痛罵后心里的感受,王先生先問他:「被媽媽罵,你有什么感覺?」

            只見兒子用哀怨的眼神看著他說:

            「你為什么要娶她?」


            有兩個(gè)外國人到家樂福去購物,結(jié)帳時(shí),店員問:「Can you speak chinese?」

              兩個(gè)外國人用國語回答:「如果你講慢一點(diǎn)的話,我們可以聽的懂!」

              店員說:「Can...you...speak...chinese?」


            西班牙跳舞

            國內(nèi)某位人士,有一次因公至西班牙。

            某天晚上有一場舞會(huì),這位人士帶著夫人去參加,可是到達(dá)會(huì)場時(shí),舞會(huì)已經(jīng)開始了,於是他拉著夫人往空無一人的舞池,兩人便翩翩起舞!音樂結(jié)束後,卻發(fā)覺全場的人都在舞池旁,瞪大了眼睛看他們倆人....

            他就問他的西班牙朋友:「為什麼你們不一起跳舞呢?」

            他的西班牙朋友說:「...剛剛是西班牙國歌耶??!」


            電影院里。

            女:你怎么把橘子皮扔在地上?。?

            男:怎么,難道要讓我扔橘子肉嗎?


            一對(duì)恩愛甚篤的夫婦正慶祝他們的金婚日。

            看熱鬧的中年鄰居問老生先說:

            「為什么你們可以維持五十年幸福美好的婚姻,打從我出生起,就未曾聽過你們吵架的聲音,難道你們之間從來沒有任何的爭執(zhí)嗎?」

            老先生說:「爭執(zhí)當(dāng)然是有的,不過都不會(huì)擴(kuò)大。我從蜜月旅行的時(shí)候就懂這個(gè)道理了...記得當(dāng)時(shí)交通不便我們到大峽谷去度蜜月,一個(gè)人各雇了一匹驢子。

            她的驢子顯然好吃懶做,走沒有多久就賴在路邊休息。

            我只聽到我太太冷冷地說:『第一次?!?

            驢子第二次想偷懶的時(shí)候,她又指著驢子說:『這是第二次?!?

            當(dāng)驢子第三次不肯走時(shí)候,她不慌不忙的掏出她租用的手槍,就把它給斃了!」

            中年鄰居老先生詫異說:「尊夫人真是太殘忍了!」

            老先生說道:「可不是嗎?我看不過去停在路邊指責(zé)她的不是。她并不跟我爭辯只是冷冷地對(duì)我說:『第一次』?!?


            小張?jiān)趪薪虝?,人長得高高帥帥的,但只要一緊張,講話就會(huì)口吃。

            有一次月考監(jiān)考時(shí),他發(fā)現(xiàn)有一位學(xué)生低著頭翻書找答案;他氣急敗壞,指著作弊的學(xué)生大吼:「你、你、你、你、你、你竟敢作弊,給我站起來!」話一說完,立刻有六個(gè)學(xué)生站了起來。

            posted @ 2006-08-25 12:25 人生亦編程 閱讀(105) | 評(píng)論 (0)編輯 收藏

            1.最大的游戲:傳送之物:逝者的鎮(zhèn)魂歌》 25.6G

            ?? 目前最大的游戲就是即將于8月31日在XBOX360上推出的S.RPG游戲巨作<傳送之物:逝者的鎮(zhèn)魂歌>,測試版容量為25.6G。

            2.世界上最小的3DFPS游戲  90K

            3.世界上占用面積最大的游戲  

            ?? 2000平米的俄羅斯方塊游戲,這個(gè)巨大的游戲使用了一幢11層高的大樓,超過10,000個(gè)的圣誕節(jié)小彩燈,在一臺(tái)Linux電腦的控制下,完成了這個(gè)不可思議的游戲。

            ?

            4.世界上最無聊游戲——《Desert bus》,同時(shí)它也是跳票時(shí)間最長的游戲,11年!
              這款游戲的目標(biāo)非常簡單:把一輛巴士從美國亞利桑那州土桑市開到拉斯維加斯。不過游戲中的時(shí)間和現(xiàn)實(shí)中同步,也就是說游戲至少需要耗時(shí)8個(gè)小時(shí),更“妙”的是游戲中看不到任何風(fēng)景,甚至連1輛車都沒有,道路兩側(cè)只有無盡的沙漠。而且你的巴士車有點(diǎn)問題,總是會(huì)慢慢向右偏,因此還需要時(shí)不時(shí)按下左轉(zhuǎn)鍵校正方向,想在開車的8小時(shí)內(nèi)做其它事幾乎是不可能的。傳說如果你能把巴士成功開到終點(diǎn),可以在游戲中得到1分!看到這里相信大家都能理解這款游戲?yàn)楹螞]有發(fā)布。

            5.世界上最早的網(wǎng)絡(luò)游戲  《UO網(wǎng)絡(luò)創(chuàng)世紀(jì)》
              今日大多數(shù)網(wǎng)絡(luò)游戲設(shè)計(jì)者,其創(chuàng)意啟蒙來源大都來自同一個(gè)網(wǎng)絡(luò)游戲--《UO網(wǎng)絡(luò)創(chuàng)世紀(jì)》,而《UO網(wǎng)絡(luò)創(chuàng)世紀(jì)》的歷史可謂相當(dāng)悠久,也形成了自從 1997 年以來,估計(jì)有超過5000名玩家因游戲結(jié)識(shí)進(jìn)而成為夫妻!

            6.世界上最貴的游戲 全球最貴的游戲軟件,價(jià)值20000英鎊的《2006 FIFA世界杯》

            ?

            7.世界上最早的電子游戲<ping>
              1972年,美國的雅達(dá)利公司的<ping>是模擬兩個(gè)人打乒乓球,就是在兩條線中間有一個(gè)點(diǎn)在動(dòng)。當(dāng)時(shí)是很著名的游戲……操縱器就是當(dāng)年一個(gè)搖桿上有一個(gè)按鈕的那種。很可惜這個(gè)沒有畫面。

            8.世界上賣出做多的游戲 最終幻想系列


              至盡以公布的有13作發(fā)售:1987年12月28日 機(jī)種:FC 發(fā)售量:52萬份
              最終幻想2
              發(fā)售:1988年12月17日 機(jī)種:FC 發(fā)售量:76萬份
              最終幻想3
              發(fā)售:1990年4月27日 機(jī)種:FC 發(fā)售量:140萬份
              最終幻想4
              發(fā)售:1991年7月19日 機(jī)種:SFC 發(fā)售量:144萬份
              最終幻想5
              發(fā)售:1992年12月6日 機(jī)種:SFC 發(fā)售量:245萬份
              最終幻想6
              發(fā)售:1994年4月2日 機(jī)種:SFC 發(fā)售量:日本國內(nèi)300萬份
              最終幻想7
              發(fā)售:1997年1月31日 機(jī)種:PS,PC 發(fā)售量:846萬份
              最終幻想戰(zhàn)略版
              最終幻想8
              發(fā)售:1999年2月11日 機(jī)種:PS 發(fā)售量:687萬份
              最終幻想9
              發(fā)售:2000年7月6日 機(jī)種:PS 發(fā)售量:550萬份
              最終幻想10
              發(fā)售:2001年7月19日 機(jī)種:PS2 發(fā)售量:300萬份
              最終幻想12
              首批出貨達(dá)到200萬套統(tǒng)計(jì)中

            9.世界上補(bǔ)丁做多的游戲——WAR3 27個(gè)補(bǔ)丁

            10.序作最多的游戲——EA的FIFA系列  從93開始大家自己數(shù),還包括足球經(jīng)理。

            ?

            posted @ 2006-08-23 21:44 人生亦編程 閱讀(163) | 評(píng)論 (0)編輯 收藏

            以前是井底之蛙,不入其門,不聞其道,殊不知有很多需要學(xué)習(xí)的。
            現(xiàn)在是水煮青蛙,適應(yīng)了環(huán)境,卻不會(huì)發(fā)現(xiàn)越來越熱的水。

            posted @ 2006-08-23 21:15 人生亦編程 閱讀(58) | 評(píng)論 (0)編輯 收藏

            今天第一次看到海的樣子。
            和想象中的差遠(yuǎn)了,沒有藍(lán)天,沒有碧浪,沒有海風(fēng)......
            當(dāng)時(shí)的感覺,還不如過武漢長江大橋時(shí)那么深刻,長江的水的確會(huì)讓人感到恐懼。這里的海沒有什么特別的,近處是船家,以船為家的貧苦人,遠(yuǎn)處是白茫茫一片,依稀可見香港的輪廓,海邊是黑色的巖石,沒有沙,沒有海浪。
            這就是海的初見。

            posted @ 2006-08-19 13:29 人生亦編程 閱讀(93) | 評(píng)論 (0)編輯 收藏

            老徐說:“鋼琴,我最鐘愛的樂器,哀而不傷,快樂但絕不輕浮?!?br />原來如此,怪不得我那么喜歡鋼琴,原來是這個(gè)原因。

            posted @ 2006-08-18 08:45 人生亦編程 閱讀(116) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共9頁: 1 2 3 4 5 6 7 8 9 
            91精品免费久久久久久久久| 大香网伊人久久综合网2020| 伊人久久精品无码av一区| 久久只这里是精品66| 久久亚洲中文字幕精品一区四| 久久久久久亚洲Av无码精品专口| 久久人人爽人人人人片av| 亚洲欧美日韩中文久久| aaa级精品久久久国产片| 久久婷婷色综合一区二区| 99久久精品国产一区二区| 99久久99久久精品国产片果冻 | 韩国免费A级毛片久久| 久久综合给合综合久久| 久久99毛片免费观看不卡 | 亚洲中文久久精品无码ww16| 精品久久777| 久久精品国产精品青草app| 区久久AAA片69亚洲| 久久久久无码专区亚洲av| 久久永久免费人妻精品下载| 77777亚洲午夜久久多人| 国产精品久久久久久久午夜片| 日产精品久久久久久久性色| 2021久久精品免费观看| 久久久久久精品免费看SSS| 亚洲综合伊人久久综合| 亚洲中文字幕无码久久2020| 久久婷婷五月综合色奶水99啪| 午夜精品久久久久久久| 亚洲精品无码久久久久sm| 久久丫精品国产亚洲av| 精品久久久久久无码中文野结衣 | 无码八A片人妻少妇久久| 国产激情久久久久久熟女老人| 久久国产高潮流白浆免费观看| 国产成人精品久久二区二区| 亚洲国产精品无码久久久久久曰| 亚洲国产精品无码久久| 品成人欧美大片久久国产欧美...| 久久精品国产亚洲av高清漫画|