关于java gc和有close方法的对象
程序员文章站
2022-07-13 10:30:17
...
我们知道有些java对象比如socket,io流等是有close方法的,一般可以在finally块内调用然后释放资源,假如我们忘记调用close方法,当java gc这个对象的时候也会释放资源,不过java gc是不能确定时间的,所以最好用完了就手工close一下。
下面我们用ServerSocket的例子来证明垃圾回收是会释放内存和端口的:
import java.net.ServerSocket; public class TestSocketGc { public static void main(String[] args) throws Exception { System.out.println("start"); sub(); //sub里面的serverSocket此时超出作用域了,通知jvm可以gc一下 //如果不手工gc一下,假设内存资源充足,jvm也不会自动gc System.gc(); //休息一下让jvm有时间回收sub里面的serverSocket Thread.sleep(3000); /** * 如果注释掉上面两句,没释放资源, * 因为端口占用,下面一句将抛异常: * java.net.BindException: Address already in use: JVM_Bind */ ServerSocket serverSocket = new ServerSocket(4567); System.out.println("end"); } public static void sub() throws Exception { ServerSocket serverSocket = new ServerSocket(4567); //serverSocket.close(); //serverSocket = null; //System.gc(); } }
谢谢!!!
上一篇: Java Bean let's miss Mr.Bean
下一篇: ClickHouse安装
推荐阅读
-
Java8利用stream的distinct()方法对list集合中的对象去重和抽取属性去重
-
关于ajax对象一些常用属性、事件和方法大小写比较常见的问题总结
-
学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?
-
java中List对象的操作方法和List对象的遍历
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
荐 浅谈Java中类和对象的初始化、实例化以及方法重载的底层机制
-
Java的类锁、对象锁和方法锁
-
关于java gc和有close方法的对象
-
对继承与多态、成员变量的隐藏和方法重写、super关键字、final关键字、对象的上转型对象、抽象类的学习理解(java)
-
JAVA面向对象编程的思想及方法定义和调用