我前面的一篇文章曾经提到过这个问题,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"
这个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"