code: def _get_prog_memory(resources, cores_per_job):
      
      out = None
      for jvm_opt in resources.get("jvm_opts", []):
          if jvm_opt.startswith("-Xmx"):
              out = _str_memory_to_gb(jvm_opt[4:])
      memory = resources.get("memory")
      if memory:
          out = _str_memory_to_gb(memory)
      prog_cores = resources.get("cores")
      # if a single core with memory is requested for the job
      # and we run multiple cores, scale down to avoid overscheduling
      if out and prog_cores and int(prog_cores) == 1 and cores_per_job > int(prog_cores):
          out = out / float(cores_per_job)
      return out
docs: Get expected memory usage, in Gb per core, for a program from resource specification.