澳门葡亰娱乐场手机版-澳门新葡亰手机娱乐网址


线程被回收_推荐答案

文章发布时间:2020-06-17 09:06:09
回收

Java线程是否会被垃圾回收

上面的例程运行结果是两个线程在程序被强制终止之前一直运行。threadisrunning…threadisrunning…threadisrunning…ExecutedSystem.gc(),WeakReferencestillkeepThread[Thread-0,5,main]threadisrunning…threadisrunning…threadisrunning…ExecutedSystem.gc(),WeakReferencestillkeepThread[Thread-0,5,main]threadisrunning…threadisrunning…

运行中的线程是称之为垃圾回收根对象的一种,不会被垃圾回收。当垃圾回收器判断一个对象是否可达,总是使用垃圾回收根对象作为参考点。

例如,主线程并没有被引用,但是不会被垃圾回收。

垃圾回收根对象是可在堆之外被访问的对象。一个对象可由于下列原因成为GC根对象:SystemClass

由自举/系统类加载器加载的类。例如,rt.jar中所有诸如java.util.*的类。

JNILocal

原生代码中的本地变量,例如用户定义的JNI代码或JVM内部代码。

JNIGlobal

原生代码中的全局变量,例如用户定义的JNI代码或JVM内部代码。

ThreadBlock

当前活跃的线程块中引用的对象。

Thread

启动且未停止的线程。

BusyMonitor

其wait()或notify()方法被调用,或被同步synchronized的对象。例如,通过调用synchronized(Object)或者进入其某个synchronized方法。静态方法对应类,非静态方法对应对象。

JavaLocal

本地变量。例如,仍在线程的栈中的方法输入参数或本地创建的对象。

NativeStack

(例如用户定义的JNI代码或JVM内部代码这样的)原生代码的入或出参数。通常发生在许多方法有原生部分,方法参数处理的对象成为GC根对象。例如,参数用于文件、网络I/O或反射。

Finalizer

在队列中等待其finalizer运行的对象。

Unfinalized

拥有finalize方法,但是还没有被终结且不在finalizer队列的对象。

Unreachable

从其他根对象不可达的对象,但是被内存分析器标记为根对象。

Unknown

没有根类型的对象。一些转储(dump),例如IBM可移植对转储文件,没有根信息。对于这些转储,内存分析器解析程序将没有被其他根对象引用的对象标记为此类根对象。参考

如何防止下载线程被回收

广播也很简单,你的服务的ondestory中加个判断Intent intent = new Intent(); intent.putExtras(bundle); intent.setAction("android.intent.action.update");// action与接收器相同 sendBroadcast(intent);然后在你的activity中加个自定义接收器进行接收public class MyReceiver extends BroadcastReceiver { // 自定义一个广播接收器 @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); } }用的时候要先注册:receiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.update"); registerReceiver(receiver, filter);用完了要释放,不然下次进入该 activity就会报错@Override protected void onDestroy() { unregisterReceiver(receiver); super.onDestroy(); } 查看原帖>>

线程会不会被gc回收

线程也会被回收啊。一般只要是不可用不可达的内存地址对象都可以被回收

Android Activity 销毁后线程会不会被GC回收

这个如果没有引用Activity的对象就可以被gc回收,否则,不会

…线程内有一个循环,可循环完毕很长时间后,线程依然没被回收…

这是JAVA的特性。循环结束后线程的确就死亡了,且无法再重新启动(当然,线程本身作为一个对象,此时还是可以调用它的方法)。而当线程死亡后,就是一个普通的对象,所占内存资源的回收是JAVA虚拟机的工作,所以的确可能很长时间后都没被回收。

继续阅读
XML 地图 | Sitemap 地图