`
jsx112
  • 浏览: 307206 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java中堆栈的认识

阅读更多

Java中堆栈的概念当然是逻辑上的,在完全符合Java规范的Java处理器面世之前,所有Java虚拟机提供的内容都是由软件模拟出来的。

什么叫堆?你用十几个麻将牌竖直叠成一摞这叫堆,你可以从上面、下面、中间任意抽出一张牌,也可以任意插入一张。

什么叫栈?AK-47的弹匣就是一个栈,在上面的子弹没被取出之前,你无法取出下面的子弹——尽管你可以从边上的透明部分读出里面装的是什么型号、颜色的子弹。

堆很灵活,但是不安全。对于对象,我们要动态地创建、销毁,不能说后创建的对象没有销毁,先前创建的对象就不能销毁,那样的话我们的程序就寸步难行,所以Java中用堆来存储对象。而一旦堆中的对象被销毁,我们继续引用这个对象的话,就会出现著名的 NullPointerException,这就是堆的缺点——错误的引用逻辑只有在运行时才会被发现。

栈不灵活,但是很严格,是安全的,易于管理。因为只要上面的引用没有销毁,下面引用就一定还在,所以,在栈中,上面引用永远可以通过下面引用来查找对象,同时如果确认某一区间的内容会一起存在、一起销毁,也可以上下互相引用。在大部分程序中,都是先定义的变量、引用先进栈,后定义的后进栈,同时,区块内部的变量、引用在进入区块时压栈,区块结束时出栈,理解了这种机制,我们就可以很方便地理解各种编程语言的作用域的概念了,同时这也是栈的优点——错误的引用逻辑在编译时就可以被发现。

分享到:
评论

相关推荐

    Java中使用StackWalker和Stream API进行堆栈遍历

    StackWalking API是添加到Java中最酷的(并且对大多数开发人员来说完全不切实际,一般不会用,除非深层跟踪调优)的功能之一。在这篇简短的文章中,我们将看到它是什么以及使用它有多么容易,很快的认识它

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    8.1.4 认识堆栈追踪 241 8.1.5 关于assert 245 8.2 异常与资源管理 247 8.2.1 使用finally 247 8.2.2 自动尝试关闭资源 249 8.2.3 java.lang.autocloseable接口 251 8.3 重点复习 255 8.4 课后练习 ...

    AIC的Java课程1-6章

    第5 版 清华大学出版社  “SCJP学习指南” 人民邮电出版社  “Java 编程思想” 第3版 机械工业出版社  教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 ...

    Java虚拟机(JVM)面试题(总结最全面的面试题!!!)

    ) 文章目录Java内存模型我们开发人员编写的Java代码是怎么让电脑认识的为什么说java是跨平台语言Jdk和Jre和JVM的区别说一下 JVM由那些部分组成,运行流程是什么?说一下 JVM 运行时数据区详细的介绍下程序计数器?...

    数据结构Java语言描述课程实验设计(全文).docx

    灵活应用编写的方法,实现不同的功能要求,培养学生对实验总体结构配置、方法外特性的认识,如利用队列和堆栈实现单链表的逆序排列。 总之,在课程实验组织中,做到有对整体结构加以介绍的说明;有给学生完成实验的...

    两两认识leetcode-ACM-ICPC:ACM-ICPC

    两两认识leetcode ACM-ICPC准备 该程序已开发用于学习用于竞争性编程的算法,但可用于: 竞技编程 面试练习 提高算法思维 为大学课堂练习 乐趣 课程要求: 至少精通一门编程语言。 (您必须能够有效地使用该语言。 ...

    android实习报告(1).doc

    增强学生对计算机在社会生活,社会生产中应 用的感性认识,深入了解计算机在各个领域中的应用状况,学生在实习的同时,进行一 定的社会实践与调查活动,对于提高学生的综合能力和全面素质具有重要意义。 实习内容: ...

    两两认识leetcode-Topics:话题

    两两认识leetcode 话题 ACM-ICPC准备 该程序已开发用于学习用于竞争性编程的算法,但可用于: 竞技编程 面试练习 提高算法思维 为大学课堂练习 乐趣 课程要求: 至少精通一门编程语言。 (您必须能够有效地使用该...

    两两认识leetcode-CP:CP

    两两认识leetcode ACM-ICPC准备 该程序已开发用于学习用于竞争性编程的算法,但可用于: 竞技编程 面试练习 提高算法思维 为大学课堂练习 乐趣 课程要求: 至少精通一门编程语言。 (您必须能够有效地使用该语言。 ...

    两两认识leetcode-ACM-ICPC-Preparation-master-ct:ACM-ICPC-Preparation-master

    两两认识leetcode ACM-ICPC准备 该程序已开发用于学习用于竞争性编程的算法,但可用于: 竞技编程 面试练习 提高算法思维 为大学课堂练习 乐趣 课程要求: 至少精通一门编程语言。 (您必须能够有效地使用该语言。 ...

    webrcp-tutorial:来自 sourceforge.net 的 webrcp 项目教程

    不幸的是,原始教程没有作为 w11k/webrcp 项目的一部分移植到新技术堆栈中。 这就是这个项目试图做的。 由于 w11k/webrcp 项目中未指定许可证,因此此处假定来自 Sourceforge.net 的项目的原始许可证 (EPL)。 此时...

    在一小时内学会 C#(txt版本)

    值类型是在堆栈中分配的数据类型。它们包括了: ? 除字符串,所有基本和内建类型 ? 结构 ? 枚举类型 引用类型 引用类型在堆(heap)中分配内存且当其不再使用时,将自动进行垃圾清理。和 C++ 要求用户显示创建 ...

    如何学习ACM,看后受益匪浅

    掌握队列、堆栈和图的基本表达与操作是必需的,至于树,我个人觉得需要建树的问题有但是并不多。(但是树往往是很重要的分析工具)除此之外,排序和查找并不需要对所有方式都能很熟练的掌握,但你必须保证自己对于...

    《CleanCode》代码的整洁之道----并发编程

    在单线程应用中,目的与时机紧密耦合,很多时候只要查看堆栈追踪即可断定应用程序的状态。而解耦目的与时机能明显地改进应用程序的吞吐量和结构。从结构的角度看,应用程序看起来更像是许多台协同工作的计算机,而...

    PLSQLDeveloper下载

    集成调试器(要求Oracle 7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何...

Global site tag (gtag.js) - Google Analytics