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

栈(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:对象就储存在堆内存中


引用人家的一段话:

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

转载于:https://www.cnblogs.com/linjingjia/p/7198270.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值