System.gc()与Runtime.gc()的区别

(1) GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

(2) 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的”,哪些对象是”不可达的”。当GC确定一些对象为”不可达”时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

(3) 垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,当一个对象不再被引用的时候,按照特定的垃圾收集算法来实现资源自动回收的功能。

(4) System.gc();就是呼叫java虚拟机的垃圾回收器运行回收内存的垃圾。

(5) 当不存在对一个对象的引用时,我们就假定不再需要那个对象,那个对象所占有的存储单元可以被收回,可通过System.gc()方法回收,但一般要把不再引用的对象标志为null为佳。

(6) 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。 Runtime.getRuntime().gc();

(7) java.lang.System.gc()只是java.lang.Runtime.getRuntime().gc()的简写,两者的行为没有任何不同。

(8) 唯一的区别就是System.gc()写起来比Runtime.getRuntime().gc()简单点. 其实基本没什么机会用得到这个命令, 因为这个命令只是建议JVM安排GC运行, 还有可能完全被拒绝。 GC本身是会周期性的自动运行的,由JVM决定运行的时机,而且现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择,就算真的有性能上的需求,也应该去对GC的运行机制进行微调,而不是通过使用这个命令来实现性能的优化

原文地址:https://www.cnblogs.com/wdpnodecodes/p/8555895.html

时间: 2024-10-11 00:31:47

System.gc()与Runtime.gc()的区别的相关文章

Java垃圾回收之Minor GC和Major GC

JAVA堆的描述如下: 内存由Perm和Heap组成.其中Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块: NEW Generation:程序新创建的对象都是从新生代分配内存,新生代由Eden Space和两块相同大小的Survivor Space(通常又称S0和S1或From和To)构成,可通过-Xmn参数来指定新生代的大小,也可以通过-XX:SurvivorRation来调整Eden Space及Survivor Space的大小

Java中System.gc()和Runtime.getRuntime().gc()

(1) GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法. (2) 对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况.通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象.通过这种方式确定哪些对象是"可达的",哪些

Java虚拟机6:内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别

http://www.cnblogs.com/xrq730/p/4839245.html 前言 之前的文章尤其是讲解GC的时候提到了很多的概念,比如内存溢出和内存泄露.并行与并发.Client模式和Server模式.Minor GC和Full GC,本文详细讲解下这些概念的区别. 内存溢出和内存泄露的区别 1.内存溢出 内存溢出指的是程序在申请内存的时候,没有足够大的空间可以分配了. 2.内存泄露 内存泄露指的是程序在申请内存之后,没有办法释放掉已经申请到内存,它始终占用着内存,即被分配的对象可

System.exit和Runtime halt区别

看到RM在处理异常的时候使用了两种退出方式,而且是针对不同的异常.特意查询了一些资料来看看,两种方式有什么不同. System.exit 终止当前正在运行的Java虚拟机.参数作为状态代码,按照惯例,一个非零状态码表示异常终止. 用线程描述,在多线程情况下,可能更准确一些 1.调用方法后,线程会退出 2.未捕获的异常被线程抛出,但如果有其他非守护线程,程序将继续运行. 3.反馈状态码,一般在脚本中有用. 4.线程退出,还是做一些清理动作 -----------------------------

JAVA API(二)System类与Runtime类

1.System类与Runtime类 1.1System类 System类对我们来说并不陌生,在之前学习的知识中,当我们需要打印结果时,使用的都是"System.out.println()"语句进行打印输出,这句代码中就使用了System类.这个类中定义了与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可.下表是System类常用的一些方法. 方法声明 功能描述 static void exit(int status)

ART运行时Foreground GC和Background GC切换过程分析

通过前面一系列文章的学习,我们知道了ART运行时既支持Mark-Sweep GC,又支持Compacting GC.其中,Mark-Sweep GC执行效率更高,但是存在内存碎片问题:而Compacting GC执行效率较低,但是不存在内存碎片问题.ART运行时通过引入Foreground GC和Background GC的概念来对这两种GC进行扬长避短.本文就详细分析它们的执行过程以及切换过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在前面AR

System类与Runtime类

PS: Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定功能.java提供了System类与Runtime类来与程序的运行平台进行交互. System类: 1.代表当前java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过Sytem类来调用这些类变量和类方法. 2. System类提供了代表标准输入.标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量.系统属性的方法,还提供了加载文件和

GC详解及Minor GC和Full GC触发条件总结

GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象. GC机制 要准确理解Java的垃圾回收机制,就要从:"什么时候","对什么东西","做了什么"三个方面来具体分析. 第一:"什么时候"即就是GC触发的条件.GC触发的条件有两种.(1)程

GC回收算法&&GC回收器

GC回收算法 什么是垃圾? 类比日常生活中,如果一个东西经常没被使用,那么就可以说是垃圾. 同理,如果一个对象不可能再被引用,那么这个对象就是垃圾,应该被回收. 垃圾:不可能再被引用的对象. finalize方法 在对象没有被引用时调用 在Object类里定义 新生代与老年代 IBM公司的研究表明,在新生代中的对象 98% 是朝生夕死的. 在实际的 JVM 新生代划分中,不是采用等分为两块内存的形式.而是分为:Eden 区域.Survivorfrom 区域.Survivorto 区域 这三个区域