Efficient job scheduling in large scale distributed systems, such as grids, is challenging due to the large number of distributed and heterogeneous resources. Job scheduling takes place at multiple levels and is addressed by different entities at grid and local level. Grid schedulers can utilize dynamic site load information for site selection, while local schedulers apply resource allocation policies. Keeping low the response times of jobs is a primary objective regarding performance. Moreover, other important parameters need to be taken into account, such as the communication traffic among schedulers, the fair utilization of available resources, and the energy consumption. The optimization of the parameters mentioned above is not an easy task, especially in an environment where job service demands may be highly variable and unknown a priori.