为什么Java2D在(慢)集成GPU上比(快)专用GPU更快?
我试图通过从Java2D切换到OpenGL(LWJGL)来优化应用程序的性能。我给自己写了一些基准测试,看看这两个测试之间的性能差异,并对一开始的结果感到满意。然而,当我在另一台机器上运行基准测试时,结果对我来说相当令人震惊 这是有问题的基准:为什么Java2D在(慢)集成GPU上比(快)专用GPU更快?,java,performance,graphics,gpu,java-2d,Java,Performance,Graphics,Gpu,Java 2d,我试图通过从Java2D切换到OpenGL(LWJGL)来优化应用程序的性能。我给自己写了一些基准测试,看看这两个测试之间的性能差异,并对一开始的结果感到满意。然而,当我在另一台机器上运行基准测试时,结果对我来说相当令人震惊 这是有问题的基准: public static void main(String[] args) throws InterruptedException { //create window JFrame frame = new JFrame(); f
public static void main(String[] args) throws InterruptedException {
//create window
JFrame frame = new JFrame();
frame.setSize(1000, 1000);
frame.setLocation(0, 0);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//add drawable component
frame.add(new JComponent() {
protected void paintComponent(Graphics graphics) {
Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setFont(g.getFont().deriveFont(24f));
long start = System.nanoTime();
for(int i=0;i<500;i++){
g.drawString("This is a test string - This is a test string - This is a test string",10, 20+i*2);
}
long end = System.nanoTime();
long nsDuration = (end-start);
System.out.println("DrawString takes: "+(nsDuration/1_000_000)+" ms");
}});
frame.setVisible(true);
boolean t=true;
while(t){
frame.repaint();
Thread.sleep(1000);
}
}
publicstaticvoidmain(String[]args)抛出InterruptedException{
//创建窗口
JFrame=新JFrame();
框架。设置尺寸(10001000);
帧设置位置(0,0);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加可拉伸组件
frame.add(新的JComponent(){
受保护的空心油漆组件(图形){
Graphics2D g=(Graphics2D)图形;
g、 setRenderingHint(RenderingHits.KEY\u TEXT\u ANTIALIAS,RenderingHits.VALUE\u TEXT\u ANTIALIAS\u ON);
g、 setFont(g.getFont().deriveFont(24f));
长启动=System.nanoTime();
对于(int i=0;i)您的微基准会受到许多您无法控制的因素的影响。尝试使用Java微基准线束()此链接是否有助于回答您的问题?@diginoise感谢您的指针,我没有听说过JMH!但是,我忽略了前两个结果,运行了许多迭代(应该使测量的时间正常化)并且只对较大的性能差异感兴趣(如果结果差异为10%,我同意,我应该修改基准的稳健性……但我们谈论的是1000%及更多).@VikramPalakurthi:你是指任何一段吗?我不明白那篇15年前的文章如何解释我在这里的经历…@Wolf这篇文章建议启用opengl的开关是区分大小写的True
。禁用它的值很可能是False
,因此你可能不是一个当你认为你是O_O时,你会加速