Java应用程序启动时,所有线程都有一个堆.每个线程都有自己的堆栈.
启动Java应用程序时,我们使用JVM选项-Xms并-Xmx控制堆的大小并-Xss控制堆栈大小.
我的理解是,正在创建的堆成为JVM的"托管"内存,所有正在创建的对象都放在那里.
但堆栈创建如何工作?Java是否在创建每个线程时为其创建堆栈?如果是这样,堆栈在内存上的确切位置?它肯定不在"托管"堆中.
JVM是否从本机内存创建堆栈,还是为堆栈预先分配了一部分托管内存区域?如果是这样,JVM如何知道如何创建线程?
我想知道,在java 1.6 x64中让许多线程处于等待状态是多么昂贵.
更具体地说,我正在编写跨越许多计算机的应用程序,并将数据从一个计算机发送到另一个计算机.我觉得为每台连接的机器和任务分别设置单独的线程感觉更舒服,例如1)发送数据,2)接收数据,3)删除时重新建立连接.因此,假设集群中有N个节点,则每台机器将为N-1个邻居中的每个节点设置3个线程.通常会有12台机器,它们来自33个通信线程.
这些线程中的大多数将在大多数时间处于休眠状态,因此出于优化目的,我可以减少线程数并为每个线程提供更多工作.比如,例如.重新建立连接是接收线程的责任.或者通过单线程发送到所有连接的机器.
因此,对于拥有许多睡眠线程是否有任何显着的性能影响?