We propose a dynamic program slicing technique for object-oriented programs. We introduce the notion of compact dynamic dependence graph (CDDG) which is used as the intermediate program representation. Our dynamic slicing algorithm is based on the CDDG. We show that our algorithm is more time and space efficient than the existing ones. The worst case space complexity of our algorithm is O(n), where n is the number of statements of the program.