这可能是一个通用的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有任何优势?