【贴士】Swing Bug 5095398会严重影响NetBeans的速度(2007-06-25 14:16:54)
我前面的一篇文章曾经提到过这个问题,Swing的一个bug 5095398会严重影响NetBeans的速度。最近又听某个网友说他的NetBeans速度非常慢,我想是不是因为这个bug引起的。
这个bug的现象是当在笔记本上跑Swing程序时,把电源给拔掉时,会发现Swing程序几乎慢的不可用。这个Swing
bug的概要是:
Graphics performance degrades
unacceptably when XPS laptop unplugged (Win
XP)。在这儿可以看到详细内容。
该bug维护者经研究发现,这个Swing
bug是由ATI图形卡驱动程序的一个bug引起的。因此这个bug的修改依赖于ATI对于驱动程序的修改。目前好像已经向ATI提交了bug报告。
如何在没有得到图形卡驱动修改补丁之前解决这个问题?这个bug的维护者给出的workaround办法是,拔掉电源时使用虚拟机参数-Dsun.java2d.ddoffscreen=false。或在控制面板内设置PowerPlay属性,可以通过屏幕属性->高级访问该设置。禁止PowerPlay属性,相当于插上电源的性能(可能会引起较高的电能消耗)。如果使用Java
5.0u8以前的版本,还可以通过虚拟机参数-Dsun.java2d.d3d=false或设置环境变量J2D_D3D=false禁止Direct3D属性。
NetBeans是Swing程序,所以当运行在笔记本上而且电源拔掉时,或Powerplay处于启动状态时,不管你有多少内存,甚至有1G以上,NetBeans的响应速度也非常慢。如果你发现NetBeans非常慢,但是你的内存并不小,也没有什么杀毒软件影响,而你使用的是笔记本时,很可能是上面的原因导致的。
这个问题非常普遍,在网上碰到大量的人抱怨1G的内存NetBeans都慢的不可忍受,其实很可能都是这个问题。理论上NetBeans在512M内存的机子应该跑得非常快。由于知道这个解决方案的人并不多,这是许多人碰到这种情况无法解决的主要原因。
解决方法是:
1.禁止PowerPlay,在控制面板中的显示属性->高级中设置。
或者
2.使用虚拟机参数-Dsun.java2d.ddoffscreen=false,即netbeans\etc\netbeans.conf的启动命令参数:
netbeans_default_options="-J-Xms64m -J-Xmx256m
-J-XX:PermSize=32m -J-XX:MaxPermSize=160m -J-Xverify:none
-J-Dapple.laf.useScreenMenuBar=true -J-XX:+UseConcMarkSweepGC
-J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled
-J-Dswing.usingSystemFontSettings=false
-J-Dsun.java2d.ddoffscreen=false"
或者
3.使用虚拟机参数-Dsun.java2d.d3d=false,即netbeans\etc\netbeans.conf的启动命令参数:
netbeans_default_options="-J-Xms64m
-J-Xmx256m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m
-J-Xverify:none -J-Dapple.laf.useScreenMenuBar=true
-J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled
-J-XX:+CMSPermGenSweepingEnabled
-J-Dswing.usingSystemFontSettings=false
-J-Dsun.java2d.d3d=false"