`
li.oo
  • 浏览: 51496 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

java heap和stack区别

 
阅读更多

Heap:

 1. 主要是存储新建object和variable,系统gc自动回收

 2. 分为3个区:young,old, permanent. young区主要存放刚刚初始化的对象,当系统发现一定时间内都未被使用的对象,就会移动到old区.

stack:

 1. 操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性

 2. 存储效率比heap高,可共享存储数据。比如int a = 3, int b = 3.系统会在stack中先创建a,b两个对象引用,存放3这个数据,a,b引用同时指向3.

又比如:String x = new String("test").则于堆中创建对象,每new一次,就创建一个新的对象来存储test

String x = ”test“,在stack中创建一个x对象引用,一个test变量,x指向”test“变量。

由此可总结为在建立一个对象时从两个地方分配内存,在堆中分配的内存实际建立这个对象,而在栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。

(未完)

分享到:
评论

相关推荐

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

    "Java 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,分别用于存储不同的数据类型和对象。堆栈(stack)是 Java 中的一种内存区域,用于存储基本类型的变量和对象的...

    java解决nested exception is java.lang.OutOfMemoryError Java heap space

    Java内存主要分为三个区域:堆(Heap)、栈(Stack)和方法区(Method Area),其中堆是用于存储对象实例的主要区域,当堆空间不足时,就会抛出`OutOfMemoryError: Java heap space`。 1. **调整JVM堆大小**:可以...

    堆(heap)与栈(stack)的区别

    堆(heap)与栈(stack)是计算机内存管理中的两种基本数据结构,用于存储程序运行时产生的临时变量。在C语言中,这两种内存区域有非常明确的区分,对于理解程序的内存分配和回收具有重要意义。 首先,栈是一种特殊...

    The Run-time Heap and Stack

    在IT领域,尤其是在操作系统与编程语言的运行时环境中,“运行时堆和栈”(The Run-time Heap and Stack)是理解程序内存管理的核心概念。本文旨在深入解析这一主题,结合提供的部分文档内容,详细阐述堆和栈的区别...

    记录java.lang.OutOfMemoryErrorJava heap space的情况.docx

    Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存...通过上述方法,可以有效地预防和解决`java.lang.OutOfMemoryError: Java heap space`问题,优化JVM内存管理,提升应用程序的稳定性和性能。

    java heap s

    Java堆空间(Heap Space)是Java虚拟机(JVM)管理的主要内存区域之一,用于存储对象实例和数组。当程序运行过程中,如果堆空间不足,Java应用程序可能会抛出`java.lang.OutOfMemoryError: Java heap space`异常。这...

    ibm HeapAnalyzer java内存分析工具 ha457.jar

    Java内存分为堆(Heap)、方法区(Method Area)、栈(Stack)、本地方法栈(Native Method Stack)和程序计数器(PC Register)五大部分。HeapAnalyzer主要关注的是堆内存,特别是新生代(Young Generation)、老...

    java 虚拟机 内存和栈 分析工具 ha456.rar

    Java内存主要分为堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)五大部分: 1. **堆**:Java对象主要存储在堆中,它是所有线程共享的一块区域。...

    深入Java虚拟机中的Stack和Heap

    "深入Java虚拟机中的Stack和Heap" 在Java虚拟机(JVM)中,内存分为两个部分:Stack(栈)和Heap(堆)。Stack是JVM的内存指令区,管理很简单,push一定长度字节的数据或者指令,Stack指针压栈相应的字节位移;pop...

    IBM heapdump analyzer

    在一些平台上,在有些情况下,javacore也被称为javadump,它包含jvm和应用程序相关的在特定时刻的一些诊断信息,如操作系统,应用程序环境,线程,native stack本地堆,锁,和内存的信息。在生成heapdump文件的时候...

    could not reserve enough space for object heap

    Java程序运行在JVM上,JVM将内存划分为几个区域,包括堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、程序计数器(PC Register)和本地方法栈(Native Method Stack)。其中,堆内存是所有线程共享的一块...

    基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍

    在Java中,内存主要分为两个区域:栈(Stack)和堆(Heap),以及垃圾回收机制(Garbage Collection)。 栈是程序执行过程中的临时数据存储区域,主要用于存储基本类型(如int、char)和对象的引用。每当一个方法被...

    深入Java虚拟机:JVM中的Stack和Heap

    "深入Java虚拟机:JVM中的Stack和Heap" Java虚拟机(JVM)是一种运行Java字节码的虚拟机环境,它具有自己的内存管理机制。JVM的内存分为两个部分:Stack(栈)和Heap(堆)。 Stack(栈)是JVM的内存指令区,管理...

    java面试宝典

    答:Heap(堆)和Stack(栈)是Java中用于存储数据的两种主要内存区域,它们各自具有独特的特性和用途。 1. **Stack(栈)**: - 栈是一种先进后出(LIFO, Last In First Out)的数据结构,用于管理方法调用和局部...

    JStack和Java Thread Dumps分析

    ### JStack和Java Thread Dumps分析 #### 一、引言 在Java应用程序开发与维护过程中,时常会遇到性能瓶颈或死锁等问题。这些问题往往难以定位,尤其当系统处于高负载下时,更是如此。此时,`JStack`工具便显得尤为...

    JAVA-OPTS参数设置.docx

    JAVA-OPTS 变量的设置对 Java 应用程序的性能和稳定性具有重要影响。 在设置 JAVA-OPTS 变量时,需要注意以下几个方面: 1. -server:这个参数一定要作为第一个参数,否则可能会导致性能下降。在多个 CPU 时性能佳...

    java内存机制及异常处理

    常见的内存错误包括`java.lang.OutOfMemoryError: Heap space`(堆空间不足)、`java.lang.OutOfMemoryError: PermGen space`(方法区空间不足)和`java.lang.StackOverflowError`(栈溢出)。这些错误通常由于物理...

    北大青鸟JAVA面试题

    堆(Heap)和栈(Stack)是JAVA中两种重要的内存区域。堆是用于存储所有JAVA对象和数组的空间,其大小动态调整,由垃圾回收器管理。栈则是用于存储局部变量和方法调用的信息,每个线程都有自己的私有栈空间。 ### 8...

    java机制介绍

    - 栈内存(Stack)与堆内存(Heap):Java将内存分为栈内存和堆内存。栈内存用于存放基本类型变量和对象的引用变量,堆内存用于存放通过new创建的对象和数组以及对象的实例变量。 - 堆的优势:动态分配内存大小,...

    java常见的几种内存溢出和解决方案.docx

    Java 中的内存溢出和解决方案 Java 中的内存溢出是一种常见的错误,可能会导致程序崩溃或hang死。了解 Java 中的内存溢出原因和解决方案是非常重要的。本文将介绍 Java 中的几种常见的内存溢出和解决方案。 1.JVM...

Global site tag (gtag.js) - Google Analytics