General: When Debugging Get a Unique Identifier For Any Object



Sometimes it is handy to have a unique identifier for an object. By unique identifier, I mean an ID that represents a single instance of an object; not just an object that 'equals' another object, but the actual unique instance. A primary usecase would be during debugging when you have an object which has changed physically, and while being equivalent due to an overridden 'equals' and 'hashcode' method, is not the same object. Say, for instance, you are debugging a failing cache mechanism, and you are trying to track down when the physical instance changed.

The first reaction most developers have when trying to get a unique identifier to quickly identify when an object changes is to use the #hashcode method of the object, which in the traditional Object case is unique for each object (* in reality the specification doesn't enforce this rule; but most modern JVMs use a relationship to the object's memory location, so typically hashcode is unique). If the 'equals' method is overridden, and the developer of the class was responsible, 'hashcode' was overridden as well, so now, if implemented correctly, hashcode will return the same value for these two distinct objects, and your helpful debugging tool is gone.

Thankfully, you can still gain access to this value - simply use System.identityHashCode(Object) , passing in the object you want the hashcode for. The value returned is always the same as if hashCode was not overridden.

Object x = getSomeObject();  System.out.println("Object Identifier: " + System.identityHashCode(x));  cache.cacheObject(x);  // ...  Object cachedX = cache.getObject();  System.out.println("Object Identifier: " + System.identityHashCode(cachedX));  

So, while you shouldn't rely on this value to be unique in production code (if you need that kind of support, use the ID generator from this tip :)) - but if you're debugging and need a quick and easy object tracking mechanism on a Sun, IBM, or other mainstream VM, consider System.identityHashCode(Object).


Read full article from General: When Debugging Get a Unique Identifier For Any Object


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts