[关闭]
@frank-shaw 2015-10-29T10:56:18.000000Z 字数 1171 阅读 1918

检测线程数量影响因素(代码实践)

java.多线程


  1. /*
  2. * 此程序的目的在于测试一个电脑最多允许执行的线程数
  3. *
  4. * 在本电脑上,最终执行数量为29546,最终死机
  5. *
  6. * 电脑参数:CPU:i5 RAM:4G
  7. *
  8. * 设置JVM的内存参数以及查看JVM的可执行的内存多少
  9. * 可以查看http://www.iteye.com/problems/54114
  10. * 里面有详细解释。
  11. *
  12. * 可以给Java虚拟机设置使用的内存,但是如果你的选
  13. * 择不对的话,虚拟机不会补偿。可通过命令行的方式
  14. * 改变虚拟机使用内存的大小。如下表所示有两个参数
  15. * 用来设置虚拟机使用内存的大小。
  16. * 参数描述
  17. * -Xms JVM初始化堆的大小
  18. * -Xmx JVM堆的最大值
  19. *
  20. * 更多可以参考这篇文章:
  21. * http://blog.csdn.net/fenglibing/article/details/5488494
  22. *
  23. * 通过编程检测,发现分配给JVM的内存大小是892M。
  24. *
  25. * 回到我们的问题:一共可以得到多少个线程。基本上可以得到:
  26. * (JVM能够被分配到的内存总数-已经使用的内存数)/线程栈大小吧
  27. *
  28. *
  29. * 那么,另一个问题来了,Java线程数量与CPU个数的关系是什么?
  30. * 答案是无法确定。不同情况下的多线程与CPU的关系不同,比如IO密集型
  31. * 与计算密集型的线程之间都有不同的关系。我感觉这个已经涉及到了
  32. * 分布式方面的知识了。可以终止了。
  33. */
  34. public class ThreadMax {
  35. static int i =0;
  36. public static void main(String[] args) {
  37. // TODO Auto-generated method stub
  38. /*
  39. * 检测可以运行的线程最大数量
  40. */
  41. /*for(; ; i++){
  42. new Thread(new Runnable(){
  43. @Override
  44. public void run() {
  45. while(true){
  46. try{
  47. Thread.sleep(20);
  48. }catch(Exception e){
  49. e.printStackTrace();
  50. }
  51. System.out.println("线程数:"+i);
  52. }
  53. }
  54. }).start();
  55. }*/
  56. /*
  57. * 检测JVM被分配内存的大小
  58. */
  59. // System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);
  60. // System.out.println(Runtime.getRuntime().totalMemory()/1024/1024);
  61. // System.out.println(Runtime.getRuntime().freeMemory()/1024/1024);
  62. /*
  63. * 检测每一个线程的线程栈的大小,竟然不成功。。。只能通过指令来查找
  64. */
  65. System.out.println(Thread.currentThread());
  66. }
  67. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注