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中内存堆,内存栈,常量池三者的关系

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

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

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

自写JQ控件-树状菜单控件[demo下载]

一个多月没有写博客了,最近也弄一个基于JQ的树状菜单控件,在此分享给大家。另外呢,通过这个例子分享一下怎么写JQ控件的。事实上工作中,也是经常遇到的,有些时候自己想实现一些前端效果,用网上一些插件吧,...

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

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

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

转载自:http://droidyue.com/blog/2014/12/21/string-literal-pool-in-java/ 最近做到一个题目: 问题:String str...

Java堆、栈和常量池详解

  • 2014年01月09日 12:00
  • 105KB
  • 下载

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

1 堆与栈Java的数据根据不同的使用情况,有不同的分类,接下来先简单概括一下各种数据类别(不是类型)的内存分配情况,首先帮助区分一下java堆和java栈: 基础数据类型(Value type)直接...

Java堆.栈和常量池学习

1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1 堆、栈、常量池的区别与异同
举报原因:
原因补充:

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