使用Spawning进程执行Java守护程序线程共享堆或Perm Gen



如果我从程序(非守护进程)创建一个守护进程线程,堆和perm-gen内存空间是与新线程共享还是重新分配?

如果守护进程线程有自己的空间,那么在创建新线程时是否考虑JVM内存调整参数(如最大堆大小等)?

堆和perm-gen内存空间是与新线程共享还是重新分配?

所有线程(守护进程状态无关紧要)共享堆和perm内存空间。每个线程都有自己的堆栈空间,用于存储方法字段和调用堆栈。您可以通过更改JVM参数来调整分配的每个线程堆栈空间的大小。但是,即使是这些堆栈区域也是通用JVM堆空间的一部分。

当线程在单独的CPU中运行时,它也有一个内存缓存。每CPU内存缓存的使用是出于性能原因,因此可以出于速度原因对本地CPU内存进行更新,而不必在每次访问时将信息同步到中央存储器。但是这些缓存仍然从通用JVM内存空间中读取和写入。

有关守护进程线程真正含义的更多信息,请参阅@Peter的回答。

守护进程线程和普通线程之间唯一的显著区别是它是否会阻止进程停止。一个正常的线程可以保持JVM的运行,而守护进程则不能。

精灵线程具有

  • 具有一个最大大小的相同堆
  • 同样的烫发剂也有一个最大尺寸
  • 相同的线程优先级
  • 使用相同数量的内存
  • 堆栈的最大大小相同

BTW:其他差异是迂腐的,

  • isDaemon()将返回true
  • 默认情况下,守护进程将创建守护进程线程
  • 将在线程转储中显示为守护进程

最新更新