java 啥资源需要手动释放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 啥资源需要手动释放相关的知识,希望对你有一定的参考价值。

最好能结合原因来谈一谈,满意的可加分

To:mhoudg
按你这么说,垃圾回收还有什么用。

1、文件流要释放
2、数据库连接资源要释放
3、在结合使用hibernate时,session要释放

在使用的时候,java的垃圾回收一般不用手动释放,但是可以调用方法进行调用以实现垃圾回收,在某种特定情况下会使用到
参考技术A 1、文件流要释放
2、数据库连接资源要释放
3、在结合使用hibernate时,session要释放
在使用的时候,java的垃圾回收一般不用手动释放,但是可以调用方法进行调用以实现垃圾回收,在某种特定情况下会使用到
参考技术B 内存资源什么都不需要手动释放

数据库链接一类的当然必须要释放

原因?
原因就是JAVA虚拟机直接控制了内存的回收
所以不需要主动回收(也不可能主动回收)

数据库链接一类的,包括文件操作,这种链接也是手动建立的,也必须手动释放
因为JAVA虚拟机不会帮忙回收这些东西的,因为不知道什么时候需要什么时候不需要了

PS:mhoudg你有方法强制让JAVA虚拟机回收内存?
参考技术C 几乎所有资源都要手动释放
只有内存可以在一定程度上垃圾回收,但是还是有循环引用之类的情况可能造成内存泄露
所以是不是要手动释放与资源类型无关,可以认为所有硬件资源都要手动释放的
内存也是只有在确定会被GC回收的情况下,才可以不用明确写释放代码
参考技术D 打开的文件要释放
打开的数据库连接要释放

java 怎么手动释放数组

我申请了一个数组

byte[] tbytes = new byte[100];

需要在特定的时候手动释放他,给他从新分配空间,新空间和原来的大小是不一样的,
比如需要:
delete tbytes;
tbytes = null;
tbytes = new byte[200];

在java里该怎么实现?貌似没有delete

java当中数组是不需要手动释放的,底层有自动回收垃圾的机制,扩展如下:
前一次循环结果如果没有被引用,那么会等待被自动释放,如果被引用,则不释放。
String[] str2=new String[500];
意思是每次循环都重新定义,并且重新赋值为新创建的数组对象,而上次循环所声明的变量以及所创建的数组对象都被列入自动回收列表了。
参考技术A java没有提供直接操作内存的api。只能期待内存回收机制了。当那块内存地址没有任何引用的指向它的时候,就会被回收。。。理论上是这样。你直接tbytes = new byte[200];就可以了。 参考技术B JVM会自动回收被置为null的对象
你在不使用该数组的时候将其置为null
JVM就会自动回收了
当然,你可以再加上一句System.gc();
提醒JVM强制回收垃圾
参考技术C tbytes = null 就可以了

gc会自动收拾的本回答被提问者采纳

以上是关于java 啥资源需要手动释放的主要内容,如果未能解决你的问题,请参考以下文章

为啥 io类的资源,在使用完后,需要进行释放

Creator 自动释放资源总结

在 C 中释放内存需要啥?

java 怎么手动释放数组

如何手动释放一个java线程占用的资源

java中一个线程啥时候释放资源啊?问题补充中是我情况的说明.