java.io 中不使用close()方法资源为何cg无法回收?

问题描述

java.io 中不使用close()方法资源为何cg无法回收?

如题,new FileInputStream()新建的文件流都必须要调用close()方法关闭,close方法的介绍是关闭和释放系统资源,并且如果未使用则会资源泄露。
但当指向 FileInputStream()对象的指针离开该对象,CG不是应该回收资源么,用new创建的对象都在栈中,为什么这个FileInputStream()不会自己回收呢?

解决方案

文件流对像不样,不是由虚拟机来掌握的。文件流一般申请的空间是直接到电脑内存去申请的。而一般对象是通过虚拟机的,所以虚拟机能掌握这些对象

解决方案二:

java-io File方法的使用

解决方案三:

对象只有没有指针指向的时候才可能被回收,但并不是马上就回收,而要看回收机制。

另外new出来的对象是放在堆中,指向对象的变量才放在栈里。

时间: 2024-11-03 13:52:12

java.io 中不使用close()方法资源为何cg无法回收?的相关文章

websphere7.0 :java.io.FileNotFoundException: JSPG0036E: 找不到资源 /login.jsp

问题描述 websphere7.0配置完一切后,部署好应用程序.服务器和应用程序启动都没有问题,正常启动,而且websphere上部署程序,我做过好几次,都是成功的.这次做的方法也是一样的,但是访问时,出现以下问题:JSPG0036E:找不到资源/login.jsp:代码粘贴如下:java.io.FileNotFoundException:JSPG0036E:找不到资源/login.jspatcom.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionP

java.io中的默认路径是jre所在磁盘根目录么

问题描述 java.io中的默认路径是jre所在磁盘根目录么 如题,File对象中写入相对路径,再显示绝对路径,发现在D:,代码如下.我的jre,eclipse和程序文件夹都在D盘下,但都不在根目录,不知是否java.io中的默认路径都是所在磁盘的根目录. static void p(String s) { System.out.println(s); } public static void main(String[] args) { // TODO Auto-generated method

Java线程中start和run方法全面解析_java

自定义线程两种方法 自定义一个runnable接口的实现类,然后构造一个thread,即对thread传入一个runnable接口类. new一个thread或者写个thread子类,覆盖它的run方法.(new 一个thread并覆盖run方法实际上是匿名内部类的一种方式) 示例代码 public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.

Java 业务中获得pojo列表方法 命名 用list*** 还是get***List

问题描述 Java业务中获得pojo列表方法命名用list***还是get***List这只是个命名习惯,但是每个人都有自己看法,我是喜欢get***List,因为这样直观,得到的是一个List,感觉前者是是没有返回值的.说说你们的观点以及理由觉得是不是应该以流行的java框架的命名为佳? 解决方案 解决方案二:这只是命名习惯而已,个人认为在同一个团队中只要命名方式一致即可,至于到底哪种更优,这个是没有标准的.所以一个团队的命名规范可能取决于第一任技术领导.后面所有人都遵守即可.解决方案三:这个

用Java集合中的Collections.sort方法如何对list排序(两种方法)_java

第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class User implements Comparable <user> { private String name; private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } publi

我的Java开发学习之旅------&amp;gt;Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法

今天用ObjectOutputStream和ObjectInputStream进行对象序列化话操作的时候,报了java.io.EOFException异常. 异常代码如下: java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554) at java.io.ObjectInputStream.readObject0(ObjectInputSt

在java.io中怎么实现文件内容的部分修改

问题描述 我只能全部读取,然后保存在list里面,然后对特定行修改,然后在全部写入,可是这么写,如果数据太多的话,就费时了,怎么实现部分修改啊?就是不对特定行以后的数据进行遍历,并且保证原有的未修改数据不被覆盖. 解决方案 使用java.io.RandomAccessFile,可以随机读取文件.

JAVA编程中串口通信的方法介绍

以前经常用C语言操作串口,实现一些发送接收之类的小功能,最近项目中也用到了串口通信,不过语言变成了Java,这个搞起来略蛋疼. Java说起来就是各种库各种引用,所以得到某些需求先google搜一把~~比如之前搞半天的读取网页内容,自己边琢磨边写,又是 charset,又是proxy,又是什么browsertype的,晕头转向,最后拿Jsoup一会儿就搞定了--不过使用之前要充分考虑可扩展性和 API的丰富程度,不然后面程序体积变大集成起来很蛋疼.好了废话不说,讲讲串口的问题-- 总述 Java

Java Thread中的属性和方法

手撸一次,加深印象,立此存照. ThreadB package demo.thread; public class ThreadB implements Runnable { public void run() { try { Thread.sleep(5000L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("This is thread B."); Thread curT