`

垃圾回收机制与内存泄漏之间的关系

    博客分类:
  • JAVA
阅读更多

                                   GC(Garbage collection) 英语直译,垃圾收集

 

【编程中的小确幸】:

           你是幸运的,作为一名JAVA程序员,有些时候室内打扫卫生不需要你做,自有人替你打扫,这样想一想是不是很爽。

            但是作为一名资深从C,C++,走过来的人来说,在C和C++里面是要求程序员强制回收垃圾的。

===================================================================================

【举个栗子】:

            java中创建一个数据,必须NEW一个对不对,这就是占用的内存,必须有一个方法需要回收当这个数组不再被需要时所占用的内存。其实就是由New调用的在不可访问内存中锁调用的数据。很多程序员也习惯于把一个数组所有引用设置为null这就是强制垃圾回收,

这里为什么要讲到内存泄漏问题?这是因为虽然我们在jAVA里面会有垃圾自动回收机制,我们很多时候不用去管他,但是这个习惯如果带到C或C++,就会导致内存泄漏。

===================================================================================

【C,C++内存泄漏】:

           C,C++明确要求程序员释放不再被需要的内存。如果忘记了,可能就是一个几百个字节。也许你运行在一个至少几百兆的内存中,但是当这个方法可能正在一个循环中被调用,你可以想想接下来多么恐怖了。内存不够用了,接下来的新数组分配不到足够的内存时。就会造成你的程序崩溃,   这也是因为可用的内存池逐渐减少的原因。

 ===================================================================================

【什么时候调用GC?】:

         同样用代码说明这个例子:

           

void usaArray(int  size){

         int[]  firstArray=new int[size];
         int[]  secondArray=firstArray;
         int[]   thirdArray=secondArray;




}

 

就是这个简单的代码:

           执行到最后,返回,指向这个数组的三个引用全没了,就好像干了无用功一样,这个数组开辟的内存空间不久就被回收了。

================================================================================

【什么情况下触发】:

      1)当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当       应用忙时,GC线程就不会被调用,但以下条件除外。

  2)Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不             足, JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报“out of memory”的错误,Java应用将停止。

    

 

 

1
3
分享到:
评论

相关推荐

    垃圾回收机制面试题·.docx

    ### 垃圾回收机制详解 #### 一、引言 在现代软件开发中,内存管理一直是程序设计中的一项重要任务。特别是在高级编程语言中,如何有效地管理和释放内存资源成为了衡量一个程序性能的关键因素之一。Java作为一种...

    JAVA垃圾回收机制与内存泄露问题实用.pdf

    Java垃圾回收机制是Java语言的一个重要特性,它自动管理程序中的内存分配和释放,以防止内存泄漏和资源浪费。垃圾回收的核心思想是追踪并回收那些不再被程序引用的对象,释放其所占的内存空间,以便再次分配给其他...

    JAVA垃圾回收机制与内存泄露问题.docx

    Java垃圾回收机制是Java语言的一大特性,它负责自动管理程序中的内存,主要目标是回收不再使用的对象,防止内存泄漏,并确保内存的有效利用。这个过程是由Java虚拟机(JVM)中的垃圾收集器来执行的。 1. **垃圾收集...

    Java垃圾回收机制总结

    Java垃圾回收机制是Java虚拟机(JVM)中的一种机制,用于防止内存泄露和有效地使用空闲的内存。垃圾回收机制的主要目的是为了回收无用的对象占用的内存空间,使该空间可被程序再次使用。 垃圾回收机制的算法有多种...

    c++ 垃圾回收机制

    然而,随着软件复杂度的增加,手动管理内存可能会导致内存泄漏、悬挂指针等难以察觉的问题,因此,理解和探索C++中的垃圾回收机制显得尤为重要。 标题"**C++ 垃圾回收机制**"暗示我们将讨论如何在C++中实现一种自动...

    java高级之垃圾回收机制

    其中,垃圾回收机制(Garbage Collection, GC)是Java虚拟机(JVM)的一项重要特性,它能够自动检测并回收不再使用的对象占用的内存空间,从而有效避免了内存泄漏问题。本文将详细介绍Java中的垃圾回收机制及其工作原理...

    Python垃圾回收机制

    在Python中,垃圾回收机制是实现内存管理的关键工具,帮助程序员避免了手动管理内存可能导致的诸多问题,如内存泄漏等。 首先,我们来看一下Python中的计数引用(Reference Counting)机制。这是最基础的垃圾回收...

    java垃圾回收机制简述

    通过理解垃圾回收机制如何运作,可以帮助开发者更好地诊断和解决内存泄漏及性能瓶颈等问题。 #### 二、历史背景 早在1960年,Lisp语言就引入了内存动态分配和垃圾收集的概念,这是历史上首次在计算机语言中采用...

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

    Java中内存泄露及垃圾回收机制参照 Java是一种可以编写跨平台应用软件的面向对象的程序设计语言,由Sun Microsystem公司的詹姆斯·高斯林等人于20世纪90年代初开发。伴随着Java技术的普及,网络上越来越多的服务器...

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

    ### Java中内存泄露及垃圾回收机制 #### 一、内存泄露概述 在计算机科学领域,内存泄露是指在程序运行过程中,不再使用的内存未被及时释放,导致这部分内存无法被重复利用,进而影响程序性能甚至导致程序崩溃的...

    Android垃圾回收机制解决内存泄露问题

    在Android开发中,内存管理是至关重要的,因为有效的内存管理能确保...理解Android的垃圾回收机制和常见的内存泄露场景,以及如何避免它们,是每个Android开发者必备的技能,这有助于创建高效、稳定的Android应用程序。

    Java与C#的垃圾回收机制

    ### Java与C#的垃圾回收机制 ...总之,无论是Java还是C#,其垃圾回收机制都是为了自动管理内存,提高开发效率,减少内存泄漏等问题的发生。了解这些机制的工作原理,对于编写高效稳定的程序至关重要。

    java垃圾回收及内存泄漏.pptx

    ### Java垃圾回收及内存泄漏知识点详解 #### 一、Java内存管理 1. **运行时数据区**:...通过对内存管理的理解和垃圾回收机制的学习,开发者能够更好地编写高效、稳定的Java程序,并有效避免内存泄漏等问题的发生。

    jvm内存模型以及垃圾回收机制.pptx

    Java虚拟机(JVM)内存模型...理解JVM内存模型和垃圾回收机制对于优化Java应用性能、避免内存泄漏和有效利用资源至关重要。开发者应根据实际需求选择合适的垃圾回收器,并关注内存分配策略,以实现高效稳定的程序运行。

    JVM垃圾回收机制与GC性能调优

    Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...

    C#垃圾回收机制GC

    【C#垃圾回收机制GC】深入解析 垃圾回收(Garbage Collection, GC)是现代编程语言中用于自动管理内存的一种机制。它的核心思想是通过跟踪和回收那些不再被程序引用的对象,以避免内存泄漏和提高内存利用率。在.NET...

    JavaScript的垃圾回收机制与内存管理

    了解JavaScript的垃圾回收机制和内存管理对于编写高效且无内存泄漏的代码至关重要。理解这些原理可以帮助开发者编写出更优化的代码,避免因不必要的内存占用导致的性能下降。通过合理地分配和释放内存,可以提高...

Global site tag (gtag.js) - Google Analytics