Re: Why "lock" functionality is introduced for all the objects?
On 6/28/2011 11:54 AM,
supercalifragilisticexpialadiamaticonormalizeringelimatisticantations wrote:
On 28/06/2011 2:42 PM, Patricia Shanahan wrote:
Each String instance has the following fields:
private final char value[];
private final int offset;
private final int count;
private int hash;
There are 12 bytes in addition to the char array. The offset and count
fields allow quick sub-string construction, and hash is used to cache
the hashCode result.
Oh, geez, even *more* overhead. And let's not forget the array has its
own separate object header and length field!
The array may be shared by several String objects.
In general, many trade-offs in Java, not just the decision to make every
object capable of being a lock, assume that other considerations are
more important than minimizing memory use. For example, caching the hash
code pays four bytes per String in order to have a hash code that
depends on the entire string, without paying the cost of calculating it
repeatedly when a String is used as a hash table key.
If, for your purposes, minimal memory use is very important, you may
want to consider other languages with other trade-offs.
Patricia