Isolating memory usage

- Every job implements a standard Interface and is launched by the scheduler via reflection.

- The scheduler tracks the start and end of those jobs, and it catches/logs/emails any exceptions that the jobs fail to handle.

- Jobs are written by different developers in my organization, and it is possible that they may have memory leaks.

I need a mechanism that would allow me to launch those jobs in their own memory spaces so that if they have memory leaks they don't endanger the operation of the scheduler itself. I also need a way to monitor total memory consumption, and if feasible, the memory consumption of each job.