• GC 是什么?为什么要有 GC?


    GC 是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误

    的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动

    监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放

    已分配内存的显示操作方法。Java 程序员不用担心内存管理,因为垃圾收集器会

    自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或

    Runtime.getRuntime().gc() ,但 JVM 可以屏蔽掉显示的垃圾回收调用。

    垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通

    常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死

    亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回

    收器对某个对象或所有对象进行垃圾回收。在 Java 诞生初期,垃圾回收是 Java

    最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过

    境迁,如今 Java 的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常

    觉得 iOS 的系统比 Android 系统有更好的用户体验,其中一个深层次的原因就在

    Android 系统中垃圾回收的不可预知性。

    补充:垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量

    垃圾回收等方式。标准的 Java 进程既有栈又有堆。栈保存了原始型局部变量,堆

    保存了要创建的对象。Java 平台对堆内存回收和再利用的基本算法被称为标记和

    清除,但是 Java 对其进行了改进,采用“分代式垃圾收集”。这种方法会跟 Java

    对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象

    移动到不同区域:

    伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,

    这里是它们唯一存在过的区域。

    幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。

    终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集

    Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身

    颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,

    以便为大对象腾出足够的空间。

    与垃圾回收相关的 JVM 参数:

    -Xms / -Xmx — 堆的初始大小 / 堆的最大大小

    -Xmn — 堆中年轻代的大小

    -XX:-DisableExplicitGC — 让 System.gc()不产生任何作用

    -XX:+PrintGCDetails — 打印 GC 的细节 244 页 共 485 页

    -XX:+PrintGCDateStamps — 打印 GC 操作的时间戳

    -XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小

    -XX:NewRatio — 可以设置老生代和新生代的比例

    -XX:PrintTenuringDistribution — 设置每次新生代 GC 后输出幸存者

    乐园中对象年龄的分布

    -XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老

    年代阀值的初始值和最大值

    -XX:TargetSurvivorRatio:设置幸存区的目标使用率

  • 相关阅读:
    mysql03聚合函数
    栈、队列、循环队列、双端队列、优先级队列04
    OOAD之策略模式(1)
    jvm01:java内存区域与内存
    Python+Selenium
    Python+Selenium
    Python+Selenium
    Python+Selenium
    Python+Selenium
    Python+Selenium
  • 原文地址:https://www.cnblogs.com/programb/p/13021332.html
Copyright © 2020-2023  润新知