`

java 堆栈

阅读更多
java的内存分为两类 :
堆内存 heap
栈内存 stack
stack 是指程序进入一个方法时, 会为这个方法单独分配一块私属存储空间, 用于存储这个方法内部的局部变量, 当这个方法结束时, 分配给这个方法的栈会释放, 这个栈中的变量也将随之释放.
heap 一般用于存放不放在当前方法栈中的那些数据, 例如, 使用 new 创建的对象都放在堆里, 所以, 它不会随方法的结束而消失. 方法中的局部变量使用 final 修饰后, 放在堆中, 而不是栈中.


首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。

   下面让我们一起来分析一下原因:

   基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型在内存中的存储问题来解释一下:

   一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因

      在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。

         (1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在JAVA虚拟机栈中

         (2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中的。

   二:在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。

       同样在类中声明的变量即可是基本类型的变量 也可是引用类型的变量

       (1)当声明的是基本类型的变量其变量名及其值放在堆内存中的

       (2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中.

此外,为了反驳观点" Java的基本数据类型都是存储在栈的 ",我们也可以随便举出一个反例,例如:

      int[] array=new int[]{1,2};

      由于new了一个对象,所以new int[]{1,2}这个对象时存储在堆中的,也就是说1,2这两个基本数据类型是存储在堆中,

      这也就很有效的反驳了基本数据类型一定是存储在栈中~~
分享到:
评论

相关推荐

    java堆栈信息dump文件

    java堆栈信息dump文件

    打印JAVA堆栈的方法

    在深入探讨打印Java堆栈的方法之前,我们先来理解一下什么是Java堆栈以及为何需要打印它。Java堆栈是Java虚拟机(JVM)的一部分,主要用于存储方法调用的局部变量、操作数栈、动态链接信息和返回地址等。当一个方法...

    java堆栈详解 PDF 下载

    本文将深入探讨Java堆栈的概念、工作原理以及它们在程序执行中的角色。 1. 堆(Heap) - 堆是Java内存模型中的主要部分,主要用于存储对象实例。所有的类实例和数组都在堆中分配内存。 - 堆内存是动态分配的,...

    Java堆栈内存分析笔记

    Java堆栈内存分析是Java编程中的重要概念,它关乎程序的性能优化和内存泄漏的预防。堆和栈是Java内存管理的两个主要区域,它们各自承担着不同的职责。本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。...

    Java堆栈分析服务器

    Java堆栈分析是Java应用程序性能调优的重要环节,特别是在服务器环境中,当CPU资源占用过高或者出现内存泄露等问题时,分析Java堆栈能够帮助我们找出问题的根源。在本例中,我们将通过一系列步骤来理解如何进行Java...

    java 堆栈的演示程序

    Java堆栈是一个重要的内存区域,它是Java虚拟机(JVM)的一部分,主要负责管理方法的执行。在这个"java 堆栈的演示程序"中,我们可能会深入理解堆栈的工作原理以及它在运行jsp程序时的角色。源代码设计将帮助我们...

    java堆栈的区别 -- 详解

    ### Java堆栈的区别详解 #### 一、预备知识—程序的内存分配 程序在运行时,根据不同的数据类型和用途,会被分配到不同的内存区域。这些区域包括: 1. **栈区(Stack)**:这部分内存由编译器自动管理,主要用于...

    java堆栈详解.pdf

    Java 把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的 一些基本类型的变量和对象的引用变量都是在函数 的栈内存中分配。当在一段代码块中定义一个变量时,java 就在栈中 为这个变量分配内存空间...

    Java数组堆栈

    描述: 文章介绍了使用Java编程语言实现了基于数组的Java堆栈,并实现了一些基本的堆栈方法。 标签: Java 数组 堆栈 Java数组堆栈的实现 Java数组堆栈的实现是通过创建一个名为ArrayStack的类,该类提供了堆栈的...

    java堆栈的应用--中缀表达式转换成后缀表达式和计算

    Java堆栈在计算机科学中是一种数据结构,它遵循“后进先出”(LIFO)的原则,常用于处理需要逆序处理元素的问题。在本项目中,“java堆栈的应用--中缀表达式转换成后缀表达式和计算”具体涉及到了两个主要知识点:...

    react-Reactmaterialui拥有一个纯Java堆栈

    标题 "react-Reactmaterialui拥有一个纯Java堆栈" 提及了两个主要概念:React和Material-UI,以及它们在Java环境中的应用。React是Facebook开发的一个JavaScript库,用于构建用户界面,尤其适合构建单页应用程序。...

    java dump堆栈分析工具

    java dump 堆栈 dumpAnalyzer 分析,在日常工作中,经常会遇到,系统跑着跑着就会出现性能问题,CPU居高不下。这个时候我们就需要对系统的堆栈信息进行分析。这里就介绍如何使用IBM内存检测工具(dumpAnalyzer)。

    用 Java 实现堆栈

    Java作为一种广泛使用的编程语言,提供了多种方式来实现堆栈,包括使用数组、链表以及内置的java.util.Stack类。下面我们将详细讨论如何在Java中实现堆栈,并探讨其相关知识。 首先,我们可以通过自定义一个类来...

    java的堆栈,很详细的资料

    "Java 堆栈详细资料" Java 堆栈是 Java 中的一种基本数据结构,它是 JVM(Java Virtual Machine)为每个新创建的线程分配的。堆栈以帧为单位保存线程的状态,JVM 对堆栈只进行两种操作:以帧为单位的压栈和出栈操作...

    java线程堆栈分析工具jca457.jar

    java线程堆栈分析工具jca466.jar;堆内存分析工具Memory Analyzer;分析内存泄露产生的javacore文件,以便于定位blocked线程

    堆栈实现的java计算器

    本项目“堆栈实现的Java计算器”是数据结构课程设计的一个实例,旨在利用堆栈来实现一个能够处理基本算术运算的计算器。通过这个项目,我们可以学习到如何将理论知识应用到实际编程中,特别是如何使用堆栈解决计算...

    JAVA 堆栈内存分析

    如何调优JVM - 优化Java 虚拟机(大全+ 实例) 堆设置 -Xmx3550m :设置JVM 最大堆内存为3550M 。 -Xms3550m :设置JVM 初始堆内存为3550M。此值可以设置与-Xmx 相同,以避免每次垃 圾回收完成后JVM 重新分配内存。 ...

    java堆栈类使用实例(java中stack的使用方法)

    在Java编程语言中,Stack是一个内置的类,它位于java.util包下,专门用于实现堆栈数据结构。堆栈遵循“后进先出”(LIFO,Last In First Out)的原则,即最后压入栈的元素最先被弹出。这个类是Vector类的子类,因此...

    java 堆栈计算器

    堆栈实现的java 计算器 + - * / % ()

Global site tag (gtag.js) - Google Analytics