java栈和堆区别

1, 垃圾回收机制仅仅作用于堆内存,与栈内存无关;

2, 栈:stack 栈的存取速度比堆快,效率高 保存局部变量和对象的引用值

3, 堆:保存较大的变量

4, 编译器处理int a = 3 时,首先会在栈中创建一个变量为a的引用,然后查找栈中是否存在3这个值,如果不存在,就将3存放进来;
处理b = 3时,也是这样,因为之前将3存放进来了,所以此时编译器只需将创建b这个变量再指向3就行了(有利于节省空间)。
这个时候就出现a和b同时指向3的情况,但不影响他们的使用。如果此时又定义a = 4;,则需将4存放进内存,由a指向4,a值的修改不会影响到b值。

内存的划分:
1,寄存器。
2,本地方法区。
3,方法区。
4,栈内存。
	存储的都是局部变量。
	而且变量所属的作用域一旦结束,该变量就自动释放。
5,堆内存。
	存储是数组和对象(其实数组就是对象) 凡是new建立在堆中。
	特点:
	1,每一个实体都有首地址值。
	2,堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数0.0或者0.0f,boolean false char ‘\u0000‘
	3,垃圾回收机制。

  

时间: 2024-10-19 18:29:57

java栈和堆区别的相关文章

Java栈与堆

Java栈与堆 ----对这两个概念的不明好久,终于找到一篇好文,拿来共享 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.

java栈内存堆内存和GC相关

java栈内存堆内存 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存,有着不同的作用.栈内存用来存储局部变量和方法调用.栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存.而堆内存中的对象对所有线程可见.堆内存中的对象可以被所有线程访问.而堆内存用来存储Java中的对象.无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中. 引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放.而数组

java 栈 和 堆 的区别

转载: 一.java栈 Java 栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的Java栈,在这个Java栈中又会含有多个栈(Frames),这些栈帧是与每个方法关联起来的,每个运行一个方法就创建一个栈帧会含有一些“内部变量"(在方法内定义的变量)."操作栈"和"方法返回值"等信息. 二.堆 堆是存储Java 对象的地方,它是JVM管理 Java 对象的核心存储区域,堆是 Java 程序员最应该关心的,因为它是我们的应用程度

java栈、堆、方法区

1.java中的栈(stack)和堆(heap)是java在内存(ram)中存放数据的地方 2.堆区 存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令): jvm只有一个heap区,被所有线程共享,不存放基本类型和对象引用,只存放对象本身. 堆的优劣势:堆的优势是可以动态的分配内存大小,生存期也不必事先告诉编译器,java的垃圾收集器会自动收取这些不在使用的数 据,但缺点是,由于要在运行时动态分配内存,存取速度慢. 3.栈区 每一个线程包含一个st

Java栈和堆的区别

一.栈空间 1.栈空间存储数据效率高 2.栈中的数据是按"先进后出"的方式管理 3.栈空间存储空间比较小,不能存放大量的数据 4.JVM将基本类型的数据存放在栈空间 帮助理解 1."客栈" 能提供很多优质高效的服务[效率高] 2."客栈" 外面想入住的客人很多  ||  假设客人先进去的优先安排住在最顶楼[先进],而最顶楼要出去也是最慢的[后出]. 3."客栈"收费比较贵,所以不能提供大量房间入住[存储空间小]. 4.基本类型

栈和堆区别

首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆. 在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: heapstorage    堆存储分配: heapstorage allocation  堆存储管理: heap storage management  栈编址: stack addressing   栈变换:stack transformation  栈存储器:stack memory  栈单元: stack cell

初学JAVA——栈空间堆空间的理解

1.Person pangzi;    //这是在“开拓空间”于栈空间 pangzi=new Person();    //这是赋值于堆空间 上两步就是在做与空间对应的事. 2.值类型直接存入栈空间,如AF,引用类型存入堆空间,在栈空间存有“索引地址”,如当需要B时,在栈空间寻找“索引地址”后对应寻找堆空间的“详细内容”. 故,值类型“快”,引用类型“灵活”. 例String S = “ABCDEFG........Z",则S对应栈空间,“ABCDEFG........Z"对应堆空间.

计算机栈和堆区别

堆和栈的对比 从以上知识可知,栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活:而堆是函数库提供的功 能,特点是灵活方便,数据适应面广泛,但是效率有一定降低.栈是系统数据结构,对于进程 / 线程是唯一的:堆是函数库内部数据 结构,不一定唯一.不同堆分配的内存无法互相操作.栈空间分静态分配和动态分配两种.静态分配是编译器完成的,比如自动变 量(auto)的分配.动态分配由alloca函数完成.栈的动态分配无需释放 (是自动的),也就没有释放函数.为可移植的程序起见,栈的动 态分配操作是

java 栈和堆

原文地址:https://www.cnblogs.com/classmethond/p/9865370.html