在类级别定义对象或者在mouseMoved()中定义对象

时间:2015-01-15 12:49:02

标签: java swing garbage-collection

以下是该方案。

  • 使用JTable
  • 精心制作整个表格的mouseMoved()事件代码。
  • 在mouseMoved()
  • 中定义并实例化了超过24个对象
  • JTable可以有20多列和1000行。

由于JTable的大小,mouseMoved()事件将被执行多次并创建大量对象。当执行mouseMoved()事件时,这很容易导致数千个对象被使用和丢弃。

如果JTable被大量使用,这会导致与垃圾收集相关的潜在问题,还是可能会出现内存增长?

哪个更好:

  1. 在mouseMoved()事件中定义对象,并在方法退出后让垃圾收集清理对象?
  2. 在类级别定义对象,在mouseMoved()事件中实例化它们,然后在退出之前设置为null。
  3. 一种选择比另一种更好吗?

1 个答案:

答案 0 :(得分:0)

实际上它取决于创建的对象。 2几十个整数是好的,但2几十个图像将是一个真正的问题。

我会将它们添加到JTable级别并尝试以某种方式重用/缓存它们。例如。 BigDecimal有一些常量ZERO,ONE,ONE,以避免永久重现流行的物体。你应该添加这样的东西。 Mat可以创建一些并从MouseEvent重新初始化的对象。