【Java面试题】48 GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
Java是由C++发展来的。
它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。
写C/C++程序,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。内存再大也是有限的,所以当程序不再需要使用某个变量的时候,就需要释放这个内存空间资源,好让别的变量来用它。在C/C++中,释放无用变量内存空间的事情要由程序员自己来解决。就是说当程序员认为变量没用了,就应当写一条代码,释放它占用的内存。这样才能最大程度地避免内存泄露和资源浪费。
但是这样显然是非常繁琐的。程序比较大,变量多的时候往往程序员就忘记释放内存或者在不该释放的时候释放内存了。而且释放内存这种事情,从开发角度说,不应当是程序员所应当关注的。程序员所要做的应该是实现所需要的程序功能,而不是耗费大量精力在内存的分配释放上。
Java有了GC,就不需要程序员去人工释放内存空间。当Java虚拟机发觉内存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间。当然,如果需要,程序员可以在Java程序中显式地使用System.gc()来强制进行一次立即的内存清理。
因为显式声明是做堆内存全扫描,也就是 Full GC,是需要停止所有的活动的(Stop The World Collection),你的应用能承受这个吗?而其显示调用System.gc()只是给虚拟机一个建议,不一定会执行,因为System.gc()在一个优先级很低的线程中执行。
最新文章
- [读书笔记] CSS权威指南2: 结构和层叠
- 英语学习APP—百词斩
- C#实现DNS解析服务
- DNA RNA
- 官方 Material Design App
- Rabbit hunt
- Amzon MWS API开发之 请求报告
- druid 文档 和 源码地址
- XHTML与HTML的差别
- 关于bootstrap两个模态框的问题
- 写markdown博客如何将截图快速上传到图床——记一个工具插件的实现(windows版 开源)
- Deepin 15.4 挂载分区
- EF ++属性会更新实体
- fedora添加ntfs文件系统支持
- 【小程序】页面无法更新tabbar角标属性时
- mock使用中出现的错误
- JQ实现情人节表白程序
- [翻译] Fast Image Cache
- 十個必用的 Vim Plugin
- C# 0-1背包问题
热门文章
- 分享下今天研究的流量上限DDos攻击分析和解决方式
- Qt中使用DOM解析XML文件或者字符串(实例)
- python ——面向对象进阶(反射,双下线方法,静态方法,类方法)
- SpringCloud | FeignClient和Ribbon重试机制区别与联系
- RSA 算法-MSDN文档
- 一款基于jquery实现的鼠标单击出现水波特效
- 【C#/WPF】TextBlock/TextBox/Label编辑文字的问题
- 【C#】关闭 Window 之后,无法设置 Visibility,也无法调用 Show、ShowDialogor 或 WindowInteropHelper.EnsureHandle
- PKU OJ Exponentiation
- fail-fast和fail-safe