@frank-shaw
2015-10-29T10:56:18.000000Z
字数 1171
阅读 1938
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(){
@Override
public 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());
}
}