Java代码  

publicclassMaxThreadsTest {

publicstaticvoidmain(String[] args) {

while(true) {

newThread(newA()).start();

if(A.eflag.get()){

return;

}

}

}

}

classAimplementsRunnable {

staticAtomicInteger counts =newAtomicInteger(0);

staticAtomicBoolean eflag =newAtomicBoolean(false);

@Override

publicvoidrun() {

try{

intx = counts.getAndIncrement();

if(x%200==0)

System.out.println("conts: "+ A.counts);

Thread.sleep(30000);

}catch(InterruptedException e) {

eflag.set(true);

e.printStackTrace();

}

}

}

public class MaxThreadsTest {

public static void main(String[] args) {

while (true) {

new Thread(new A()).start();

if(A.eflag.get()){

return;

}

}

}

}

class A implements Runnable {

static AtomicInteger counts = new AtomicInteger(0);

static AtomicBoolean eflag = new AtomicBoolean(false);

@Override

public void run() {

try {

int x = counts.getAndIncrement();

if(x 0==0)

System.out.println("conts: " + A.counts);

Thread.sleep(30000);

} catch (InterruptedException e) {

eflag.set(true);

e.printStackTrace();

}

}

}

Java代码  

-Xms16M -Xmx32M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts:1801

Exception in thread"main"java.lang.OutOfMemoryError: unable to createnewnativethread

-Xms32M -Xmx64M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts:1801

Exception in thread"main"java.lang.OutOfMemoryError: unable to createnewnativethread

//把Xmx设大可以建立的线程数反而变小,这是个很奇怪的事情:

-Xms64M -Xmx128M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts:1601

Exception in thread"main"java.lang.OutOfMemoryError: unable to createnewnativethread

//把Xmx设大可以建立的线程数反而变小,这是个很奇怪的事情:

-Xms128M -Xmx256M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts:1601

Exception in thread"main"java.lang.OutOfMemoryError: unable to createnewnativethread

//把Xss设小有惊人效果:

-Xms16M -Xmx32M -Xss128K -XX:+HeapDumpOnOutOfMemoryError

conts:13401

Exception in thread"main"java.lang.OutOfMemoryError: unable to createnewnativethread

-Xms16M -Xmx32M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts: 1801

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

-Xms32M -Xmx64M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts: 1801

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

//把Xmx设大可以建立的线程数反而变小,这是个很奇怪的事情:

-Xms64M -Xmx128M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts: 1601

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

//把Xmx设大可以建立的线程数反而变小,这是个很奇怪的事情:

-Xms128M -Xmx256M -Xss1M -XX:+HeapDumpOnOutOfMemoryError

conts: 1601

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

//把Xss设小有惊人效果:

-Xms16M -Xmx32M -Xss128K -XX:+HeapDumpOnOutOfMemoryError

conts: 13401

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread

以上是在eclipse里测试的。

在windows下直接测试有明显不同。

java MaxThreadsTest -Xms16M -Xmx32M -Xss1M

java MaxThreadsTest -Xms64M -Xmx128M -Xss1M

无论怎么设置都在5401后结束。

我对JVM的了解基本为0,所以也分析不出原因。

请大家帮我看看,这是怎么回事,不是说Xmx越大、Xss越小,则线程数越多么?

被移到问答区里了,这么低的悬赏,能有人关注吗?

没办法了,就这么点钱啦……………………………………………………………………

2010-12-17 flootball (高级程序员)

你的操作系统的内存是多少?

在java中每new一个线程,jvm都是向操作系统请求new一个本地线程,此时操作系统会使用剩余的内存空间来为线程分配内存,而不是使用jvm的内存。这样,当操作系统的可用内存越少,则jvm可用创建的新线程也就越少。

java 线程栈空间_java线程的内存不包含在JVM堆与栈中相关推荐

  1. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

    理解堆与栈 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 ...

  2. java线程池功能_Java线程池总结

    一.线程池 线程池适合处理的任务:执行时间短.工作内容较为单一. 合理使用线程池带来的好处: 1)降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的开销 2)提高响应速度:当任务到达时,任务可 ...

  3. java 同步转并行_Java线程与并行编程(二)

    你好,我是goldsunC 让我们一起进步吧! 线程的控制与同步 线程的状态与生命周期 '每个Java程序都有一个默认的主线程,想要实现多线程,必须在主线程中创建新的线程对象.新建的线程在它的一个完整 ...

  4. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

  5. java 线程 状态 图_Java线程中的生命周期和状态控制图文详解

    这篇文章主要介绍了Java线程的生命周期和状态控制,需要的朋友可以参考下 一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于 ...

  6. java线程不执行_java线程池,阿里为什么不允许使用Executors?

    带着问题 阿里Java代码规范为什么不允许使用Executors快速创建线程池? 下面的代码输出是什么? ThreadPoolExecutor executor = new ThreadPoolExe ...

  7. java线程详解_Java线程详解

    程序.进程.线程的概念程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是正在运行的一个程序.动 ...

  8. java 线程的销毁_Java 线程(1)- 创建与销毁

    Java 采用 thread-per-task 的线程模型,即一个任务(一段代码)对应一个 Java 线程(thread),而一个 Java 线程对应一个操作系统线程,所以了解一些操作系统进程的管理知 ...

  9. java io密集型任务_Java线程池讲解——针对IO密集型任务

    sap java开发技术详解&mdash基础 94.01元 (需用券) 去购买 > 针对 IO 密集型的任务,我们可以针对原本的线程池做一些改造,从而可以提高任务的处理效率. 基本 在阿 ...

最新文章

  1. java 线程组和线程_Java多线程 线程组原理及实例详解
  2. torch.view()
  3. JAVA类与对象(一)----基础概念理解
  4. sendRedirect的路径
  5. paip.提升用户体验------c++ 拖曳使用总结..
  6. 在内核中构造一个UDP 数据
  7. dht网络协议 服务器,概述DHT网络
  8. Google Ads关键词不展示原因及解决方案
  9. 计算机在饲养管理方面的应用,高新技术对奶牛业的应用
  10. 由内而外全面造就自己
  11. python元祖封包_python的封包与解包
  12. 术语-MOSS-微软协作工具:MOSS(微软协作工具)
  13. Justinmind使用教程(1)——概述部分
  14. 社区版pycharm的django创建app失败问题解决
  15. 哀其不幸,怒其不争!
  16. mysql统计分数段人数_mysql 按分数段,每个专业分数段统计人数
  17. 数据库基础知识:概念篇
  18. js字符串的拼接,用逗号隔开
  19. 为什么《王者荣耀》的音乐让人过耳不忘? 天美讲述游戏音频设计背后的故事
  20. Python分布式爬虫框架Scrapy实战

热门文章

  1. c#rs232与三菱通讯_MCGS 与 FX3U PLC 之间的无线通讯实例
  2. 计算机ftp无法找到启动路径,filezilla出现路径错误导致无法启动怎么办?filezilla无法启动的解决方法...
  3. tf.nn.conv2d()方法
  4. 日期格式校验方法工具
  5. github船舰新文件夹_mac下搭建hexo+github
  6. Idea中内置Translation插件报“翻译错误”,解决方式!!!
  7. github push报 Unable to access ‘https://github.com/xxxx/xxxx.git/‘: OpenSSL SSL_read: Connection was
  8. html获取鼠标按键数,鼠标在IE、Firefox和Opera点击键所对应的数字代码
  9. linux 输出gc日志,Tomcat输出保存JVM GC日志文件
  10. 数据双向绑定_手把手教你用JavaScript如何实现数据双向绑定