设为首页 加入收藏

TOP

Java内存管理--栈、堆和常量池
2014-11-23 23:57:11 来源: 作者: 【 】 浏览:8
Tags:Java 内存 管理 常量

今天有朋友问java中String[] str = s.split(",")的内存分析,于是开始查资料并测试。首先,发现在java的内存管理中“常量池”是个很奇怪的东西,很多人不清楚(当然我也不清楚),经查资料总结如下:


栈(Stack) :存放基本类型的变量数据和对象的引用。


堆(heap):存放所有new出来的对象。


常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量。另外,可以存储不经常改变的东西(public static final)。常量池中的数据可以共享。


然后再来分析下,String[] str = s.split(",");split会产生几个对象,存储在哪


测试代码如下:


String s = "aa,aa";


String[] str = s.split(",");


if (str[0] == str[1]) {


System.out.println("str[0]==str[1]");


} else {


System.out.println("str[0]!=str[1]");


}


输出结果:str[0]!=str[1]


可见,s.split(",");执行的是new String();方法,所以一个split片段会创建两个对象(如果常量池中没有的话):常量池中1个,堆中1个。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android GC内存泄露问题 下一篇单向链表归并排序 Java

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: