Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java2D在(慢)集成GPU上比(快)专用GPU更快?_Java_Performance_Graphics_Gpu_Java 2d - Fatal编程技术网

为什么Java2D在(慢)集成GPU上比(快)专用GPU更快?

为什么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

我试图通过从Java2D切换到OpenGL(LWJGL)来优化应用程序的性能。我给自己写了一些基准测试,看看这两个测试之间的性能差异,并对一开始的结果感到满意。然而,当我在另一台机器上运行基准测试时,结果对我来说相当令人震惊

这是有问题的基准:

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时,你会加速