越深入java 就觉得java做得越烂,java设计问题 之 : JVM缓字符串常量

在前面三贴中,我提到过 
1 Object 要用8byte指针内存 
  see (http://topic.csdn.net/u/20081202/14/e93bd51a-a222-4e00-a7a5-5c6f07e7ed52.html) 

2 Long a = 2l; 
Long b = 2l; 
//结果为ture 
System.out.println(a == b); 
Long c = 128l; 
Long d = 128l; 
//结果为false 
System.out.println(c == d); 
  see (http://topic.csdn.net/u/20081119/12/b3c447ef-6665-4225-8d36-60e211663bb3.html) 

3 JVM会把系统里的字符串常量,缓存到JVM中(在java中如果你定义N多个字符变量,值是一样的,实际在JVM中只有一份) 

上面3个问题合起来可以说明一个问题: 
java对基础数据的cache封装方案是不正确的,应当只能算是曲线救国,解决不了根本问题。 
因原很简单:java应当cache 字符,而不是这符串String, 
最好的选择是:cache utf-16le(java用的内部字符编码),而java确不是这样做的。 
导致的问题:a)符串String 常量是无法确定的,如果在一个系统中使用过多的常量,会让内存涨破。 
            b)不能在for等语句中使用String,这样容易让内存out,系统玩完,(往往刚学的新手不知道)。 
            c)逼得大家选择Stringbuffer类来操作可变String,很不方便。 

问题核心提示:java  不cache utf-16le的愿因 是代价比cache String要高。为什么要高呢? 请详细了解 三个问题就可以回答

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章