提升Java桌面客戶端程序性能
月
日
Edward Ort在SDN(Sun Developer Network)聊天室主持了一次關於提升Java桌面客戶端程序性能的聊天
這次聊天請來了兩位重量級的人物
Chet Haase
Java
D工程組的關鍵成員;Scott Violet
JFC/SWing的架構師
這次聊天主要關注在JFC/SWing/Java
D當前在性能上有哪些提升
以及將來的Java版本在這些方面將有什麼改進
下面我們來看一些關鍵的
比較有趣的聊天內容
為什麼repaint()刷新時會造成灰色塊?
Scott Violet: 這是一個非常適時的問題
當我們使用AWT/SWing時
至少有兩個線程在起作用
一個線程負責接收和處理本地事件
另一個線程負責分派這些事件(即 EDT)
對於本地線程
當它接收到一個expose事件
會立即用灰色填充背景
當事件在EDT中被處理時才開始做實際上的繪制工作
這樣的話如果你的程序正在繁忙
在顯示灰色塊和實際的繪制之間會有一個顯而易見的延遲
有個好消息是我們正在做這方面的改進工作
讓每個窗口都有一個緩沖圖像
這樣的話
當窗口收到一個expose事件
我們立即將緩沖區的圖像復制過來
並且你的程序不用做任何事情
這樣你就再也不會看到灰色塊了
甚至於你的程序繁忙時
我們照樣能恢復窗口裡的顯示內容
我們希望能盡早完成這項工作
當我們完成時會將它公布出來
為什麼不把SwingWorker(或者類似的機制)沒有成為標准API? 有什麼建議的方式來處理過程靈敏的任務?
Scott Violet: 很好的問題
我們就要完成一個版本的SwingWorker
它將會是Java
的一部分
這也就是Igor
Brent
Bino 和我在去年JavaOne大會上談到的那個版本
這個版本的SwingWorker支持property change監聽器
它非常好用
JDNC和JDIC會有什麼新的發展?
Scott Violet: 這兩個項目一直在健狀的發展
JDNC正向下一個裡程碑邁進
它會包含一個login framework
並且修改了data model和binding API
為什麼一定要等到Java
而不是以jar形式在
中使用?
Scott Violet: 我想你在提SwingWorker吧
我們正在考慮針對
發布一個非綁定的SwingWorker版本
但還沒有作出決定
Resizing窗口為什麼要等到resizing結束後才起作用?
Scott Violet: 有個好消息是
如果你要實時resize窗口
只要簡單的調用Toolkit
getDefaultToolkit()
setDynamicLayout(true)
如何相應則依賴於你的程序和窗口內容
我要說我們正在考慮使實時resize特性成為
的缺省設置
當開啟
個小圖片(
x
)時
ImageIcon是最好的選擇嗎?或者imageI/O JAI更快些? 這三者在內存使用上有什麼不同嗎?
Chet Haase: 我知道
在我們
的ImageIO的jpep加載器有性能上的問題
它甚至慢過於老的Toolkit加載器
我不知道這些問題是否已經修復
要確定是否已修復的最好的方法是: 寫一個簡單的microbenchmark程序
時間上的不同就可以看出誰好誰壞
我願意看到最終有人選擇ImageIO
但是為了達到目的
我們可能會遇到一些瓶項
目前我還不知道JAI的性能如何
有打算允許Swing程序能編譯成本地代碼嗎?
Scott Violet: 我只能說
與此最類似的事情就是
我們正在考慮讓運行中的各個JVM使用持久化編譯的代碼
每次你運行程序我們都不再編譯大量重復的方法;如果方法已被緩存
這會極大的提高運行速度
使用Java
中的Synth
經測試發現
Swing程序的啟動時間變慢了
該如何避免此問題?
Scott Violet: 我懷疑慢下來的原因是采用了XML解析器
你可以提交一個test case以讓我們可以確定到底發生了什麼事情
有沒可能增加一個
dockable
framework到Swing?
Scott Violet: 真干脆
我們看到越來越多的程序要求做到這個功能
我們現在已將這個加進了
雖然如此
它不太可能會在
之前完成
可能這是太遙遠的事情
钽我們會試著縮短版本發布周期:)
對於常規的Swing組件有什麼改進
比如JTable? 我有一個案子要
凍結
兩個或更多的Column
當前有無簡便的方法?
Scott Violet: 在
中
我們要加入table排序
加亮顯示和過濾
JDNC現在有這個
但它應該加到內核中才是
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19389.html