@frank-shaw
2015-10-29T02:56:18.000000Z
字数 1171
阅读 2226
java.多线程
/** 此程序的目的在于测试一个电脑最多允许执行的线程数** 在本电脑上,最终执行数量为29546,最终死机** 电脑参数:CPU:i5 RAM:4G** 设置JVM的内存参数以及查看JVM的可执行的内存多少* 可以查看http://www.iteye.com/problems/54114* 里面有详细解释。** 可以给Java虚拟机设置使用的内存,但是如果你的选* 择不对的话,虚拟机不会补偿。可通过命令行的方式* 改变虚拟机使用内存的大小。如下表所示有两个参数* 用来设置虚拟机使用内存的大小。* 参数描述* -Xms JVM初始化堆的大小* -Xmx JVM堆的最大值** 更多可以参考这篇文章:* http://blog.csdn.net/fenglibing/article/details/5488494** 通过编程检测,发现分配给JVM的内存大小是892M。** 回到我们的问题:一共可以得到多少个线程。基本上可以得到:* (JVM能够被分配到的内存总数-已经使用的内存数)/线程栈大小吧*** 那么,另一个问题来了,Java线程数量与CPU个数的关系是什么?* 答案是无法确定。不同情况下的多线程与CPU的关系不同,比如IO密集型* 与计算密集型的线程之间都有不同的关系。我感觉这个已经涉及到了* 分布式方面的知识了。可以终止了。*/public class ThreadMax {static int i =0;public static void main(String[] args) {// TODO Auto-generated method stub/** 检测可以运行的线程最大数量*//*for(; ; i++){new Thread(new Runnable(){@Overridepublic void run() {while(true){try{Thread.sleep(20);}catch(Exception e){e.printStackTrace();}System.out.println("线程数:"+i);}}}).start();}*//** 检测JVM被分配内存的大小*/// System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);// System.out.println(Runtime.getRuntime().totalMemory()/1024/1024);// System.out.println(Runtime.getRuntime().freeMemory()/1024/1024);/** 检测每一个线程的线程栈的大小,竟然不成功。。。只能通过指令来查找*/System.out.println(Thread.currentThread());}}
