Sunday, December 23, 2018

Java String

Java String class properties
- immutable : makes thread safe
- final
- hash code is cached
- String pool is possible to implement
Why string is final i java ? link

StringBuffer vs StringBuilder
StringBuffer and StringBuilder are mutable classes. StringBuffer operations are thread-safe and synchronized where StringBuilder operations are not thread-safe. So when multiple threads are working on same String, we should use StringBuffer but in single threaded environment we should use StringBuilder. StringBuilder performance is fast than StringBuffer because of no overhead of synchronization.

String pool
- Introduction article. link Baeldung
- Performance of String.intern() - link. Tip from article :  use prime number for -XX:StringTableSize=N, like N =1,000,003 instead of 1,000,000

Oracle String.intern()
Returns a canonical representation for the string object.
A pool of strings, initially empty, is maintained privately by the class String.
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.
It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.
All literal strings and string-valued constant expressions are interned. String literals are defined in section 3.10.5 of the The Java™ Language Specification.
Returns:
a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.

Substring memory leak problem
- How caused and fix : link 
- Problem fixed after Java 7u6 version. link.(broken) , new link
* The original assumptions around the String object implementing a flyweight pattern are no longer regarded as valid.


No comments:

Post a Comment

Thank you for your comment!