- 覆盖对象的finalize
finalize()并不是必须要执行的,它只能执行一次或者0次。
Spring Bean垃圾回收肯定是在关闭Spring上下文之后.
Rumenz.java
1package com.rumenz; 2 3public class Rumenz { 4 public void print(){ 5 System.out.println("......."); 6 } 7 //覆盖finalize方法 8 @Override 9 public void finalize() throws Throwable { 10 System.out.println("Rumenz对象被回收"); 11 } 12} 13
DemoApplication.java
1package com.rumenz; 2 3 4import org.springframework.context.annotation.AnnotationConfigApplicationContext; 5import org.springframework.context.annotation.Bean; 6 7 8public class DemoApplication { 9 public static void main(String[] args) throws InterruptedException { 10 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(); 11 12 ac.register(DemoApplication.class); 13 14 //启动Spring上下文 15 ac.refresh(); 16 //关闭Spring上下文 17 ac.close(); 18 System.out.println("Spring上下文已关闭"); 19 Thread.sleep(5000L); 20 //强制进行GC是为了观察回收过程 21 System.gc(); 22 Thread.sleep(5000L); 23 } 24 25 @Bean("rumenzz") 26 public static Rumenz rumenz(){ 27 Rumenz rumenz = new Rumenz(); 28 return rumenz; 29 } 30 31} 32
输出
1Spring上下文已关闭 2Rumenz对象被回收
由于finalize不是每次一定会被调用,如果没有结果需要多运行几次.
原文: https://rumenz.com/rumenbiji/Spring-Bean-GC.html
原文: