越深入java 就觉得java做得越烂,java设计问题 之 : JVM缓字符串常量
来源:互联网 发布:获取网页源码有什么用 编辑:程序博客网 时间:2024/05/19 04:55
在前面三贴中,我提到过
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要高。为什么要高呢? 请详细了解 三个问题就可以回答
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要高。为什么要高呢? 请详细了解 三个问题就可以回答
- 越深入java 就觉得java做得越烂,java设计问题 之 : JVM缓字符串常量
- 越深入java 就觉得java做得越烂,java设计问题 之 : 数据绑定
- 越深入java 就觉得java做得越烂,java设计问题 之 : 1.5 Instrumentation设计问题
- 越深入java 就觉得java做得越烂,java设计问题 之 : 对象占用内存空间设计
- 越深入java 就觉得java做得越烂,java设计问题 之 :关于1.5,1.6 java处理基本对象类型cache的问题
- JAVA 字符串常量池,jvm指令解析
- Java之深入JVM(6)
- Java之深入JVM(1)
- Java之深入JVM(3)
- java-jvm-常量池
- Java字符串常量池的问题
- Java字符串常量池相关问题
- JAVA 字符串常量池
- java字符串常量池
- java字符串常量池
- java字符串常量池
- java 字符串常量池
- Java字符串常量池
- JDK 6 + TOMCAT 6 + Eclipse 3.3 + MyEclipse 6.0 / MyEclips
- 公司要用无盘网络办公
- 越深入java 就觉得java做得越烂,java设计问题 之 : 1.5 Instrumentation设计问题
- 人的一生,像乘坐一台公交车
- 越深入java 就觉得java做得越烂,java设计问题 之 : 数据绑定
- 越深入java 就觉得java做得越烂,java设计问题 之 : JVM缓字符串常量
- 如何从应用程序进入linux内核
- Ubuntu命令总结1
- hibernate不支持数据库断开后重新连接问题
- 使用DBGridEh解决显示nText字段时显示memo的问题
- NCR5887 ATM机Presenter空置插头阻碍出钞解决方法-NCR5887常见故障系列四
- 提高java程序性能设计
- “$PS1“详解
- 原创RGB调节器——JSlider Exercise