`
jangwoohyuk_1
  • 浏览: 2944 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

什么时候可以真正的GC

    博客分类:
  • jvm
阅读更多
随着应用程序运行并不断新对象分配内存,Java堆(即专门的内存地址空间)就会慢慢被填满。

最终java堆会被填满,也就是说内存分配线程找不到一块足够大的连续空间为新对象分配内存,这时JVM决定要通知垃圾收集器并启动垃圾收集。垃圾收集也可以通过在程序中调用System.gc()来触发,但使用System.gc()并不能确保垃圾收集一定被执行。在任何一次垃圾收集之前,垃圾收集机制都会首先判断执行垃圾收集是否安全,当应用程序的所有活动线程都处于安全点时就可以开始执行一次垃圾收集。例如:当正在为对象分配内存时就不能执行垃圾收集,或者是正在优化CPU指令时也不能执行垃圾收集,因为这样很可能会丢失上下文从而搞错最终结果。

垃圾收集器不能回收任何一个有活动引用的对象,那将破坏Java虚拟机规范。也无需立即回收死对象,因为死对象最终还是会被后续的垃圾收集所回收。尽管有很多种垃圾收集的实现方法,但以上两点对所有垃圾收集实现都是相同的。垃圾收集真正的挑战在于如何识别对象是否存活以及如何在尽量不影响应用程序的情况下回收内存,因此垃圾收集器的目标有以下两个:

迅速释放没有引用的内存以满足应用程序的内存分配需要从而避免内存溢出。
回收内存时对正在运行的应用程序性能(延迟和吞吐量)的影响最小化。
分享到:
评论

相关推荐

    RGW 的GC深入解析与调优

    3. rgw_gc_obj_min_wait 这个控制删除数据以后多久以后开始真正的底层数据回收,默认是 2 小时,如果线上对空间资源利用率比较敏感,可以适当缩短。 4. rgw_gc_processor_period 这个控制多久时长以后 GCworker 开始...

    java内存泄露.pdf

    一旦对象不再被任何活动部分(正在执行的程序部分)引用,GC就会将其标记为可回收,以便在适当的时候释放内存。这个过程是自动的,程序员无法直接控制GC的行为,只能通过`System.gc()`方法发出回收建议,但实际是否...

    MSB企业级JVM优化与性能调优课程 解读JVM内部机制-针对性解决企业架构优化问题

    类加载过程是按需完成的,即在真正用到该类的时候才会进行加载。 #### 二、JVM性能调优基本流程 ##### 2.1 问题定位 问题定位是整个调优过程中最为关键的一步,只有准确地识别出性能瓶颈所在,才能有针对性地采取...

    关于_JVM_命令行标志您不知道的_5_件事及命令行参数列表

    在Java应用的调试过程中,有时候仅仅依靠默认的日志信息并不足以解决问题,这时候可以使用**verbose** 参数来开启详细的日志输出。 - **作用机制**:通过`-verbose:[gc|class|jni]` 可以选择性地开启垃圾回收、类...

    超级有影响力霸气的Java面试题大全文档

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

    性能优化:什么是性能优化

    减少类的加载次数,比如使用延迟加载(Lazy Loading)技术,只有在真正需要时才加载类,可以减轻JVM负担,提高启动速度。 6. 使用JVM调优工具: JDK提供了一系列工具,如JVisualVM、JConsole和JProfiler等,帮助...

    java面试笔试题大汇总

    #### 七、什么时候用assert - `assert`关键字用于声明断言,主要用于调试和测试阶段。当程序运行时,如果断言条件不满足,则抛出`AssertionError`异常。通常用于确保程序的基本假设成立,比如检查函数参数的有效性...

    TroubleshootingJavaReaddebugandoptimizeJVMapplications.pdf

    4. **简单方法的力量**:尽管复杂的调查技术在某些情况下非常有用,但有时候,在正确的位置添加一条简单的日志记录就能起到神奇的效果。简单的方法往往能带来意想不到的收获。 5. **内存泄漏识别**:书中通过对比...

    jvm如何判断对象己死详解

    这些引用类型之间的转换可以在适当的时候发生,例如,当对象失去所有强、软、弱引用时,它们会变成虚引用,最终被垃圾收集器回收。 总之,JVM通过可达性分析算法和引用类型来判断对象是否可以被回收,确保有效地...

    Pro .NET Memory Management

    - **延迟初始化**:只在真正需要的时候才创建对象,以减少不必要的内存消耗。 ##### 3.2 合理使用集合类型 .NET提供了一系列集合类型,如List、Dictionary, TValue>等,正确选择合适的集合类型可以显著提高代码的...

    nfrp

    如果您知道某个行为在某个时候是恒定的,并且想问一下最终值是什么,尽管有点微妙,这很有用:只有当输入行为变为无穷大时,它才起作用。 例如,如果这是一个阶梯式行为,而您只是过滤输入事件,并且您知道不再有...

    03.Java对象初始化1

    因此,如何计算一个对象的大小可以确定了普通对象:8 字节的对象头 + 4/8 字节的对象指针 + 数据区(包括父类)+ padding(8 的倍数)数组对象:8 字节的对象头 + 4/8 字节的对象指针 + 4 字节素组长度 + 数据区 + ...

    bitmap内存问题

    注意,虽然调用`System.gc()`可以提示JVM进行垃圾回收,但并不能保证立刻执行垃圾回收。因此,我们应尽可能减少直接调用`System.gc()`。 ### 3. 合理使用缓存 缓存`Bitmap`可以提高性能,但也可能增加内存消耗。...

    vim插件

    1. **Autoload**:这个目录存放的是插件中的函数和脚本,它们在 Vim 启动时不会立即加载,而是在需要的时候按需加载,这样可以减少启动时间并提高性能。 2. **Doc**:文档目录包含关于插件的 Viminfo 文件,用户...

    JAVA核心知识整理.pdf

    - **异步IO模型**:真正实现了边干边等,当进程发起IO请求后立刻就可以开始做其他的事情,而当后台准备完成的时候,会有一个信号通知前端的进程。 - **JAVA IO包**:提供了基本的输入输出功能,主要包括File、...

    java面试笔试题大汇总.doc

    #### 七、什么时候用 assert `assert`关键字用于断言编程,通常在开发和测试阶段使用,用来检查程序的状态是否符合预期。在生产环境中一般禁用断言。 #### 八、GC 的概念及其重要性 - **概念**:垃圾回收...

    java初始化和清理

    可以通过System.gc()来建议虚拟机进行垃圾回收,但JVM是否真正执行垃圾回收仍是不确定的。因此,对于资源的清理,Java推荐使用try-with-resources语句或者显式地关闭资源,如使用InputStream.close()方法关闭输入流...

Global site tag (gtag.js) - Google Analytics