我们知道有些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(); } }
谢谢!!!
相关推荐
例如,使用DataSource.getConnection()创建的Java数据库连接必须用Close()方法关闭。对于ResultSet和Statement对象,虽然它们会在Connection关闭时自动关闭,但如果使用连接池,需要显式关闭这三个对象以避免内存...
2. Java中的类和对象:文件中出现了与类定义和对象创建相关的知识点,例如“abstract”表示抽象类或方法,以及类的构造方法(ConstructTest类的构造函数)和方法的定义。在Java中,类是由方法和属性组成,可以实现...
此外,Java使用有向图来维护对象之间的引用关系,帮助识别引用循环等问题,确保即使存在循环引用也能正确回收对象。 #### 二、Java内存泄露的原因 尽管Java的自动内存管理非常强大,但在某些特定情况下仍可能出现...
因此,对于资源的清理,Java推荐使用try-with-resources语句或者显式地关闭资源,如使用InputStream.close()方法关闭输入流,确保及时释放资源。 内存泄露是Java开发中需要特别关注的问题,内存泄露指的是程序中己...
根据给定的文件信息,我们可以总结出以下关于“计算器界面Java设计”的相关知识点: ### 1. 导入必要的库 在Java程序中,我们首先需要导入必要的库,以便使用图形用户界面(GUI)组件。 ```java import java.awt....
在Java中,由于具备垃圾回收机制(GC),理论上开发者不必担心内存泄露问题。然而,在实际应用中,仍然存在一些特殊情况会导致内存泄露的发生。 #### 二、内存泄露的原因分析 1. **未及时关闭资源**:例如文件句柄、...
Java内存管理机制的核心任务是确保高效地使用内存,特别是如何识别和回收不再使用的对象,以避免内存泄漏。本文将深入探讨这一主题,重点关注垃圾标记的过程。 首先,我们要明白JVM如何确定哪些对象是存活的。有两...
- **接口**:只包含抽象方法(默认情况下),没有实例变量,不能有构造函数,可以包含静态方法和默认方法(Java 8及以上版本)。 #### 1.12 面向对象设计61点经验原则 面向对象设计的原则是指导软件工程师设计高...
类是创建对象的模板,定义了一组属性(数据成员)和方法(成员函数)。对象则是类的实例,具有类定义的属性和行为。在Java中,我们使用`class`关键字来定义类。 ```java public class Car { String brand; int ...
【Java JDBC 访问数据库】 Java JDBC (Java Database ...Java提供了不同的GC策略和垃圾收集器,如Serial、Parallel、CMS和G1等,以适应不同性能需求的应用场景。开发者可以通过配置JVM参数来调整GC的行为。
**答案:** Java 的垃圾回收机制(Garbage Collection, GC)是一种自动内存管理机制,用于跟踪和释放不再使用的对象所占用的内存空间。Java 的虚拟机(JVM)会在适当的时候自动触发垃圾回收过程,从而避免了手动释放...
Java 监视器模式(Java Monitor Pattern)是一种用于多线程环境中的设计模式,它主要依赖于Java语言的同步机制,如`synchronized`关键字和`wait()`, `notify()`等方法,来确保线程安全和资源的有序访问。在Java中,...
- 创建对象:newInstance()方法和Constructor的使用。 - 访问成员:获取和设置字段,调用方法。 7. **网络编程** - Socket编程:客户端和服务器端的建立连接,数据传输。 - HTTP协议:理解GET和POST请求,以及...
使用FileOutputStream、PrintStream等流对象时,务必记得在完成操作后调用close()方法关闭流,否则资源无法释放。确保在finally块中关闭流,以防止异常情况下未关闭流。 5. **监听器**: 添加到系统偏好或其他...
12. abstract class 可包含抽象方法和具体方法,可以有构造器,支持继承。interface 只能包含抽象方法和常量,不允许有实现,支持多继承。 13. GC (Garbage Collector) 是垃圾收集器,负责自动回收不再使用的对象...
重写`equals()`、`hashCode()`和`toString()`等方法是Java编程中的常见实践。这些方法用于比较对象的相等性、计算对象的哈希码以及返回对象的字符串表示。正确实现这些方法可以增强类的功能性和互操作性。例如,`...
Java9垃圾回收方法中的finalize()方法是一个特殊的方法,它是Object类中的方法,用于在类被GC回收时做一些处理操作。finalize()方法的主要作用是释放对象占用的资源,例如关闭文件、释放Socket等。但是,finalize()...
不过,从给出的部分来看,这是一个关于类继承和方法重写的示例。 **总结:** 以上是对给定文件中部分知识点的详细解析,涵盖了Java语言的基础概念、异常处理、数据结构、Web开发等方面。希望这些解析能够帮助理解和...
`HashMap`通过调用对象的`hashCode()`方法来获取该值,然后使用该值进行存储和查找。 - **冲突解决:** 如果两个不同的对象具有相同的哈希码,则会发生哈希冲突。`HashMap`使用链地址法解决冲突,即多个相同哈希码...