code: def _discard_arena(self, arena):
      # Possibly delete the given (unused) arena
      length = arena.size
      # Reusing an existing arena is faster than creating a new one, so
      # we only reclaim space if it's large enough.
      if length < self._DISCARD_FREE_SPACE_LARGER_THAN:
          return
      blocks = self._allocated_blocks.pop(arena)
      assert not blocks
      del self._start_to_block[(arena, 0)]
      del self._stop_to_block[(arena, length)]
      self._arenas.remove(arena)
      seq = self._len_to_seq[length]
      seq.remove((arena, 0, length))
      if not seq:
          del self._len_to_seq[length]
          self._lengths.remove(length)
  
imports: import bisect
  from collections import defaultdict
  import mmap
  import os
  import sys
  import tempfile
  import threading
  from .context import reduction, assert_spawning
  from .None import util
label_desc: Use image node_id 4 for calling the Heap obj's underlying member method code with example usage: obj._discard_arena(arena) without return types