`
syyixin
  • 浏览: 37081 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java基础之栈堆简介

    博客分类:
  • Java
阅读更多

 

(stack)与堆(heap)是两种数据结构,其数据项均按序排列,即只能在一端对数据项进行插入、删除等操作。其中栈一般由编译器自动分配释放,用来存放方法的参数值、局部变量等数据,遵循先进后出(First-In/Last-Out)原则;堆则一般运行时分配,用来存放New出来的对象等数据,由JVM自动回收,遵循先进先出(First-In/First-Out)原则。

 

栈堆均存在缓存机制,其中栈用的是一级缓存,局部变量等被调用时分配内存,调用完毕则空间立即被释放;栈使用的是二级缓A存,其生命周期由Java虚拟机JVM的垃圾回收算法自动回收。很显然,因为缓存机制不同栈中局部变量等数据调用速度会比较快,而堆中对象等数据生命周期不确定且属于运行时动态分配,故调用速度效率相对较低。

 

这里我做一个不太妥当的比喻以帮助大家理解:栈是呼吸系统,进入呼吸系统的主要是空气,空气更新比较快;堆是消化系统,一个馒头一只苹果地进去,经过消化系统较长时间的消化后才被排出,并且早上吃的鸡蛋一定比晚上吃的粥先排出来,如下示意图所示:


 

 

举个具体的例子,我们知道 intbyteshortfloat等基本数据类型定义的时候是以“数据类型变量名 = 变量值;”的方式进行定义,如int x=1;。编译器分析这句话的时候首先在栈中创建一个变量为x的引用,然后在栈中进行查找,看有没有值为1的地址存在;如果存在则将引用指向该地址,否则开辟存放1的地址并将变量x指向该地址,这里假设指向的地址为0x0001。需要注意的是,这些基本数据类型是值类型,传递的是值而非引用。即如果定义一个新的变量y=1;编译器就是寻找值为1,因为之前有x的引用指向的值为1,所以找到了,那么栈中创建变量y的引用并指向x指向的地址,亦即xy两个变量指向同一个地址0x0001。这时候我们改变x的值,比如x=3;,因为栈里面找不到值为3的地址,所以栈开辟新的空间来存这个值,比如这个空间地址是0x0002,这时候x的值确实变化了,但x 的变化并没有影响y的值的变化,y变量的引用指向的仍旧是值为1的地址0x0001。栈的内部处理流程及结构如下图所示:



 

 
 

 

 

Java中通过new()关键字来显式告诉编译器这些new出来的对象要放在堆中,并且是运行时才能动态创建,其内部运行机制和结构与栈类似,栈弄明白了堆自然而然也就变得明了。

 

        

 

作者:忆辛,公历201522日17时09分写于羊城,发表在iteye网站,未经作者书面许可,任何单位或个人不得转载、复制本文的全部或部分内容。

 

  • 大小: 39.3 KB
  • 大小: 32.6 KB
  • 大小: 6.7 KB
4
2
分享到:
评论
4 楼 syyixin 2015-02-03  
谢谢指出,写错了;栈一级堆二级
3 楼 tomgxf 2015-02-03  
栈1级缓存,堆2级缓存。
2 楼 huyinghuying 2015-02-03  
“栈使用的是二级缓存” 是 “堆使用的是二级缓存”
1 楼 huyinghuying 2015-02-03  
"栈使用的是二级缓A存" 应该是“堆栈使用的是二级缓A存”

相关推荐

    Java 基础入门(传智播客出品).pdf

    Java 基础入门,适合初学入门java的同学

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    《Java基础案例教程(第2版)》课后习题答案1

    【Java基础知识点】 1. **Java的起源与特性** - Java是由SUN Microsystems公司(后被Oracle收购)开发的一种面向对象的编程语言。 - Java有三个主要版本:Java Standard Edition (JavaSE),用于桌面应用;Java ...

    java 基础异常 java 基础异常java 基础异常java 基础异常

    java 基础异常 java 基础异常java 基础异常java 基础异常java 基础异常 java 基础异常java 基础异常java 基础异常java 基础异常 java 基础异常java 基础异常java 基础异常java 基础异常 java 基础异常java 基础异常...

    java基础案例教程

    java基础的案例分析和实例教学,适合新手及回顾查阅,对于夯实基础有好处

    黑马程序员java基础试题、笔记

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。"黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括...

    JAVA基础自学教程

    写的很详细,适合初学者,里面的讲解很丰富,很有学习价值,最好是配套一本详细的JAVA基础一起看,会有更好的效果

    Java基础学习Java基础学习

    Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础学习Java基础...

    java简介及基础教程和实用案例分析及特点阐述

    javajava简介及基础教程和实用案例分析及特点阐述java简介及基础教程和实用案例分析及特点阐述java简介及基础教程和实用案例分析及特点阐述java简介及基础教程和实用案例分析及特点阐述java简介及基础教程和实用案例...

    java基础教程

    java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础java基础

    java基础课件java基础课件java基础课件

    java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础课件java基础...

    韩顺平_循序渐进学Java零基础【完整笔记】1

    【标题】:“韩顺平_循序渐进学Java零基础【完整笔记】1” 【描述】:这个课程是为初学者设计的,旨在通过系统的学习帮助学生掌握Java编程的基础。课程分为三个阶段,详细讲解了Java语言的核心概念、就业前景以及在...

    19.java基础概念-注释.zip

    19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java...

    20.java基础概念-关键词.zip

    20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_...

    java入门基础教程(pdf)

    Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并...

    java基础理论知识串讲java基础理论知识串讲

    java基础理论知识串讲java基础理论知识串讲

    Java基础知识总结 (绝对经典)

    ### Java基础知识总结(绝对经典) #### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人所开发的Oak语言,原计划用于控制嵌入式设备如有线电视交换盒和个人数字助理(PDA)。1994年...

    Java基础知识ppt(适合自学)(中文)

    1. **Java简介**:介绍Java的发展历程、应用领域以及为什么选择学习Java。可能会提及Java的“一次编写,到处运行”(Write Once, Run Anywhere, WORA)特性。 2. **环境搭建**:如何安装Java Development Kit (JDK)...

    Java基础教程教学ppt

    Java基础教程 教学ppt. 苏州职业大学计算机与电子工程系曾海 <br>内容如下: <br>Java基础教程第十三单元《文件处理》ppt及习题 Java基础教程第十二单元《意外处理》ppt+习题+作业 Java基础教程第...

Global site tag (gtag.js) - Google Analytics