>>264 の言いたいことってこういうことだろ?
 private static class ShowTableAction extends AbstractAction {
  private DefaultTableModel model;
  
  public ShowTableAction() {
   super("Show Table");
   model = new DefaultTableModel();
  }
  
  public void actionPerformed(ActionEvent ev) {
   JTable table = new JTable(model) {
    public void finalize() throws Throwable {
     super.finalize();
     System.out.println("bye!");
    }
   };
   
   JOptionPane.showMessageDialog(null, table, "", JOptionPane.PLAIN_MESSAGE);
   table.setModel(new DefaultTableModel()); //入れるのと入れないのとで大違い
   System.gc();
   System.out.println(model.getTableModelListeners().length); //入れとかないと増える一方
  }
 }

ま、要するに、TableModel を使い回しするのをやめればいいのだ。
変化を何かに通知する目的までを含めて TableModel であることに意義があるのだから、
影で保持しとく間までも、TableModel の姿をしておく必要はない。