1 堆、栈、常量池的区别与异同

原创 2016年08月31日 16:27:39

栈(Stack):数据结构上是一种顶端开口结构,只能在栈顶(top)进行操作的数据。是系统自动分配。

堆(Heap):一种树形结构,可以随时存放和取走。需要程序员自己分配,Java中最常用的就是new这个关键字。

常量区(常量池)(Constant pool):常量字符串就是存放在这个地方。只可以读不可以写。

全局区也叫静态区(Static Area):存放全局变量和静态变量,可读可写。

程序代码区:存放函数体的二进制代码。

public class Stack {

	 String  str="Helloworld";    
		//str 就位于堆区,"HelloWorld"位于常量池
     String  str1=new String("Helloworld");
		 //str1位于栈区,"Helloworld"就位于堆区
	 	 
	public void method(String string) 
	{
		
		 // TODO Auto-generated method stub
		String s2=new String("HelloWorld");
       //s2是栈,新建的"HellpWorld"这个String对象就位于堆区	
	 
		String s3="HelloWorld";
		//s3是栈,"HellpWorld"这个String对象就位于堆区
		//这个局部变量位于方法里面
     
	}

}




栈和堆的理论知识

1申请方式

stack:是系统自动分配内存    heap:程序员自己申请,并指明大小。

2申请后的系统响应

stack:只要系统剩余的栈大于申请的栈,就会没事,否则就会出现栈溢出。

heap:系统会帮你找到比较合适的区域,系统中会有一个链表记录剩余地址空间。

3申请效率

stack:比较快,程序员无法控制

heap:一般运行速率比较慢

4 面向的对象

stack:基本类型、对象的引用

heap:对象就储存在堆内存中


引用人家的一段话:

  堆和栈的区别可以用如下的比喻来看出:    
  使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就  
  走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自  
  由度小。    
  使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由  
  度大。   

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java堆、栈和常量池在应用中的区别

   1. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)   2. 堆:存放所有new出来的...

Java堆、栈和常量池详解

  • 2014-01-09 12:00
  • 105KB
  • 下载

Java中的字符串常量池与Java中的堆和栈的区别

转载自:http://droidyue.com/blog/2014/12/21/string-literal-pool-in-java/ Java中字符串对象创建有两种形式,一种为字面量形式,如Str...

java中String类常量池分析及"equals"和"==”异同

首先简单说一下“equal”和“==” ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equa...

Java中 堆 栈,常量池等概念解析(转载)

1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.  2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(...

java堆、栈、方法区、常量池

1:栈    在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。      当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当该变量退出该作...

Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)

String

Java中堆、栈、常量池等概念解析

程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据: (1) 寄存器这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,...

关于Java堆、栈和常量池的详解

在JAVA中,有六个不同的地方可以存储数据:     1. 寄存器(register)。      这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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