Patent ID: 8645917

Claim:
A system for providing programming language support for debugging heap related errors, comprising: a memory including an area made available to a program; a processor configured to execute one or more queries for determining one or more global properties associated with use of the area by the program, wherein the one or more queries comprise at least a query that determines whether an object in the memory is reachable only from a calling application thread by tracing in parallel from all threads except the calling application thread, blocking all threads and releasing one, in response to determining that the object is marked, setting return result to false, in response to determining that the object is not marked, setting return result to true, and releasing all blocked threads, the one or more queries used inside a Java programming language assertion statement that contains an expression that is assumed to be true when the assertion statement executes and if the expression evaluates to not true, an error is thrown by an entity executing the Java programming language assertion statement, wherein the one or more queries inspects a shape of the memory at a point in the program, and wherein the programming language support enables a programmer to directly invoke from the program, the one or more queries that inspects the shape of the memory at a point in the program, and wherein the one or more queries are configured to execute in parallel with synchronization mechanism, wherein the one or more queries further comprises a query that determines whether there is an object reachable from at least two different objects by having multiple evaluator threads trace in parallel from a respective source and each evaluator thread in response to finding the object, adding the respective source to a local set, said each evaluator thread combining respective local set into a global set, blocking all evaluator threads except for one evaluator thread, said one evaluator thread computing result wherein the result is true if the global set has size greater than one, and the result is false if the global set has size less than equal to one.