java中的垃圾回收机制是怎么回事?

垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。垃圾收集的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为...
java中的垃圾回收机制是怎么回事?
Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。

垃圾收集的意义

在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放没用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和垃圾收集器释放丢弃对象所占的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存洞。碎片整理将所占用的堆内存移到堆的一端,JVM将整理出的内存分配给新的对象。

垃圾收集能自动释放内存空间,减轻编程的负担。这使Java 虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器问题。在用Java语言编程的时候,靠垃圾收集机制可大大缩短时间。其次是它保护程序的完整性, 垃圾收集是Java语言安全性策略的一个重要部份。

垃圾收集的一个潜在的缺点是它的开销影响程序性能。Java虚拟机必须追踪运行程序中有用的对象, 而且最终释放没用的对象。这一个过程需要花费处理器的时间。其次垃圾收集算法的不完备性,早先采用的某些垃圾收集算法就不能保证100%收集到所有的废弃内存。当然随着垃圾收集算法的不断改进以及软硬件运行效率的不断提升,这些问题都可以迎刃而解。 (课课家教育java入门到精通)2017-06-27
是怎么回事?2017-06-27
mengvlog 阅读 196 次 更新于 2025-07-20 11:33:23 我来答关注问题0
  •  文暄生活科普 Java垃圾回收机制是什么?

    Java的垃圾回收机制是自动执行的,这意味着用户无法直接干预这个过程。垃圾回收线程会在系统较为空闲时运行,以确保不会对程序的性能造成太大影响。当对象不再被引用,即对象处于引用的隔离岛状态,具备了被回收的条件,垃圾回收器会将其清除。虽然可以通过调用gc()方法建议虚拟机执行垃圾回收,但这只是一...

  •  翡希信息咨询 一篇带你了解JVM内存模型和垃圾回收机制

    JVM内存模型主要包括五大数据区域:方法区、堆、虚拟机栈、本地方法栈以及程序计数器。垃圾回收机制主要涉及堆区,并有多种垃圾回收算法和收集器。一、JVM内存模型 方法区:定义:被所有线程共享,用于存放已被虚拟机加载的类信息、常量、静态变量等数据。变化:在JDK8中,永久代被移除,取而代之的是元...

  • Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收来负责的,尽管JVM规范并不要求特殊的垃...

  •  深空见闻 java频繁改变静态变量值时程序偶尔变慢

    垃圾回收机制:频繁改变静态变量的值可能触发垃圾回收机制。虽然Java的垃圾回收器是自动管理的,但在某些情况下,如频繁创建大量对象而不及时释放,会导致垃圾回收器频繁工作,消耗大量CPU资源,从而使应用程序变慢。静态变量的初始化和访问:虽然现代JVM对静态变量的访问进行了优化,但在高并发场景下,静态变...

  • Java中的GC全称为Garbage Collection,即垃圾回收机制。以下是关于Java中GC的详细解释:定义:GC是Java语言中的一种自动内存管理机制,用于自动扫描并释放不再使用的对象所占用的内存。作用:在Java程序运行时,动态分配的内存中,当某些对象不再被使用时,如果它们占用的内存没有被及时回收,就会产生内存泄漏...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部