java 线程栈空间_java线程的内存不包含在JVM堆与栈中
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堆与栈中相关推荐
- 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
理解堆与栈 导航 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 ...
- java线程池功能_Java线程池总结
一.线程池 线程池适合处理的任务:执行时间短.工作内容较为单一. 合理使用线程池带来的好处: 1)降低资源消耗:重复利用已创建的线程降低线程创建和销毁造成的开销 2)提高响应速度:当任务到达时,任务可 ...
- java 同步转并行_Java线程与并行编程(二)
你好,我是goldsunC 让我们一起进步吧! 线程的控制与同步 线程的状态与生命周期 '每个Java程序都有一个默认的主线程,想要实现多线程,必须在主线程中创建新的线程对象.新建的线程在它的一个完整 ...
- java方法生命周期_Java线程的第二种实现方式以及生命周期
上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...
- java 线程 状态 图_Java线程中的生命周期和状态控制图文详解
这篇文章主要介绍了Java线程的生命周期和状态控制,需要的朋友可以参考下 一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于 ...
- java线程不执行_java线程池,阿里为什么不允许使用Executors?
带着问题 阿里Java代码规范为什么不允许使用Executors快速创建线程池? 下面的代码输出是什么? ThreadPoolExecutor executor = new ThreadPoolExe ...
- java线程详解_Java线程详解
程序.进程.线程的概念程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是正在运行的一个程序.动 ...
- java 线程的销毁_Java 线程(1)- 创建与销毁
Java 采用 thread-per-task 的线程模型,即一个任务(一段代码)对应一个 Java 线程(thread),而一个 Java 线程对应一个操作系统线程,所以了解一些操作系统进程的管理知 ...
- java io密集型任务_Java线程池讲解——针对IO密集型任务
sap java开发技术详解&mdash基础 94.01元 (需用券) 去购买 > 针对 IO 密集型的任务,我们可以针对原本的线程池做一些改造,从而可以提高任务的处理效率. 基本 在阿 ...
最新文章
- java 线程组和线程_Java多线程 线程组原理及实例详解
- torch.view()
- JAVA类与对象(一)----基础概念理解
- sendRedirect的路径
- paip.提升用户体验------c++ 拖曳使用总结..
- 在内核中构造一个UDP 数据
- dht网络协议 服务器,概述DHT网络
- Google Ads关键词不展示原因及解决方案
- 计算机在饲养管理方面的应用,高新技术对奶牛业的应用
- 由内而外全面造就自己
- python元祖封包_python的封包与解包
- 术语-MOSS-微软协作工具:MOSS(微软协作工具)
- Justinmind使用教程(1)——概述部分
- 社区版pycharm的django创建app失败问题解决
- 哀其不幸,怒其不争!
- mysql统计分数段人数_mysql 按分数段,每个专业分数段统计人数
- 数据库基础知识:概念篇
- js字符串的拼接,用逗号隔开
- 为什么《王者荣耀》的音乐让人过耳不忘? 天美讲述游戏音频设计背后的故事
- Python分布式爬虫框架Scrapy实战
热门文章
- c#rs232与三菱通讯_MCGS 与 FX3U PLC 之间的无线通讯实例
- 计算机ftp无法找到启动路径,filezilla出现路径错误导致无法启动怎么办?filezilla无法启动的解决方法...
- tf.nn.conv2d()方法
- 日期格式校验方法工具
- github船舰新文件夹_mac下搭建hexo+github
- Idea中内置Translation插件报“翻译错误”,解决方式!!!
- github push报 Unable to access ‘https://github.com/xxxx/xxxx.git/‘: OpenSSL SSL_read: Connection was
- html获取鼠标按键数,鼠标在IE、Firefox和Opera点击键所对应的数字代码
- linux 输出gc日志,Tomcat输出保存JVM GC日志文件
- 数据双向绑定_手把手教你用JavaScript如何实现数据双向绑定