code: public void free()
      {
          if (m_messageFilterList != null)
              m_messageFilterList.free();
          m_messageFilterList = null;
          
          Record record = this.getMainRecord();
  
          if (record != null)
          {
              try
              {
                  this.finalizeThisScreen();  // Validate current field
                  if (record.isModified(false))
                      if (record.getRecordOwner() == this)
                      {
                          if (record.getEditMode() == Constants.EDIT_IN_PROGRESS)
                              record.set();
                          else if (record.getEditMode() == Constants.EDIT_ADD)
                              record.add();
                      }
              } catch(DBException ex) {
                  this.displayError(ex);
              }
          }
          if (m_recDependent instanceof Record)
              ((Record)m_recDependent).removeDependentScreen(this);  // This screen is gone, so query doesn't have to destroy me on close
  
          if (this.getTask() != null)
              this.getTask().setProperties(null);     // Since the task holds all of my properties
  
          super.free();
  
          m_vRecordList.free(this); // Free all records belonging to this screen, remove all others from list
          m_vRecordList = null;
  
          if (m_databaseCollection != null)
              m_databaseCollection.free();
          m_databaseCollection = null;
      }
docs: Free.