引自http://space.jinghua.cn/html/84/10184-5929.html
总结在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 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,分别用于存储不同的数据类型和对象。堆栈(stack)是 Java 中的一种内存区域,用于存储基本类型的变量和对象的...
堆(heap)与栈(stack)是计算机内存管理中的两种基本数据结构,用于存储程序运行时产生的临时变量。在C语言中,这两种内存区域有非常明确的区分,对于理解程序的内存分配和回收具有重要意义。 首先,栈是一种特殊...
在IT领域,尤其是在操作系统与编程语言的运行时环境中,“运行时堆和栈”(The Run-time Heap and Stack)是理解程序内存管理的核心概念。本文旨在深入解析这一主题,结合提供的部分文档内容,详细阐述堆和栈的区别...
Java内存主要分为三个区域:堆(Heap)、栈(Stack)和方法区(Method Area),其中堆是用于存储对象实例的主要区域,当堆空间不足时,就会抛出`OutOfMemoryError: Java heap space`。 1. **调整JVM堆大小**:可以...
"深入Java虚拟机中的Stack和Heap" 在Java虚拟机(JVM)中,内存分为两个部分:Stack(栈)和Heap(堆)。Stack是JVM的内存指令区,管理很简单,push一定长度字节的数据或者指令,Stack指针压栈相应的字节位移;pop...
在Java程序中,`java.lang.OutOfMemoryError: Java heap space` 是一个常见的错误,意味着程序在运行过程中耗尽了JVM分配的堆内存。这个错误通常发生在创建大量对象或者单个对象占用过多内存时。 一、问题描述与...
IBM HeapAnalyzer是一款强大的Java内存分析工具,主要用于诊断和解决Java应用程序中的内存泄漏问题。这款工具通过对Java堆内存的深入分析,帮助开发者定位那些占用过多内存的对象,从而优化应用性能。在Java开发过程...
"深入Java虚拟机:JVM中的Stack和Heap" Java虚拟机(JVM)是一种运行Java字节码的虚拟机环境,它具有自己的内存管理机制。JVM的内存分为两个部分:Stack(栈)和Heap(堆)。 Stack(栈)是JVM的内存指令区,管理...
在Java中,内存主要分为两个区域:栈(Stack)和堆(Heap),以及垃圾回收机制(Garbage Collection)。 栈是程序执行过程中的临时数据存储区域,主要用于存储基本类型(如int、char)和对象的引用。每当一个方法被...
在一些平台上,在有些情况下,javacore也被称为javadump,它包含jvm和应用程序相关的在特定时刻的一些诊断信息,如操作系统,应用程序环境,线程,native stack本地堆,锁,和内存的信息。在生成heapdump文件的时候...
Java内存主要分为堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)五大部分: 1. **堆**:Java对象主要存储在堆中,它是所有线程共享的一块区域。...
当程序运行过程中,如果堆空间不足,Java应用程序可能会抛出`java.lang.OutOfMemoryError: Java heap space`异常。这个错误表明程序在尝试分配新的对象时,无法找到足够的连续内存空间来完成分配。 ### Java内存...
Java程序运行在JVM上,JVM将内存划分为几个区域,包括堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。其中,堆内存是所有线程共享的一块...
Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,它们之间的区别是初学 Java 的人很容易混淆的。下面,我们将详细地解释它们之间的区别。 在 Java 中,变量可以分为两种:基本类型...
Java中堆和栈的区别 Java是一种面向对象的编程语言,它的内存管理机制是自动化的,程序员不需要手动地分配和释放内存。Java中堆和栈是两个重要的概念,它们都是Java用于在RAM中存放数据的地方。 栈(Stack)是一块...
8. **Java中Heap与Stack的区别**:堆(Heap)存储对象实例,大小可变,是垃圾回收的主要区域。栈(Stack)存储基本类型和对象引用,按后进先出(LIFO)原则管理,速度较快。 9. **Java中String和StringBuffer的区别...
- 方法指令保存在Stack中,操作码和操作数都在Stack中,对象实例的属性值保存在Heap中。 - 静态方法可以直接执行指令代码,非静态方法需要先创建对象实例。 - 静态属性保存在Stack中,具有全局属性。 5. 字符串...
堆(Heap)和栈(Stack)是JAVA中两种重要的内存区域。堆是用于存储所有JAVA对象和数组的空间,其大小动态调整,由垃圾回收器管理。栈则是用于存储局部变量和方法调用的信息,每个线程都有自己的私有栈空间。 ### 8...
- Java的内存分为堆内存(Heap)和栈内存(Stack),对象主要在堆中分配,而局部变量在栈中分配。 - 垃圾回收(Garbage Collection, GC)是Java自动管理内存的重要机制,它负责清理不再使用的对象,避免内存泄漏。...
从《Java面试宝典》中提取的关键知识点涵盖了Java的核心概念和技术,包括面向对象的基本特征、访问修饰符的作用域、数据类型的区分、浮点数的精度问题、保留关键字的识别、基本数据类型与封装类的区别、逻辑运算符和...