Java中堆栈的作用是什么?

java中FILO堆栈先进后出机制 系统中的、栈 和 数据结构FILO(先进后出)【叠罗汉,上面的先下来】不同于队列中的FIFO(先进先出) 系统中的、栈和数据结构、栈不是一个概念。系统中堆栈是真实的物理区;数据结构中的、栈是抽象的数据存储结构。 栈:实际上就是满足后进先出的性质,是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 是一种完全二叉树或者近似完全二叉树,完全二叉树是效率很高的数据结构,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用才能优. 阅读详情

一、内存区域

一个由C/C++编译的程序占用的内存分为以下几个部分

        1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

        2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

        3、全局区(静态区) — 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。

        4、文字常量区 — 常量字符串就是放在这里的,程序结束后由系统释放 。

        5、程序代码区 — 存放函数体的二进制代码。

二、队列

堆栈应用非常广的栈LIFO(后进先出)

        1、洗盘子。用过的盘子一个一个叠放,那么最上面的盘子先洗,然后是下面的。

        2、递归函数返回地址。程序先执行的函数地址扔到最底下,直到递送到有明确返回值函数地址后,在归回上一层处理它,直到最底部函数都处理完。

在JAVA中有两种形式体现

        1、自己编写实例代码:(主要操作方法为:push()、pop())

        这段代码就是首先定义一个stack堆栈类,堆栈类里有个存放值的数组,有个指针tos(姑且看过做指针)

        当我们push的时候,stck[]数组每加一个值,tos就加1相当于指针在移动,同理当我们pop的时候,指针-1也是在移动

class Stack{
 int stck[] = new int[10];
 int tos; 
 Stack(){
  tos = -1;
 } 
 void push(int item){
  if(tos == 9)
   System.out.println("Stack is full.");
  else
   stck[++tos] = item;
 } 
 int pop(){
  if(tos < 0){
   System.out.println("Stack underflow.");
   return 0;
  }else{
   return stck[tos--];
  } 
 }
} 
public class TestStack{
 public static void main(String args[]){
  Stack mystack1 = new Stack();//new 两个mystack对象
  Stack mystack2 = new Stack(); 
  for (int i = 0;i<10 ;i++ )
  {mystack1.push(i);}//循环0,9 将 0到9按顺序插入到mystack1中的数组stck中 (此处++tos后才加 开始tos=-1 ++后就是0)
  for(int i =10;i<20;i++)
  {mystack2.push(i);}//循环10,19 将 10到19按顺序插入到mystack1中的数组stck中 
  System.out.println("Stack in mystack1:");//打印此语句
  for(int i = 0;i<10;i++)
   System.out.println(mystack1.pop());//循环9,0打印stck中值 依次是stck[9],stck[8]...stck[0] 
  System.out.println("Stack in mystack2:");
  for(int i = 10;i<20;i++)
   System.out.println(mystack2.pop());//循环19,10打印stck中值 依次是stck[19],stck[18]...stck[10]  
 }
}

        2、使用系统提供好的Queue类

        使用boolean add(E e)添加对象

        使用 E poll() 获取并移除此队列的头

        Java中堆栈的作用是什么?就是这样了,想了解更多Java知识可以看我主页的其他文章。

        对于没有任何Java基础的朋友,可以看视频学习,推荐你们看下Java300集,让你从入门到精通,主要介绍了一些Java基础的核心知识,让大家更好更方便的学习和了解Java编程,感兴趣的同学可以看一下。

 三、Java学习视频:

【Java300集】全新的Java300集来啦!java零基础小白自学Java必备优质教程

花2万多买的Java教程全套,现在分享给大家,入门到精通!Java300集_Java程序开发就业教程

GEM5教程--gem5开始之旅(一) GEM5系列教程--gem5开始之旅一、建立GEM5 GEM5模拟器是一个用于计算机系统结构研究的模块化平台,包含系统级别的结构以及处理器的微体系结构。读者若想详细的了解,请查看其官方文档GEM5文档 读者如果想要入门GEM5的话,可以参考Learning_GEM5这个网站,这里面有较为详细的教程,可以带读者从入门到精通。小编我对GEM5的入门学习也是从这个Learning_GEM5这个网站学习的... 阅读详情

相关推荐

S/4HANA Private Cloud 与 On-Premise 的 Key User Custom Fields 运输与升级避坑指南

本文探讨了SAP S/4HANA Cloud Private Edition和On-Premise系统中Key User Custom Fields的管理要点。文章指出,Custom Fields涉及元数据生成、对象一致性、传输治理等完整链路,操作不当会导致字段丢失或升级失败。关键建议包括:使用ATO Fiori App管理扩展项与传输绑定,配置正确的job user权限,避免在多系统并行开发同一字段。特别强调升级时需执行CFD_REGENERATE_IN_ONPREMISE报表,并通过标准传输机制推进变更

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

详解java中jvm虚拟机栈的作用

主要介绍了jvm虚拟机栈的作用,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

C#modbus rtu绝对好用,绝对能用.rar_C# ModbusRtu 库_C#Modbus通信_C#modbusrtu_

C#使用的modbus通讯协议编程。。真实可靠有用

应用程序中内存的分区

内存区域 一个由C/C++编译的程序占用的内存分为以下几个部分   1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。   2、区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的是两回事,分配方式倒是类似于链表。   3、全局区(静态区)(static)— 全局变量和静

zhangping871的专栏 732

Java中,和栈的作用

是用于存储动态分配的内存空间,它是Java虚拟机所管理的内存中最大的一块。内存的分配策略通常是按需分配,即当需要一个对象时,会在中分配足够的内存空间来存储该对象。每个线程都有一个自己的栈,栈帧中存储了方法的局部变量、操作数栈和方法出口等信息。当一个方法被调用时,一个新的栈帧会被压入栈顶;栈内存的分配和释放是由编译器自动完成的,我们无需关心栈内存的管理。- 内存的分配和释放由垃圾回收器自动完成,而栈内存的分配和释放由编译器自动完成。- 内存的分配策略是按需分配,而栈内存的分配策略是预先分配。

M先生的博客 196

深入Java内存区域:堆栈、方法区与程序计数器的奥秘

Java开发过程中,合理地管理和利用内存资源对于提高程序的运行效率至关重要。特别是在大型项目或高并发场景下,一个小小的内存泄漏就可能导致整个系统崩溃。因此,掌握Java内存区域的相关知识,不仅能帮助我们更好地理解程序执行的过程,还能在遇到性能瓶颈时快速定位问题所在。

qq_44771627的博客 1340

Java和栈

(Heap)是Java程序中的动态内存区域,用于存储对象和数组。的大小在程序运行时动态变化,可以通过JVM的参数进行设置。中的对象需要通过new操作符来创建,创建后自动分配内存空间。

程序猿老白~的博客 6531

Java、栈、方法区

方法区的大小也是固定的,由虚拟机在创建JVM时设定。在Java 8之前,方法区是一个逻辑上连续的内存空间,而在Java 8及之后的版本中,方法区被移除,类的元数据和静态变量被放在了中的一个称为"元空间"的区域。的存储空间是动态分配的,其大小可以在创建JVM时设定,也可以根据需要进行扩展。每个线程在执行过程中都有一个对应的栈帧(Stack Frame),每个方法调用时都会在栈上创建一个栈帧,方法执行完毕后,栈帧会被销毁。在Java中,、栈和方法区是Java虚拟机(JVM)运行时数据区的三个重要部分。

m0_62600503的博客 1855

java变量作用域和堆栈

1.成员变量:在类的所有方法外部声明的变量,即类所拥有的变量,可以被系统初始化。 1.1静态成员变量:类被加载时被创建,其生命周期与该类的生命周期相同; 1.2类属性成员变量:在类的实例被创建时产生,其生命周期与该类的实例对象的生命周期相同; 2.局部变量:在定义该变量的方法被调用时创建,在方法调用结束后,该变量也被撤销,不能自动初始化,必须显示的指定初始值。 2.1参数列表局部变

lcj200813138020的专栏 3592

Java堆栈功能_java堆栈详解,java堆栈作用是?

与栈是java中绕不过去的内存原理之一,详细了解它们是非常有必要的,下面就小编来介绍介绍它们。栈内存如图,我们可以看到,在Java栈中存放的都是一个个的栈帧,而每个栈帧又对应着一个被调用的方法,在栈帧中,包含着局部变量表、指向当前方法所属的类的运行时常量池、操作数栈、方法返回地址与一些额外附加信息。每当线程执行一个方法时,它就会跟着创建一个对应栈帧,并把建立的栈帧压栈。方法执行完毕后,再把栈帧出...

weixin_39865952的博客 505

java堆栈的功能作用 以及區別(搜集)

1.用new创建的对象在区,函数中的临时变量在栈区,Java中的字符串在字符串常量区。 2.栈:存放进本数据类型的数据和对象的引用,但对象本身不存在栈中,而是存放在中。 :存放new产生的数据。 静态域:存放在对象中用static定义的静态成员。常量池:存放常量 非RAM存储:硬盘等永久存储空间。 3.Java区和栈区的区别 区(Heap): 区中存放的是...

aishuqun0228的博客 220

java中pack什么意思_java - .pack()有什么作用? - 堆栈内存溢出

我正在学习JPanel和GridLayout,此代码段将生成带有6个按钮的简单JPanelpackage testing;import java.io.*;import java.util.*;import java.security.*;import javax.xml.bind.DatatypeConverter;import java.lang.*;import java.awt.*;imp...

weixin_28724003的博客 414

堆栈作用,应用和用途

堆栈作用,应用和用途 分类: Java 堆栈本身有两重含义: 一、内存区域 一个由C/C++编译的程序占用的内存分为以下几个部分   1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。   2、区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构

geili_178的专栏 1606

java与c作用域的区别

在C语言中允许 { int x = 7; //在这个域中x的值为7 { int x = 9; //在这个作用域中x的值为9 } } 在java中却不行 (java的设计者认为这样会时程序混乱) { int x = 7; //在这个域中x的值为7 { int x = 9; //这里Java会报错 } } - 在Java中 字段是数据成员: 可以是基本类型, 对象类型 ...

f2634825250的博客 198

Java中的运行时堆栈

Java中的运行时堆栈 本文主要介绍Java中的运行时堆栈Java方法调用的过程,如有疑问,欢迎讨论。 Java中方法的调用过程首先用一张图来展现Java中整个方法的调用流程。 注意:在以下的叙述中,正在运行的系统将采用运行时系统来统称。 在上面这张图中,我们能够很清晰的看到方法的调用过程,当一个方法被调用时: 首先,运行时系统会调用一条语句来创建一个活动记录,活动记录包括了调用该方法时的

码上旅行 1255

java中的堆栈

http://blog.csdn.net/jerryao/archive/2006/07/04/874101.aspx 以往学习中的一个模糊点:  java堆栈(stack)和(heap) 一、堆栈(stack)和(heap)? (1)内存分配的策略   按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和式的.     静态

icycolawater的专栏 593

Java堆栈跟踪:了解它并将其用于调试

Deploying your Java code to production limits your troubleshooting options. Connecting to your app in production with a debugger is usually out of the question, and you might not even be able...

专业的开发者“讨论” 4356

关于Java堆栈的理解与说明

(new 出来的对象的实例存储在中,但是仅仅存储的是成员变量,也就是平时所说的实例变量,成员变量的值则存储在常量池中。局部变量在栈内存中,JVM为每一个类分配一个栈帧,然后引用类型的局部变量指向内存中的地址),是内存中共享的区域,要考虑线程安全的问题。2. 堆栈(也就是平时所说的栈stack):用来存放基本数据类型和引用数据类型的实例的(也就是实例对象的在中的首地址,Person p = new Person;·栈中的存放是有顺序的,而且JVM分配的空间是固定的,不能改变。...

Stone.鱼儿的博客 2298

java 堆栈信息_每天学习一个命令:jstack 打印 Java 进程堆栈信息

Jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息。这里需要注意的是 Java 8 引入了 Java Mission Control,Java Flight Recorder,和 jcmd 等工具来帮助诊断 JVM 和 Java 应用相关的问题。推荐使用最新的工具以及 jcmd 来进行诊断。Prints Java thread sta...

weixin_31176383的博客 3860

Java 堆栈

Java堆栈jvm为每个新创建的线程都分配一个堆栈堆栈以帧为单位保存线程的状态。jvm对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。 某个线程正在执行的方法称为此线程的当前方法。当前方法使用的帧称为当前帧。当前方法所属的类称为当前类。当前类的常量池称为当前常量池。当线程执行一个方法时,它会跟踪当前的类和常量池。当jvm会在当前帧内执行帧内数据的操作。 当线程激活一个java方法,jvm就...

turnRound 87
上一篇: Java接口的作用和意义是什么?
下一篇: Java软件架构师需要掌握哪些开源工具?
程序媛_小白
博客等级 码龄5年 321粉丝 163原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值