`

java堆栈区别和垃圾回收机制总结

 
阅读更多

1Java中堆和栈的区别

  堆和栈都是内存中的一部分;

2、  栈的空间比较小,用来存放对象的引用

3、  堆的空间比较大,一般新建的对象都存放在堆里

4、  栈是一个先进后出的数据结构,通常保存方法中的参数和局部变量

5、  java中所有的基本变量和引用变量都存储在栈中,栈中数据的生命周期是“{。。。}”之间

6、  堆是一个可动态申请分配内存空间(其记录空间的记录由操作系统控制)

Java中所有new的对象都存在于堆中;

7、  栈的优势是存取速度比较快而且栈数据可以共享,缺点是栈中的数据大小和生存周期必须是确定的,缺乏灵活性;

8、  堆的优势是可以动态分配内存而且生存期也不用提前声明,java的垃圾收集器会自动收回这些没用的数据;缺点是由于要在运行时动态分配内存,所以存取速度慢

程序中局部变量存在于栈中,全局变量处在于静态区中,动态分配变量存在于堆中

Java的垃圾回收有几种方式:

JVM内存回收的三种基本算法:

1、  标记清除:标记出来需要回收的对象,然后把这些对象在内存中的信息删除:

停止所有工作,收集器从根开始访问每个活跃的节点,标记它所访问的每一个节点,走过所有引用后标记完成,然后就对堆进行清除,所有没有访问的节点都作为垃圾回收,并释放空间;

特点:收集暂停可能时间会很长,在清除阶段整个堆是可访问的,这对可能有页面交换的虚拟内存系统有非常负面的性能影响;

2、  标记清除压缩:分两个阶段:

一、访问并标记每个活跃的字段;

二、复制所有活跃的对象,是所有活跃的对象被整理到堆的底部;长寿的对象趋于堆底

特点:由于压缩空间需要一定的时间,会影响垃圾收集的时间

3、标记清除复制:

   堆被分成大小相等的两半空间,其中一半包含活跃的数据,另一半未使用,当活跃的空间占满以后程序就会停止,活跃的对象被从活跃的空间复制到不活跃的空间,空间的角色就会转换,原来不活跃的空间变为活跃的空间,原来活跃的空间变为不活跃的空间

特点:需要两块空间,对内存的要求比较大,内存的利用率低,适用于短生存期的对象,持续来回复制长生存期的对象导致效率比较低;

由于现在处理器都是多核的,处理器的性能得到了极大的提升,所以在此基础上又产生了几种垃圾收集算法;主要包括两个:

4、 并行标记清除:原来垃圾回收只是一个线程执行的,现在创建多个垃圾回收线程并行的进行标记清除,比如把需要标记的对象平均分配到多个线程之后,当标记完后多个线程并行清除

5、并发标记---清除:所谓并发就是应用程序和垃圾回收可以并发,

新生代:采用标记清除---复制算法

养老代:采用标记---清除---压缩算法

持久代:默认情况不被垃圾回收;(存放java方法区的数据及启动类加载器加载的对象)

 

 

 

分享到:
评论

相关推荐

    Java中内存泄露及垃圾回收机制参照.pdf

    Java中内存泄露及垃圾回收机制参照 Java是一种可以编写跨平台应用软件的面向对象...Java的垃圾回收机制可以自动回收内存中的垃圾,避免内存泄漏,但是程序员需要注意避免内存泄漏的几点,以确保程序的稳定性和安全性。

    详细介绍Java垃圾回收机制

    Java垃圾回收机制是Java编程语言的关键特性,负责自动管理程序中的内存,确保程序高效、稳定地运行。在Java虚拟机(JVM)中,垃圾回收的主要任务是识别并清理不再被程序使用的对象,以避免内存泄漏。以下是关于Java...

    java堆栈详解 PDF 下载

    - 垃圾回收机制(Garbage Collection, GC)负责自动清理不再使用的对象,以避免内存泄漏。 - 分代收集策略使得垃圾回收更加高效,通常分为新生代(Young Generation)、老年代(Tenured Generation)和持久代...

    java 堆栈的演示程序

    4. 深入理解JVM的内存模型,特别是堆栈和堆的区别,以及垃圾回收对堆的影响。 总之,这个"java 堆栈的演示程序"为我们提供了一个实践和学习Java内存管理的绝佳机会,无论是对于初学者还是经验丰富的开发者,都能...

    Java垃圾回收机制.pdf

    Java垃圾回收机制是Java编程语言中的一个重要特性,它自动化地管理程序运行时的内存分配与回收,从而减轻了程序员的工作负担。垃圾回收的主要目标是识别并释放那些不再被程序使用的对象所占用的内存,以防止内存泄漏...

    JAVA内存模型与垃圾回收

    JAVA内存模型与垃圾回收是Java开发中至关重要的概念,它们...总之,理解Java内存模型和垃圾回收机制对于编写高效、稳定的Java程序至关重要。开发者应根据应用需求和性能目标来调整内存配置和选择适当的垃圾收集策略。

    详细介绍Java垃圾回收机制.docx

    "Java垃圾回收机制详解" Java垃圾回收机制是Java语言的核心技术之一。垃圾收集(GC)是Java虚拟机(JVM)中的一种机制,用于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。 垃圾...

    Java堆栈内存分析笔记

    理解垃圾回收机制有助于优化内存使用,避免内存泄漏。 3. **内存碎片**:长时间运行的Java应用可能导致堆内存碎片。碎片化会影响内存效率,因为可用的连续内存块可能太小以容纳新对象。可以通过调整JVM参数,如使用...

    09 Java基础-JVM垃圾回收-玉峰1

    本节将深入探讨JVM垃圾回收机制以及与之相关的工具和概念。 1. **JVM内存模型** JVM内存分为堆内存和栈内存,其中堆内存主要用于存储对象实例,而栈内存则用于存储方法调用时的局部变量。堆内存又分为年轻代和老...

    java堆栈常量池笔记

    堆内存的管理由Java虚拟机的垃圾回收机制负责,当一个对象没有任何引用指向它时,这个对象就会成为垃圾,等待垃圾回收器回收。由于堆内存的分配和回收是动态的,因此它具有更大的灵活性,但这也意味着存取速度相对较...

    堆栈溢出1

    Java 堆栈溢出与 JVM 垃圾回收机制 Java 堆栈溢出是指 Java 应用程序在堆栈中存储的数据超过了堆栈的容量限制,从而导致程序崩溃的一种错误。这种错误通常是由于程序中的循环递归或死循环引起的。 在 Java 虚拟机...

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

    "Java 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,...了解堆栈(stack)和堆(heap)的区别对于 Java 编程非常重要,可以帮助我们更好地理解 Java 的内存管理机制。

    C语言,基于mark-sweep算法实现的垃圾回收机制.zip

    在IT领域,垃圾回收(Garbage Collection, GC)是编程语言中自动管理内存的重要机制,尤其是对于像Java、Python这样的高级语言。...这不仅有助于提升编程技能,还能为理解和优化更高级语言的垃圾回收机制提供基础。

    Java虚拟机运行机制

    4.垃圾回收:Java虚拟机的垃圾回收机制可以自动回收不再使用的对象,避免内存溢出。 Java虚拟机的优点包括: * 平台无关性:Java虚拟机使得Java语言编译器生成的目标代码可以在多种平台上运行。 * 可移植性:Java...

    Java JVM详解

    Java语法简洁,面向对象,具有垃圾回收机制,以及强大的异常处理和多线程支持。 2. Java的开发流程: Java程序的开发通常包括编写源代码、编译、打包和运行四个步骤。源代码写在.java文件中,通过javac编译器编译成...

    垃圾收集机制的基本原理及方法word版

    总之,理解Java垃圾收集机制的基本原理和方法对于开发高性能的Java应用至关重要。开发者需要根据具体应用的需求和场景,选择合适的垃圾收集策略,进行适当的内存管理,以提升程序的运行效率和稳定性。

    高级JAVA面试——最全的总结

    - 内存管理:理解堆栈内存分配,了解垃圾回收机制(GC)。 - 异常处理:学习如何使用try-catch-finally语句块处理异常,理解检查型和非检查型异常。 - 泛型:掌握泛型类、泛型接口、泛型方法等用法,以及类型擦除...

    java堆-栈-堆栈常量池的区别,史上最全总结

    Java的垃圾回收机制会自动回收不再使用的对象,以避免内存泄漏。由于在堆中分配内存需要在运行时进行,因此相对于栈,存取速度较慢。 3. 常量池(Constant Pool): 常量池是Java内存模型中的一个重要组成部分,它...

Global site tag (gtag.js) - Google Analytics