java 怎么手动释放数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎么手动释放数组相关的知识,希望对你有一定的参考价值。
我申请了一个数组
byte[] tbytes = new byte[100];
需要在特定的时候手动释放他,给他从新分配空间,新空间和原来的大小是不一样的,
比如需要:
delete tbytes;
tbytes = null;
tbytes = new byte[200];
在java里该怎么实现?貌似没有delete
前一次循环结果如果没有被引用,那么会等待被自动释放,如果被引用,则不释放。
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线程占用的资源
我做一个聊天软件 我双击一个好友头像时 执行一个线程 弹出一个窗口 线程里 run方法是用来接收信息的,但是当我把当前窗口关掉想再一次打开时,却提示端口被占用
我找到了地方是上一个窗口弹出的时执行的线程里面占用着10000这个端口 我没有停掉上一个窗口的线程,所以上一个窗口占用的那个10000的端口没有释放掉
那么请问大神们 如何手动停止线程,并且释放掉run方法里面占用的端口
因为run方法里面有DatagramSocket类的receive方法,这个是阻塞式的没有接受到信息就不会往下执行,所以所占用的端口没有释放掉
大神们 要如何释放掉哇?
public void run()
try
while(true)
DatagramSocket ds=new DatagramSocket(10000);
byte buffer[]=new byte[1024*64];
DatagramPacket dp=new DatagramPacket(buffer,buffer.length);
System.out.println("OK1");
ds.receive(dp);
System.out.println("OK2");
String mess=new String(dp.getData(),0,dp.getLength());
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss ");
String str=sdf.format(d);
recArea.append(str+"\n");
recArea.append(mess+"\n");
ds.close();
catch(Exception e)
System.out.println(e.getMessage());
线程里面的run方法
就是 DatagramSocket ds=new DatagramSocket(10000);这句占用着10000端口没有释放掉
以上是关于java 怎么手动释放数组的主要内容,如果未能解决你的问题,请参考以下文章