淮安做网站.哪家网络公司好,可以用wpf做网站吗,鞍山招聘网站,天津特定网站建设推广首先要说明一点#xff0c;Java线程的实现是基于底层系统的线程机制来实现的,程序中开的线程并不全部取决于JVM虚拟机栈#xff0c;而是取决于CPU#xff0c;操作系统#xff0c;其他进程#xff0c;Java的版本。JVM的线程与计算机本身性能相关。以前写过一个例子#xf…首先要说明一点Java线程的实现是基于底层系统的线程机制来实现的,程序中开的线程并不全部取决于JVM虚拟机栈而是取决于CPU操作系统其他进程Java的版本。JVM的线程与计算机本身性能相关。以前写过一个例子统计可以开辟的线程数量通过不断的申请Thread最终会报错输出一个当前开辟线程的数量public class ThreadCount{private static Object obj new Object();private static int count 0;public static void main(String[] args){for(;;){new Thread(new Runnable(){public void run(){synchronized(obj){count 1;System.out.println(Thread #count);}for(;;){try {Thread.sleep(1000);} catch (Exception e){System.err.println(e);}}}}).start();}}}运行结果上传图片有点问题结果就不贴了每个人的机器结果都是不同的可以运行下。既然线程数量于计算机本身相关我们是不是不可调控是固定的呢答案显然不是的在不考虑系统本身限制的情况下主要跟JVM一下几点有关-Xms 初始堆大小 (在实际生产中一般把-Xms和-Xmx设置成一样的。)-Xmx 最大堆大小-Xss 每个线程栈大小结论1当给JVM的堆内存分配的越大系统可创建的线程数量就越少(可以通过上面测试程序不断的改变-Xmx-Xms的值观看最后异常时的线程数量)。这个如何理解呢很简单因为线程占用的是系统空间所以当JVM的堆内存越大系统本身的内存就越少自然可生成的线程数量就越少。结论2当-Xss的的值越小可生成的线程数量就越多。(一样可以通过上面测试保持-Xmx-Xms不变改变-Xss的值jdk5以下默认好像是256K以上默认为1M具体记不太清楚了)。这个理解也很简单线程可用空间保持不变每个线程占用的栈内存大小变小自然可生成的线程数量就越多。那么是不是不断加大可用内存线程数量也会不断增长呢这个当然不是上面我特意加粗了不考虑系统本省限制的情况所以说线程数量还与系统限制有关。主要跟一下几个参数有关(Linux下的)/proc/sys/kernel/pid_max 增大线程数量增大pid_max有最高值超过之后不再改变而且3264位也不一样/proc/sys/kernel/thread-max 系统可以生成最大线程数量max_user_process(ulimit -u)centos系统上才有没有具体研究/proc/sys/vm/max_map_count 增大数量增多总结线程最大数量由JVM的堆(-Xmx,-Xms)大小、Thread的栈(-Xss)内存大小、系统最大可创建的线程数的限制参数三个方面影响。不考虑系统限制可以通过这个公式估算线程数量 (机器本身可用内存 - JVM分配的堆内存) / Xss的值。以上均为个人观点有错误的还请指正请勿喷和谐和谐。