(系统剩余内存 - 最大堆容量Xmx - 最大方法区容量MaxPermSize)/ 最大栈空间Xss
4G的服务器单个进程可以开大概5000个线程。
操作系统分配给每个进程的内存大小是有限制的,比如32位的Windows是2G。因此操作系统对一个进程下的线程数量是有限制的,不能无限的增多。经验值:3000-5000左右
线程多了,就会有线程切换,带来性能开销。
jvm堆越大,系统创建的线程数量越小。
当-Xss的值越小,可生成线程数量越多。
//每个线程栈的大小
-Xss=128K
线程池大小
CPU 密集型应用,线程池大小设置为 N + 1
IO 密集型应用,线程池大小设置为 2N
线程池大小 = ((线程 IO time + 线程 CPU time )/线程 CPU time ) X CPU数目
corePoolSize:线程池的大小,当刚开始创建线程池时,线程数为0,当线程池中线程数量多于corePoolSize时会存于缓存队列
ArrayBlockingQueue:基于数组的先进先出队列,此队列创建时必须指定大小
LinkedBlockingQueue:基于链表的先进先出队列,如果创建时没有指定此队列大小,则默认为Integer.MAX_VALUE
synchronousQueue:这个队列比较特殊,它不会保存提交的任务,而是将直接新建一个线程来执行新来的任务
maxinumPoolSize:线程池容纳的最多线程数量
keepAliveTime:空闲线程的存活时间,一般情