设为首页 加入收藏

TOP

Java堆与栈内存分配及String小记
2014-11-24 02:38:48 来源: 作者: 【 】 浏览:2
Tags:Java 内存 分配 String 小记

栈内存 堆内存

基础类型,对象引用(堆内存地址)
由new创建的对象和数组,

存取速度快
相对于栈内存较慢

数据大小声明周期必须确定
分配的内存由java虚拟机自动垃圾回收器管理。动态分配内存大小

共享特性


栈中如果有字符串,则直接引用


如果没有,开辟新的空间存入值
每new一次在堆内存中生成一个新的对象。

创建之后值可以改变
String类声明后则不可改变



一、栈内存


基础类型int, short, long, byte, float, double, boolean, char和对象引用


栈的共享特性


String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true


int a=100;


int b=100;



1、编译器先处理String str1 = "abc";它会在栈中创建一个变量为str1的引用,然后查找栈中是否有abc这个值,如果没找到,就将abc存放进来,然后将str1指向abc。


2、 接着处理String str2 = "abc";在创建完b的引用变量后,因为在栈中已经有abc这个值,便将str2直接指向abc。这样,就出现了str1与str2同时均指向abc的情况。


二、堆内存


new、newarray、anewarray和multianewarray等指令建立


要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的 对象。只有通过new()方法才能保证每次都创建一个新的对象。 由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ubuntu下编译Linux-xen的问题 下一篇Linux Shell脚本语言与数学表达式

评论

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