[Java]Stack栈和Heap堆的区别(终结篇)

Latext安装(二)WinEdt安装+激活教程 常用的LaTeX安装方案是TeXLive + WinEdt。TeXLive 是LaTeX的运行环境,而 WinEdt 则是编写LaTeX文档的编辑器。安装好TexLive之后,再安装WinEdt。这里介绍的是WinEdt的安装和激活教程。 阅读详情

 

[Java]Stack栈和Heap堆的区别(终结篇)

 

2007-11-11 16:45:34

标签:堆栈 Stack Heap[推送到技术圈]

 

 

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://icansoft.blog.51cto.com/268543/50100

  •          鉴于网上对Java的堆栈区分,众说纷纭,有的把C++的堆栈也混进来,有的没有分清Stack,Heap的中文翻译,搞得我把Stack当作堆,Heap当作栈,混乱了!昨天参加一外企的笔试,选择英文答案时,选错了,知道答案是堆,却选择了Stack!

    今天,决定把两者区分清楚!

     

             首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。

            在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语:

           堆存储: heapstorage    堆存储分配: heapstorage allocation  堆存储管理: heap storage management

            栈编址: stack addressing   栈变换:stack transformation  栈存储器:stack memory  栈单元: stack cell

     

              接着,总结在Java里面Heap和Stack分别存储数据的不同。

     

          

          Heap(堆)

          Stack(栈)

     JVM中的功能

         内存数据区    

                   内存指令区

     存储数据

         对象实例(1)

     基本数据类型, 指令代码,常量,对象的引用地址(2)

    1. 保存对象实例,实际上是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在stack中)。

      

       对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例。

     

    2. 基本数据类型包括byte、int、char、long、float、double、boolean和short。

        函数方法属于指令.

     

     =======================       

      引用网上广泛流传的“Java堆和栈的区别”里面对堆和栈的介绍;

              "Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。"

            “栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 ”

       

             可见,垃圾回收GC是针对堆Heap的,而栈因为本身是FILO - first in, last out. 先进后出,能够自动释放。 这样就能明白到new创建的,都是放到堆Heap!

    本文出自 “Java学习博客” 博客,请务必保留此出处http://icansoft.blog.51cto.com/268543/50100

 

源文档 <http://icansoft.blog.51cto.com/268543/50100>

MQL5教程 01 MT5有关EA的操作、MetaEditor 工具栏主要功能 阅读详情

相关推荐

西门子S7-200 SMART PLC高速计数器与增量式编码器实战配置指南

在工业自动化控制系统中,传感器是将物理量转换为电信号的关键组件,其中编码器作为核心的位置与速度检测元件,其工作原理基于光电或磁电效应,将机械位移转换为脉冲序列。增量式编码器通过输出相位差90度的A/B两相脉冲,不仅能实现精确的位移测量,还能通过相位关系自动判别运动方向,并通过倍频技术提升分辨率。其技术价值在于为PLC等控制器提供了实时、高精度的位置反馈,是实现闭环控制、提升系统精度与可靠性的基础。在包装机械、物料输送、绕线设备等应用场景中,编码器与PLC高速计数器的协同工作是实现精确定位、定长切割与速度控制

weixin_29178069的博客 398

【转】[Java]Stack栈和Heap堆的区别(终结篇)

原文:http://android.blog.51cto.com/268543/50100首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。 在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: heapstorage 堆存储分配: heapstorage allocation 堆存...

diche7031的博客 125

OnlyOffice Docker部署踩坑实录:解决Nginx反向代理导致的editor.bin下载失败

本文详细解析了在Docker中部署OnlyOffice时,因Nginx反向代理配置不当导致editor.bin下载失败的常见问题。通过分析问题根源,提供了从Nginx代理配置、Docker网络设置到OnlyOffice容器内部调整的完整解决方案,并分享了实战调试技巧与性能优化建议,帮助用户彻底解决这一部署难题。

wine的专栏 524

[Java]Stack栈和Heap堆的区别(终结篇)[转]

首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆。 在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: heapstorage 堆存储分配: heapstorage allocation 堆存储管理: heap storage managemen...

weixin_33757609的博客 103

万达电影 com.wandafilm.app headers check

万达电影 安卓逆向 抓包 逆向 check

weixin_43786514的博客 1438

STM32HAL库 基于外部Flash+FatFs模拟U盘方式进行固件拷贝升级(详解)

STM32HAL库 基于外部Flash+FatFs模拟U盘方式进行固件拷贝升级

qq_36075612的博客 1万+

JAVA中Stack和Heap的区别

<br />1.Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间。<br /> <br />(1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。 <br />(2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。 <br />(3)stack中的对象或变量只要定义好就可使用了,应用程序结束时会自动释放。 <br />(4)而要使用he

wl_ldy的专栏 4万+

提升仿真效率:Synopsys VCS高级编译选项优化技巧(2023最新版)

本文深入探讨了Synopsys VCS 2023版本中的高级编译选项优化技巧,帮助工程师提升仿真效率。通过并行编译、智能代码分析、精准覆盖率采样等策略,结合真实案例展示如何显著缩短仿真周期并优化资源使用,适用于数字芯片验证和大型SoC设计。

weixin_30338481的博客 114

Heap And Stack 堆与栈的区别

交代一下背景,最近一直在看C++的相关知识,今天刚好看到“引用”这一部分。于是好奇心驱使,我想知道它与java的引用到底有什么不同,于是开始搜索大法,java的引用更加与c++的指针更加类似,但是也不一样,当然这不是重点。然后搜索的时候,突然又想知道在内存中的存储情况,于是开始搜索……,搜索……。对于heap与stack的区别我又模糊了,于是到了今天的重点,顺便记录一下自己搜索的成果。 英文好的同学

moon-sky的专栏 4375

stm32控制舵机_使用URT-1控制飞特舵机上手教程(SM40BL舵机为例)

使用URT-1控制飞特舵机上手教程(SM40BL舵机为例):1,参阅URT-1使用说明.pdf2, 材料清单:① URT-1驱动板② 连接驱动板与电脑的MINI USB 连接线③ 给舵机供电的电源④ 舵机与舵机连接线⑤ 杜邦线(可选)3,将URT-1驱动板与电脑连接4,安装驱动,参阅文件CH340驱动,检查设备管理器串口号。5,舵机连接URT-1驱动板,驱动板接电源,参考下图:6,打开FD软件进行...

weixin_39564510的博客 3432

30天入门 SAP BTP 开发系列之四:SAP BTP 控制台里 Global Account 的常规操作介绍

笔者前一篇文章,介绍了 SAP BTP 中 Global Account 的概念。本文咱们一起来看看 SAP BTP 控制台里,给 Global Account 开放了哪些操作功能。

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

堆(heap)和栈(stack)有什么区别?

一、Java内存模型 1.哪里用到了内存划分? (1)虚拟机执行Java代码时,首先要把字节码文件加载到内存,那么这些类的信息都存放在哪个区域呢? (2)当我们创建一个对象实例的时候,虚拟机要为对象分配内存,虚拟机是如何分配内存的呢? 2.Java内存模型(Java虚拟机的内存是如何划分的?虚拟机内存划分机制?) (1)程序计数器:是线程私有的,JVM支持多线程同时执行,存放当前正在...

Michaeles的博客 1728

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

程序内存中堆(Heap)和栈(Stack)的区别

想象一下,我们做饭时,切菜、备料都是在厨房的操作台上完成的。操作台空间不大,但取放东西极其方便,做完一道菜,台面也就清理干净了。这就是栈。 而做饭所需的大量食材、调料,我们不可能全堆在操作台上,而是会存放在一个很大的储物间或冰箱里,需要时再去取。这个储物间就是堆。

楚Y6的博客 1474

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JAVA中Stack和Heap的区别(详解)

1.Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间。 (1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。 (2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。 (3)stack中的对象或变量只要定义好就可使用了,应用程序结束时会自动释放。 (4)而要使用heap中申请的变量或对象只能定义变量指针,并要求在运行过程中通...

qq_47759220的博客 1987

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

堆(Heap)栈(Stack)的区别

堆栈的概念:   堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。 单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于存储 函数调用、中断切换时保存和恢复现场数据。堆栈中的数据具有一个特性:第一个放入堆栈中的数据总是被最后拿出来, 这个特性通常称为先进后出 (FILO—First-In/Last-Out)。 堆栈中...

1483

关于java里的堆(heap)栈(stack)信息!

在C语言里堆(heap)和栈(stack)里的区别 简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中

java学习心得 1230

JAVA中堆(heap)和栈(stack)的区别

在学习JVM的内存模型的时候,堆(heap)和栈(stack)是JVM的内存区域中的重要组成部分 堆(Heap) 所有的应用可以从一个系统共有的空间中申请供自己使用的内存,这个共用的空间就叫做Heap;建立对象时,在Heap中的内存实际建立这个对象,而对象实例在Heap中分配好以后,需要在Stack中保存一个4字节的Heap内存地址,用来定位该对象实例在Heap中的位置,便于找到该对象实例 ...

Don_mingo的博客 783

heap和stack区别Java_Java中Heap与Stack的区别

1) Heap是 Stack的一个子集.------扩展—>从内存观点考虑。优化2) Stack存取速度仅次于寄存器,存储效率比heap高,可共享存储数据,可是其中数据的大小和生存期必须在运行前肯定。spa3) Heap是运行时可动态分配的数据区,从速度看比Stack慢,Heap里面的数据不共享,大小和生存期均可以在运行时再肯定。指针4) new关键字 是运行时在Heap里面建立对象,每ne...

weixin_35726575的博客 604

堆Stack和栈Heap

堆Stack和栈Heap逻辑区别物理区别申请方法申请大小限制 逻辑区别 栈是存储局部变量的空间,由操作系统(编译器)自动分配和释放,可以存放参数值,局部变量之类的; 堆则是由程序员进行申请和释放(部分语言可能不需要手动释放,如Java,但是使用某些语言进行编程如果不释放会导致内存泄漏。) 栈由系统自动分配,速度较快。但程序员是无法控制的。 堆是由程序员申请分配的内存,一般速度比较慢,而且容易产生内...

Misty_Rain_的博客 233

Java中堆和栈的区别

堆(Heap)和栈(Stack)是平时编程接触比较多的两个计算机语言,网上相关介绍内容已经有很多了,作者在此记录下我的理解,也供以后温故之用。 1. 栈(Stack)和堆(Heap)的定义 栈:空间小,速度快,放对象的引用;一个先进后出(Last In First Out )的数据结构,通常用于保存基本类型、字面量、对象的引用变量、自定义变量。 堆:空间大,可动态申请,放所有创建的对象;一个...

进击的NULL的博客 4109
上一篇: [Java]重载,重写以及继承,多态的区别
下一篇: 练习测试主类调用其他类
codecooler
博客等级 码龄19年 47粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值