Java守护程序线程是否与产生进程共享堆或Perm Gen?

Jos*_*ess 0 java heap multithreading daemon permgen

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

如果守护程序线程有自己的空间,那么在新线程的创建中是否遵守了最大堆大小等JVM内存调整算法?

Gra*_*ray 8

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

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

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

有关守护程序线程的真正含义的更多信息,请参阅@ Peter的答案.