1. A method of parallelizing execution of a computer program comprising the steps of: (a) executing the program on a first processor, the program having at least one program method; (b) at a trigger point in the program as executed on the first processor and before a point of calling of the program method as executed on the first processor, executing the program method on a second processor based on assumed values of a read set of data read by the program method in the program method's execution; and (c) at the point of calling the program method as executed on the first processor; (i) if there has been no writing to the read set since the trigger point, not executing the program method on the first processor and instead adopting a write set of data written by the given program method during execution of the program method on the second processor; (ii) if there has been a writing to the read set since the trigger point executing the program method on the first processor.