`
walklen
  • 浏览: 25429 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jvm中的堆和栈

阅读更多

     jvm是基于堆栈的虚拟机,堆和栈都是java中用来存储数据的地方.
(1)堆的特点:

       每个java应用进程(一个main线程以及它的子线程)对应一个堆,堆的大小可以通过参数-xms,-xmx来设置。 java中所有通过new出来的对象和数组都存在堆中,可以为各线程共享,堆中的内存空间通过垃圾回收器进行回收。
(2)栈的特点:

       栈是线程私有的,栈的生命周期就是线程的生命周期,可以通过-Xss来分配每个线程的栈空间,如果某个线程的栈空间不足,系统会抛StackOverFlowError异常。栈中是以栈帧为单位进行维护的,java中没调用以方法就会创建一个栈帧,用于存储局部变量区,操作数,等,所以可以说,java中方法的调用过程,其实就是对栈的操作过程(分为压栈和出栈)。基本类型(如short,int...)和对象的引用的保存在栈中,由于这些数据都有已知的固定的大小,栈中的存取速度较快,栈还有一个特点,就是存在栈中的数据可以共享,而堆却不可以,共享的意思就是讲相同的数据可以共用同一内存块, 比如 :
int a=1;
int b=1;
上面过程建立了a和b两个引用,当执行b=1的时候,会先去栈中找是否存在1的值,如果存在,就不会开辟新的内存块给1了,而是直接使用之前的内存,把它的地址直接赋给b,所以a引用和b引用指向相同的内存地址,这也就不难解释a==b的道理了。
还有String的情况, 比如:
String c = "aaa";
String d = "aaa";
这里的c==d也是为true,也可用上面的原理来解释,就是说当以上面的方式来创建字符串的时候,jvm会将创建的字符串保存在栈中,并拥有的栈中共享的特点,所以c==d,但是通过new String("aaa")的方式的话就比较麻烦了,首先会在栈中寻找或者创建(不可能之间建过,就可公用)一个"aaa",然后用它来在堆中又新建(肯定开辟新的空间)一个字符串。

 

分享到:
评论

相关推荐

    JVM中堆内存和栈内存的区别

    因此,理解堆和栈的内存管理机制对于编写高效、无内存问题的Java程序至关重要。 在内存分配策略上,静态存储分配通常在编译时完成,适合静态数据结构;栈式存储分配在函数调用时进行,适用于局部变量和固定大小的...

    堆和栈总结

    对于Java语言而言,堆和栈的概念尤为重要,因为JVM如何管理和使用这两种结构直接影响到程序的性能和稳定性。 #### 二、Java堆栈详解 ##### 2.1 Java堆栈定义 Java中的堆栈主要指的是JVM为每个线程分配的栈空间,...

    Java中堆和栈的区别

    为了确保程序的高效运行以及资源的有效利用,Java虚拟机(JVM)将内存划分为堆和栈两种类型。这两种内存区域各自承担着不同的职责,并且对于程序员来说了解它们之间的差异至关重要。 #### 二、Java中的栈内存 Java中...

    java中的堆和栈

    ### Java中的堆和栈 #### 一、概述 在Java编程语言中,堆和栈是两种重要的内存区域,它们各自负责存储不同类型的数据。理解这两者之间的区别对于掌握Java内存管理和性能优化至关重要。本文将深入探讨Java中堆和栈...

    JVM 堆和栈的区别

    总结来说,JVM堆和栈的主要区别在于: 1. 使用场景:栈主要用于存储方法的局部变量和对象引用,而堆是对象的实际存储位置。 2. 存储速度:栈内存存取速度快,堆内存较慢。 3. 空间管理:栈内存由系统自动管理,空间...

    什么是堆和栈(简单版).pdf

    堆和栈是Java编程语言中两个非常重要的概念,它们是Java虚拟机(JVM)中用于存储和管理数据的两个主要组件。在本文中,我们将深入探讨堆和栈的概念、实现和应用。 堆(Heap) 堆是一种特殊的数据结构,用来存储...

    Java中堆内存与栈内存分配浅析

    程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的工作原理及其区别对于优化程序性能、避免内存泄漏等问题至关重要。本文将深入探讨Java中堆内存与栈内存...

    JAVA中堆和栈的区别 - 路人浅笑 - 博客园.rar_java编程

    在Java编程中,堆和栈是两种非常重要的内存区域,它们各自承担着不同的职责,对于程序的运行效率和内存管理有着至关重要的作用。下面将详细阐述堆和栈的区别。 1. **栈(Stack)** - **定义**:栈是一种线性数据...

    堆和栈的区别

    Java编程语言中,内存管理是通过堆和栈两种机制实现的。栈主要处理基础类型变量和对象引用,而堆则是存储复杂对象和数组的主要区域。理解这两种内存区域的区别和工作原理对于优化代码性能至关重要。 首先,栈内存是...

    2024java面试题.pdf

    1. **JVM 中堆和栈的区别:** - **堆**:运行时数据区,用于存放对象实例,是 JVM 的主要管理区域之一。 - **栈**:线程私有的,用于存储局部变量和部分过程调用的上下文。 2. **Java 堆空间及 GC 机制:** - ...

    Java中堆与栈的内存分配.pdf

    这篇文章将对Java中的堆和栈的内存分配进行详细的介绍。 1. 堆和栈的概念 在Java中,内存被分为两部分:堆(Heap)和栈(Stack)。堆是用来存放对象的,它是由Java虚拟机(JVM)管理的。栈是用来存放基本类型的...

    堆和栈的区别可以用如下的比喻来看出

    在计算机科学中,堆和栈是两种不同的内存管理机制,它们在编程语言中扮演着重要的角色,尤其是在Java这样的高级语言中。理解堆和栈的区别对于优化代码性能和避免内存问题至关重要。 首先,栈(Stack)是一种后进先...

    java里的堆和栈

    ### Java里的堆和栈 #### 一、概述 在Java编程中,“堆”与“栈”的概念至关重要。它们是程序运行时内存管理的核心部分。本文将深入探讨Java中堆和栈的区别及其工作原理。 #### 二、Java内存区域划分 在Java中,...

    JVM中[本地方法栈]的所有内容-xmind脑图pdf

    通过阅读"JVM中[本地方法栈]的所有内容-xmind脑图pdf"这样的资源,可以更直观地掌握本地方法栈的细节,便于理解和实践。在学习过程中,结合Xmind工具打开脑图,可以清晰地梳理知识点,使得学习更加高效易懂。

    Java中的堆和栈.pdf

    在Java编程语言中,内存管理...总的来说,理解Java中的堆和栈可以帮助开发者更有效地管理内存,避免不必要的资源浪费,提高程序性能。合理使用栈和堆可以优化内存使用,减少垃圾回收的压力,从而提升整体应用的效率。

    解析JVM内存结构和6大区域

    JVM 栈是线程私有的,每个线程创建的同时都会创建 JVM 栈,JVM 栈中存放的为当前线程中局部基本类型的变量(java 中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果...

    Java中堆内存和栈内存详解

    #### 六、JVM中的堆和栈 Java虚拟机(JVM)是基于堆栈架构的。对于每一个新创建的线程,JVM都会为其分配一个独立的栈。线程栈用于存储线程的方法调用和局部变量。此外,JVM还维护了一个公共的堆空间,用于存储所有...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    内存管理涉及JVM内存区域,包括堆、栈、方法区、程序计数器和本地方法栈,每部分都有其特定的用途和管理方式。 2. JVM内存模型:JVM内存模型定义了内存中各个部分的关系,以及在多线程环境下如何共享和分配内存。...

    Java中堆和栈的区别详解

    Java中的堆和栈是两种重要的内存区域,它们在程序执行时扮演着不同的角色。了解它们的区别对于优化程序性能和处理内存相关问题是至关重要的。 首先,栈(Stack)主要用于存储基本类型的变量(如int、float)和对象...

    深入理解JVM-java虚拟机栈.docx

    栈的主要任务是为每个方法的执行提供一个栈帧(Stack Frame),栈帧存储了方法执行过程中的局部变量、操作数栈、动态连接和方法返回地址等关键信息。 栈帧是虚拟机栈的元素,它包含了以下几个重要组成部分: 1. ...

Global site tag (gtag.js) - Google Analytics