当前位置: 首页 > article >正文

Java基础面试题11:简述System.gc()和Runtime.gc()的作用?

System.gc() 和 Runtime.gc() 是 Java 中用于提示 JVM(Java 虚拟机)进行垃圾回收的两个方法。它们的作用类似,但也有一些细微的区别。下面我们来详细说明。


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

简单来说,System.gc() 等同于 Runtime.gc(),因为 System.gc() 的底层实现就是调用 Runtime.gc()。但是,它们在使用和实现方式上有一些差异。

1. System.gc() 是类方法(静态方法)

  • 静态方法:可以直接用类名调用,例如 System.gc(),不需要实例化对象。
  • 实现原理:System.gc() 实际上是通过以下方式实现的:
    Runtime.getRuntime().gc();
    
    所以 System.gc() 只是一个“便利方法”,相当于把 Runtime.gc() 的调用简单化了。

2. Runtime.gc() 是实例方法

  • 实例方法:需要通过 Runtime 类的实例来调用。
    例如:
    Runtime runtime = Runtime.getRuntime();
    runtime.gc();
    
  • 本地方法:Runtime.gc() 是一种直接和系统资源打交道的方法(底层可能调用了操作系统的垃圾回收机制)。

为什么更推荐使用 System.gc()?

  1. 方便:System.gc() 是静态方法,不需要创建 Runtime 实例,调用起来更简洁。
  2. 可读性更高:从代码风格上看,System.gc() 更符合直觉,便于理解和维护。

System.gc() 的特点

  • 类方法:可以通过类直接调用,不依赖实例。
  • 非本地方法:不直接操作系统资源,而是间接调用 Runtime.gc() 来完成垃圾回收。

Runtime.gc() 的特点

  • 实例方法:需要通过 Runtime.getRuntime() 获取实例后调用。
  • 本地方法:底层直接与操作系统资源打交道,可能性能上略有不同。

核心总结

  • System.gc() 和 Runtime.gc() 的作用相同,都用于提示 JVM 执行垃圾回收。
  • System.gc() 更便于使用,因为它是静态方法,写起来更简洁。
  • Runtime.gc() 更底层,本质上被 System.gc() 调用。

记住:

System.gc() = Runtime.getRuntime().gc()
二者没有本质差别,只是调用方式不同。面试时如果问到,更倾向推荐使用 System.gc(),因为它方便、直观。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的
7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

concurrent),有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!


http://www.kler.cn/a/419392.html

相关文章:

  • 如何看linux系统内核是aarch64 ,还是64-bit
  • 一万台服务器用saltstack还是ansible?
  • jdk各个版本介绍
  • LeetCode 动态规划 爬楼梯
  • SnowFlake
  • 力扣刷题TOP101:8.BM10 两个链表的第一个公共结点
  • 一些面试问题的深入与思考
  • 国际网络安全趋势
  • git push使用
  • 探索Linux的目录结构:深入理解文件系统的组织
  • mongodb配置ssl连接
  • 详解Qt PDF 之 QPdfDocument与 QPdfView 打开与显示pdf
  • 如何在 Debian 7 上设置 Apache 虚拟主机
  • 时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法
  • node == RabbitMQ入门教程
  • 手机控制载货汽车一键启动无钥匙进入广泛应用
  • 综合实验——用户远程登陆并更改文件
  • 网络七层杀伤链
  • 网络安全-夜神模拟器如何通过虚拟机的Burp Suite代理应用程序接口
  • python学习笔记9-零散知识点
  • vue3 路由跳转携带参数以及其他页面接收参数
  • 数据库学习记录03
  • 鸿蒙开发:自定义一个任意位置弹出的Dialog
  • React第十节组件之间传值之context
  • 扩散模型赋能3D 视觉的综述报告
  • 通信原理实验:PCM编译码