通过使用Class变量而不是Local变量在Renderer中获得的任何性能?

时间:2019-07-12 18:15:05

标签: java performance renderer

这可能是一个通用的Java问题,但是这个问题是Renderer特有的,因为它被频繁触发。

在方案1中,定义了局部变量myComponent。

方案1-局部变量myComponent

resourceKey

在方案2中,定义了类变量myComponent。

方案2-类变量myComponent

public class MyCellRenderer extends DefaultTableCellRenderer
{
    public Component getTableCellRendererComponent(JTable table,
        Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        JLabel myComponent = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            :
            //Lots of other work going on here. 
            :
        myComponent.setText(newValue);
        myComponent.setToolTipText(newTooltipText);

        return myComponent;
    }
}

在方案1中,Java必须在内存中为新的myComponent分配空间。当然,这似乎没有太大的开销,但是如果表有20列和10,000行,那么如果用户从上到下快速滚动,这不会成为沉重的负担吗?随着用户快速向上/向下滚动,Java将迅速分配200,000个myComponent,对吗?

如果我在方案1中的假设是正确的,那么方案2是否可以缓解方案1中的问题?

如果否,通过在渲染器中创建Class变量,方案2是否比方案1有任何优势?

0 个答案:

没有答案