A scalable technique for characterizing the usage of temporaries in framework-intensive Java applications