「java线程回收」线程回收函数

博主:adminadmin 2023-01-07 16:03:08 1127

今天给各位分享java线程回收的知识,其中也会对线程回收函数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中垃圾回收器让工作线程停顿下来是怎么做的?

1、jvm中,在执行垃圾收集算法时,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起。此时,系统只能允许GC线程进行运行,其他线程则会全部暂停,等待GC线程执行完毕后才能再次运行。这些工作都是由虚拟机在后台自动发起和自动完成的,是在用户不可见的情况下把用户正常工作的线程全部停下来,这对于很多的应用程序,尤其是那些对于实时性要求很高的程序来说是难以接受的。 但不是说GC必须STW(Stop-The-World,全局暂停), 你也可以选择降低运行速度但是可以并发执行的收集算法,这取决于你的业务。

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可移植对转储文件,没有根信息。对于这些转储,内存分析器解析程序将没有被其他根对象引用的对象标记为此类根对象。参考

请教java的线程池是如何回收线程的

工作线程回收需要满足三个条件:

1) 参数allowCoreThreadTimeOut为true

2) 该线程在keepAliveTime时间内获取不到任务,即空闲这么长时间

3) 当前线程池大小 核心线程池大小corePoolSize。

关于java线程回收和线程回收函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。