JCL (Job Control Language) is used on IBM mainframes to instruct the operating system how to run batch jobs and start subsystems. It acts as an interface between application programming and the MVS Operating System. JCL is used for compiling and executing batch programs, controlling jobs, allocating files, sorting files, and more. JCL uses statements like JOB, EXEC, and DD to identify the job, specify execution parameters, and define file allocations respectively.