`
ltx
  • 浏览: 25854 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于Java中堆和栈的一点点理解

阅读更多

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

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

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

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

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

在Java中,引用可以理解为一个永远指向对象的指针,Java没有指向指针的指针

 

 

0
0
分享到:
评论

相关推荐

    JAVA面试题最全集

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。...通过深入学习和实践这些知识点,你将在Java面试中展现出扎实的理论基础和实践经验,为获得理想的工作机会打下坚实基础。

    java笔记续集2

    在Java中,对象的声明发生在栈内存中,而对象本身则存在于堆内存中。当你声明`FileDemo02 fd = null;`时,只是在栈中预留了一个空间用于存储`fd`这个引用,而`fd = new FileDemo02();`则在堆中创建了`FileDemo02`类...

    javadata:自己学习工作中关于java的资料积累总结

    9. **Java虚拟机(JVM)**:理解JVM的工作原理,包括类加载、内存管理(堆、栈、方法区等)、垃圾回收机制,对于优化性能和排查问题有很大帮助。 10. **Java标准库(JDK)**:Java提供了一套庞大的标准库,包含各种...

    Eclipse MAT:Java内存分析的必备中文指南

    Eclipse Memory Analyzer(简称MAT)是一个功能齐全且轻量级的Java堆内存分析工具。它主要用于帮助开发者发现内存泄漏并降低内存占用。MAT支持分析生产环境中Java程序的堆转储文件,能够从大量的对象中快速计算出...

    algorithm:手工撸一点点算法

    "手工撸一点点算法"这个标题暗示了我们将深入探讨如何手动编写和理解各种算法,而不是依赖现成的库或工具。Java作为标签,表明我们将使用Java语言来实现这些算法。 算法的种类繁多,包括排序算法、搜索算法、图算法...

    personal:个人java笔记

    9. **JVM内存模型**:Java虚拟机(JVM)管理着程序的运行时内存,包括堆内存、栈内存、方法区、本地方法栈和程序计数器。垃圾回收机制自动回收不再使用的对象,防止内存泄漏。 10. **Java EE**:Java企业版(Java ...

    PDF1-2-:马卡雷纳

    11. **JVM内存模型**:深入理解堆、栈、方法区、本地方法栈等内存区域,以及垃圾回收机制。 12. **Spring框架**:如果"马卡雷纳"涉及的是企业级开发,那么Spring框架可能是重点,包括依赖注入、AOP(面向切面编程)...

    SkillBoxSS

    8. **JVM原理**:理解Java虚拟机的工作原理,包括内存模型(堆、栈、方法区等)、垃圾回收机制、类加载机制等,有助于优化代码性能和解决内存问题。 9. **Java EE**:如果"SkillBoxSS"涉及到Web开发,那么Java EE...

    TIL:去做就对了!

    这可能是一个关于Java学习的项目,包含各种示例代码、教程文档或者其他资源,帮助学习者深入理解和应用Java。 基于以上信息,我们可以预期这个压缩包可能包含以下Java相关的知识点: 1. **基础语法**:包括变量、...

    leetcode-practice:leetcode实践

    通过实践LeetCode中的Java题目,开发者不仅可以巩固和提高编程技能,还能对Java语言有更深入的理解。同时,这也是准备技术面试和提升职业竞争力的有效途径。在实际工作中,这些算法和数据结构的知识点会帮助解决各种...

    PortaOneTest:Kamak Nikita对成为一名开发人员的2018 PortaOne测试的答案

    Kamak Nikita可能是一位求职者或者已经是该公司的一员,通过这样的测试展示其编程能力和理解力,尤其是与Java相关的知识。 【描述】中的信息简洁明了,只是重复了标题的内容,没有提供额外的技术细节。因此,我们...

    操作系统(内存管理)

    在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统语言中,比如 C 和 C++,您必须进行内存管理...

    My-Algoexpert-Solutions:AlgoExpert解决方案

    2. **排序算法**:如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等,理解它们的时间复杂度和空间复杂度,以及在特定场景下的适用性。 3. **图论**:学习图的表示(邻接矩阵、邻接表),并掌握...

Global site tag (gtag.js) - Google Analytics