@Override
	public void gc() {
		for (XObject[] m : memory) {
			for (XObject o : m) {
				o.resetVisible();
			}
		}
		for (XValue baseType : baseTypes) {
			baseType.setVisible(this);
		}
		for (XValue module : modules.values()) {
			module.setVisible(this);
		}
		for (XExec exec : threads) {
			exec.setVisible();
		}
		for (XObject[] m : memory) {
			for (int i = 0; i < m.length; i++) {
				if (!m[i].isVisible()) {
					m[i].delete(this, false);
				}
			}
		}
		// TODO visited all the objects?
	}