栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)

原创 2007年09月22日 17:12:00
 

HTML Tags and JavaScript tutorial



栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)





栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
3. Java中的数据类型有两种。基本类型(primitive types), 共有8种,即int, short, long, byte, float, double, boolean, char。存在于栈中。另一种是包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中.
String str = "abc";和String str = new String("abc");和char[] c = {'a','b','c'};String str=new String(c);都采用堆存储
String str = "abc";在栈中如果没有存放值为"abc"的地址,等同于:
String temp=new String("abc");
String str=temp;
关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
char[] c = {'a','b','c'};String str=new String(c);等同于:
String str = new String('a'+'b'+'c');
***********************************************************************************
*转贴:http://community.csdn.net/Expert/topic/4848/4848360.xml?*temp=9.325808E-02
*看完之后真正的明白了,感谢!  和大家一起分享!!
***********************************************************************************
 


相关文章推荐

java栈stack和堆heap的工作原理,用途及区别?举例说明

java堆和栈的区别 Java中内存分成两种:一种是栈stack,一种是堆heap。 函数中的一些基本类型的变量(int, float)和对象的引用变量(reference)都在函数的栈中...

java 中 堆(Heap) 和 栈(stack) 的区别

Java里面 Heap 和 Stack 分别存储数据的不同。                                         Heap(堆)                     ...

Java中的Stack栈和Heap堆的区别

首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。 Heap和Stack分别存储数据的不同。     Heap(堆) Stack(栈) JV...

java中堆(stack)和栈(heap)的区别

在学习java的过程中,经常会见到椎和栈的介绍,但是一直都是了解了个大概,而且看了之后又经常会忘掉,所以这次在网上查找了一下资料,把对堆和栈的介绍记录下来,以供复习使用。     在java中内存的占...

[Java]Stack栈和Heap堆的区别

首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。         在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语:     ...

Java中Stack栈和Heap堆的区别

分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语:堆存储: heapstorage 堆存储分配...

JAVA:Stack栈和Heap堆的区别

原文地址:http://android.blog.51cto.com/268543/50100

Java 堆(heap)栈(stack) 的区别

栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newa...

Java中堆(heap)和栈(stack)的区别

程序执行的过程: 程序从硬盘载入的内存->有四个内存区供程序使用 heap(堆 ),stack(栈),data segment,code segment heap堆:用来存放new出来的东...

java中堆栈(stack)和堆(heap)(问静态变量放哪里,局部变量放哪里,静态区在哪里)

(1)内存分配的策略  按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
举报原因:
原因补充:

(最多只允许输入30个字)