1.Java中垃圾回收的目的:
- 垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源
- 垃圾回收是在内存中存在没有引用的对象或超过作用域的对象时进行的
- 这两个方法用来提示jvm要进行垃圾回收,但是,立即开始还是延迟进行垃圾回收是取决于jvm的
- 当垃圾回收器要宣告一个对象死亡时,至少要经过两次标记过程:如果对象在进行可达性分析后发现没有GC Roots相连接的引用链,就会被第一次标记,并且判断是否执行finalizer() 方法,如果对象覆盖 finalizer() 方法且未被虚拟机调用过,那么这个对象会被放置在F-Queue队列中,并在稍后有一个虚拟机自动建立的低优先级的finalizer线程区触发finalizer() 方法,但不承诺等待其运行结束
- 对象逃脱死亡的最后一次机会,只要重新与引用链上的任何一个对象建立关联即可,但是不建议使用,运行代价高昂,不确定性大,且无法保证各个对象的调用顺序,可以用try-finally或其他代替
- 不会,在下一个垃圾回收周期中,这个对象将是可被回收的
- 串行GC:整个扫描和复制过程中均采用单线程的方式,相对于吞吐量GC来说简单,适用于但CPU,客户端级别
- 吞吐量GC:采用多线程的方式来完成垃圾收集,适用于吞吐量要求较高的场合,比较适合中等和大规模的应用程序
- 当没有任何对象的引用指向该对象时,在下次垃圾回收周期到来的时候,对象才会被回收
推荐阅读
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 程序员|程序员“真实”日常(每天敲代码不到 1 小时)
- jvm|JVM调优(线上 JVM GC 频繁耗时长,出现 LongGC 告警,这次排查后想说:还有谁(...))
- java内存区域与内存溢出异常
- JVM|JVM优化(一)
- 自动内存管理机制
- Java|angular.js 翻页组件
- Java|java--NoSuchMethodError解决办法
- Flutter|Flutter 基于NestedScrollView+RefreshIndicator完美解决滑动冲突
- andorid|Android属性动画Property Animation系列一之ValueAnimator