星期一, 二月 14, 2005

Dynamic compilation and performance measurement

Dynamic compilation and performance measurement 大意大概是:

目前 Java 的 HotSpot JVM 是在程式執行過程中,選擇性地將執行得最頻繁的程式部分編譯成 machine code 並作最佳化,而且還會持續根據程式執行過程得到的資料,將某些已經轉成 machine code 的部分重新編譯和作更進一步的最佳化,然後取代掉先前編譯好的 machine code。這些編譯和置換動作都需要花時間,而且無法確定什麼時候發生,使得要測量程式碼執行速度時,測到的通常不是想測的東西。

另外,加上參數 -server 執行的 server VM,會作更多清除不必要程式碼的動作,所以以 server VM 執行得到的測量結果遠遠快於預設 client VM 的情形,很有可能是大部分的程式碼都被精簡掉了,而不是 server VM 真的那麼快。

很值得讀的好文章。

作者 JiaYun ( Java ) :: 迴響 (0):: 靜態連結網址:: 引用 (0)

星期二, 十月 12, 2004

Developing Games in Java 裡不好的 Thread 例子

翻了一下這本書 Developing Games in Java

在第一章看到像這樣的程式

public class MyClass extends SomeOtherClass implements Runnable {
    
    public MyClass() {
        Thread thread = new Thread(this);
        thread.start();
    }
    
    public void run() {
        System.out.println("Do something cool here.");
    }
}
作者可能沒看過 Safe construction techniques 這篇文章

因為在 constructor 裡傳 this 給新 thread 並讓它開始執行

可能會使物件在還沒完全建構好前就被新 thread 用到,是應該避免的寫法


我沒有說這本書不好的意思,因為才看了一點點而已。只是提醒自己像這樣的地方要留意,不要看書上有這麼寫,就跟著寫。

作者 JiaYun ( Java ) :: 迴響 (0):: 靜態連結網址:: 引用 (0)

星期一, 九月 27, 2004

DrJava 的 Interactions Pane 很好玩

DrJava - http://drjava.sourceforge.net/

一個小型的 Java IDE,有個很棒的功能 - Interactions Pane

例如依序輸入下面三行

import javax.swing.*;
JFrame frame = new JFrame("My JFrame");
frame.setVisible(true);

在第三行輸入完按 Enter 後就會有個 JFrame 出現 Figure 1


然後加入一個 JLabel

frame.getContentPane().add(new JLabel("DrJava Test"));
frame.pack();

Figure 2


把 JLabel 拿掉

frame.getContentPane().removeAll();
frame.pack();

Figure 3


如果沒有加分號,會把那行的東西印出來,像是接著只打 frame 按 Enter,會印出前面宣告的 JFrame 的資料

Figure 4


它還有提供一個 Eclipse Plugin,功能是可以在 Eclipse 裡使用 Interactions Pane

目前的 0.9.5 版有點小問題,解開壓縮檔之後要先編輯它的 plugin.xml 檔案

把這幾行

   <requires>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.debug.ui"/>
<import plugin="org.eclipse.jdt.ui"/>
<import plugin="org.eclipse.jdt.core"/>
<import plugin="org.eclipse.console.ui"/>
</requires>

改成

   <requires>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.debug.ui"/>
<import plugin="org.eclipse.jdt.ui"/>
<import plugin="org.eclipse.jdt.core"/>
<import plugin="org.eclipse.ui.console"/>
<import plugin="org.eclipse.core.runtime.compatibility"/>
<import plugin="org.eclipse.search"/>
</requires>
才不會開 DrJava 的 perspective 時出錯

(如果改完還看不到可以開的 perspective 裡有 DrJava,用 -clean 參數重新啟動 Eclipse)


作者 JiaYun ( Java ) :: 迴響 (2):: 靜態連結網址:: 引用 (0)

星期二, 九月 07, 2004

EMMA - opensource 的 Java code coverage 工具

EMMA - http://emma.sourceforge.net/

第一次知道 code coverage 這詞好像是因為看到一些 project 使用 Clover

不過 Clover 不是免費的,所以沒有仔細看或抓來試玩

只得到一個印象:可以用來知道 JUnit 寫的之類的測試程式,測試到了主要程式的多少部份

現在知道有個 opensource 的 EMMA, 看了它的 Quick Start 發現還可以配合這工具執行 GUI 程式

把程式的功能試一試之後,會產生記錄顯示剛才的操作(手動測試?)執行到多少部份的程式碼

有點意外可以這樣玩 :P

取得測試程式的測試涵蓋範圍的方法,則在 Sample Reports 的第一項 Velocity 有個簡單的執行步驟

詳細還是要看 Documentation,只是不知道我什麼時候才會用到

第一次和到目前唯一一次有寫 test,是暑假前那學期做的一個作業

寫的東西太少了,而且有時都暴力去做,懶得弄測試 :P

最後,

技術人部落有一篇 EMMA 的文章 - http://203.204.88.244/post/1/16

作者 JiaYun ( Java ) :: 迴響 (0):: 靜態連結網址:: 引用 (0)

星期三, 九月 01, 2004

FindBugs - 偵測程式碼裡的潛在問題

http://findbugs.sourceforge.net/

可以找出程式碼裡可能存在的 這麼多問題

而且有多種使用方式:文字模式、GUI 模式、Ant task、Eclipse plug-in 等等

寫了一堆好文章的 Brian Goetz 在 Kill bugs dead 這篇文章裡

摘要出他以前文章談到的 Java 程式問題,然後說明 FindBugs 對這些問題的偵測

文章裡有那些舊文章的連結,還有 Chris Grindstaff 的兩篇 FindBugs 文章連結

這裡就不列出來了

作者 JiaYun ( Java ) :: 迴響 (2):: 靜態連結網址:: 引用 (0)

星期四, 八月 26, 2004

JDK 5.0 的好玩工具

JDK 5.0 多了不少好玩的東西

像在 command line 下打 jps 會列出 Java 行程

12063 Jps
11862 Main
10739 jedit.jar

前面的數字是 process id (pid)

用 jinfo pid 可以列出該行程的一些 Java 設定資料

jmap -histo pid 顯示這樣的東西

Object Histogram:

Size Count Class description
-------------------------------------------------------
4018800 340 int[]
412632 4287 * ConstMethodKlass
242616 4287 * MethodKlass
221776 6147 * SymbolKlass
156056 301 * ConstantPoolKlass
110128 283 * ConstantPoolCacheKlass
107480 301 * InstanceKlassKlass
67440 312 byte[]
62504 572 char[]
32384 368 java.lang.Class
25888 436 short[]

分別是各類型物件所佔記憶體大小、數量、所屬 Class (int[] 佔那麼多是因為我宣告了一個大小一百萬的陣列)

jmap -heap pid 則會顯示 heap 的相關資料

詳細資料在 http://java.sun.com/j2se/1.5.0/docs/tooldocs/index.html

最底下的兩大類 Monitoring and Management Tools 和 Troubleshooting Tools


作者 JiaYun ( Java ) :: 迴響 (0):: 靜態連結網址:: 引用 (0)

星期五, 元月 30, 2004

Velocity 一個奇怪的結果

#set( $foo = "bar" )
$!{foo}

照文件上寫的結果應該是
$!{foo}

但實際出現的是
$!{

下載的 1.4rc1 和從 cvs build 的 1.5dev 都是這樣

作者 JiaYun ( Java ) :: 迴響 (2):: 靜態連結網址:: 引用 (0)
«上一篇   1 2 3