2012-09-18 53 views
6

我正在做一个基于swing的应用程序,我使用JTable。我使用DefaultCellEditor作为需要组合框选择的列之一。但是DefaultCellEditor有很多我不需要的方法。所以我通过扩展AbstractCellEditor来编写定制的CellEditor,在那里我只实现了所需的方法。我的问题是java类的大小是否会影响应用程序的性能

(一般情况下)如果我们有一个类,并且如果我们不需要该类的所有方法,那么使用它就好了,或者编写一个自定义类,而我们只实现这些方法我们需要什么?和

通过使用自定义类将提高应用程序的性能(内存),或它将保持与具有所有方法的类相同吗?

任何帮助将不胜感激。

+6

“过早优化是万恶之根” –

+0

@guido“过早优化是万恶之源”的爱吧。:) – Amarnath

+2

Mathias,你是说JVM不会加载一个类的所有方法 - 只有实际调用的那些方法?你有参考吗? – Faelkle

回答

15

除非您有充分理由相信包括JDK本身在内的应用程序中没有其他内容使用DefaultCellEditor,否则几乎肯定会让事情变得更加糟糕。

您还需要考虑在极端情况下,您可能已经保存了大概10万个代码,其中典型的JVMS使用大约1 GB的代码执行。所以你可能已经节省了0.01%的代码空间。这不是对你的时间的有效利用。事实之后,正确的程序是测试和测量时间和空间瓶颈的真实位置。程序员在预测这些事情方面的能力很差。

+0

+1。使用'DefaultCellEditor'是因为你知道它会起作用,并且你不会引入任何错误。完成后,对系统进行配置,如果'DefaultCellEditor'显示为热点,则考虑自定义或重写它。最后优化,当你完全理解问题空间,并且你有一个工作解决方案。 – Faelkle

3

该类的代码(实际字节码)只在内存的PermGen区域中加载一次,而不管该实例化此类型的对象数量多少。

我不会接受这个代码,因为要复制功能,这已经是可用的,而且你不添加功能AbstractCellEditor,你重新实现在DefaultCellEditor代码已经被(希望)由Oracle(或Sun测试)。

正如EJP所说,引入错误并不值得浪费时间和潜力。

1

如果您创建包含更少成员对象的自定义类,则内存占用将更低。方法的数量不会影响对象的大小,只是类的大小。一般来说,除非确定实际上有问题,否则我不会过早地进行优化(例如,如果您有数千个对象实例,并且堆/垃圾收集器日志分析显示您正在调试内存和/或经常有旧空间的集合)的,因为额外的代码的意思是:

  • 额外的维护(你需要确保你的自定义CellEditor不是越野车)
  • 额外的努力以书面自定义代码
  • 额外的努力测试自定义代码

AFAIK,CellEditor在需要时被实例化,因此无论如何您都不会节省太多内存。

+0

如果没有其他人使用被替换的类,在这种情况下为'DefaultCellEditor',并且它不回答问题,这是关于方法而不是'成员对象'的问题,您的第一句只有真。 – EJP

+0

确实如此,但这种事情很难衡量,因为对其他对象的对象进行了强烈的引用。如果他将某些东西传递给已经在对象图的其他地方引用过的构造函数,那么浅的覆盖区可能会增加,但所用的总内存不会增加。 – Faelkle

相关问题