`
fjguodong
  • 浏览: 39793 次
社区版块
存档分类
最新评论

java多线程应用的线程数量限制

    博客分类:
  • Java
 
阅读更多

    本人写了一个多线程的端口扫描应用程序,这个本来是在公司的电脑上跑得,4G内存,再加4G虚拟内存(内存交换空间),xp系统。在公司跑得时候还好好的,但是一拷贝到自己的电脑上跑的时候,结果发生了问题。 

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (allocation.cpp:211), pid=15656, tid=7948
#
# JRE version: 6.0_45-b06
# Java VM: Java HotSpot(TM) Client VM (20.45-b01 mixed mode, sharing windows-x86 )

 ------------------------------------------------下面是用google翻译的

#有针对Java运行环境继续内存不足。
#本机内存分配(malloc的)未能分配ChunkPool32756字节:分配
#可能的原因:
#该系统是出了物理RAM或交换空间
#在32位模式下,进程大小限制被击中
#可能的解决方案:
#减少内存系统上的负载
#增加物理内存或交换空间
#检查交换后备存储已满
#使用64位操作系统上的64位Java
#减少Java堆大小(-Xmx/-Xms)
#减少Java的线程数
#减少Java线程堆栈大小(- XSS)**********
#设置更大的代码缓存使用- XX:ReservedCodeCacheSize=
#这个输出文件可能被截断或不完整的。

#内存不足的错误(allocation.cpp:211),PID=3696,TID=3704

#JRE版本:6.0_26- B03
#Java虚拟机:的Java HotSpot(TM)客户端虚拟机(20.1- B02混合模式,共享窗口- X86)

----------------------------------------------------

 

针对这个问题,从网上找到了一个有关的解决办法:

-----------------------------------------------------------------------------------------

下面是摘抄网上关于JVM线程堆栈的相关内容:

JVM线程堆栈

 应用程序中的每个线程都需要内存来存储器堆栈(用于在调用函数时持有局部变量并维护状态的内存区域)。每个 Java 线程都需要堆栈空间来运行。

 根据实现的不同,Java 线程可以分为本机线程和 Java 堆栈。除了堆栈空间,每个线程还需要为线程本地存储(thread-local storage)和内部数据结构提供一些本机内存。

 

JVM堆栈大小

-Xss 128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆 栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。

在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一 个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 

JVM heap与JVM私有内存、JVM线程堆栈大小间的关系及平衡。

线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时

时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会

出现内存溢出的错误.

-----------------------------------------------------------------------------------------

本人为了减少端口扫描所花费的时间,将线程的数量设置成了5000,在公司的电脑上跑得时候由于内存的数量足够多,而本人机子的内存不够分配,导致了上述的错误。将线程数改成3000后就没有了上面的错误。

 

多线程的应用中,最好不要分配超过3000个的线程。

分享到:
评论

相关推荐

    Java多线程技术精讲

    Java多线程技术是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...

    java多线程示例

    3. Semaphore:信号量,用于限制同时访问某个资源的线程数量。 4. Executors框架:提供线程池服务,有助于管理和控制线程的生命周期。 六、线程优先级 Java中的线程优先级由Thread类的静态常量定义,如MIN_PRIORITY...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...

    java多线程小汽车运行程序

    在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车运行或者交通系统的一个小型示例。 在Java中,创建线程主要有两种方式:继承`Thread`类和实现`...

    java多线程多人聊天系统

    Java多线程多人聊天系统是一种基于网络通信的软件应用,它允许多个用户同时进行实时交流。这个系统的核心在于利用Java的多线程技术来处理并发的用户交互,确保每个用户的输入和输出都能得到及时响应,不会因为其他...

    java多线程文件传输

    Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。...通过阅读《java多线程设计模式》这本书,你可以深入理解这些概念,并学习到更多实际应用的案例。

    Java 模拟线程并发

    最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...

    Java多线程的总结

    对于大型分布式系统、Web应用以及任何需要处理大量并发请求的服务来说,深入理解和熟练掌握Java多线程是必要的。 一、线程的创建 Java提供了多种创建线程的方式,包括继承Thread类和实现Runnable接口。继承Thread类...

    Java多线程.pdf

    Java多线程是Java编程中一个非常重要的概念,它允许程序在同一时间执行多个任务,从而提高了应用程序的效率和响应速度。在操作系统中,程序被加载到内存中形成进程,而进程中的执行单元就是线程。Java多线程的实现...

    JAVA多线程模式高清版+DEMO

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。这个压缩包文件"JAVA多...

    java多线程下载图片

    综上所述,Java多线程下载图片涉及到的知识点包括线程的创建与管理、并发控制、异常处理、IO操作、线程同步、资源管理以及用户界面的更新等,这些都是构建高效、健壮的多线程应用所必需的技能。

    Java多线程编辑核心技术

    掌握Java多线程技术对于设计高效的并发程序、充分利用多核处理器资源、提高应用程序的执行效率至关重要。本书《Java多线程核心技术》作为Java学习者的重要参考资料,详细讲述了多线程编程的基础知识、高级用法和最佳...

    JAVA多线程教材

    Java多线程是Java编程中的核心概念,尤其在开发高并发、高性能的应用程序时不可或缺。本书籍《JAVA多线程教材》显然会深入探讨这一主题,帮助开发者掌握如何有效地利用多核处理器,提高程序的执行效率。PDF格式的...

    java 多线程简易聊天 精简版

    Java多线程技术是编程领域中的重要概念,尤其在开发高效、并发的网络应用程序时,如简易聊天程序,它的应用尤为关键。在这个“java 多线程简易聊天 精简版”项目中,我们将深入探讨Java如何实现多线程环境下的客户端...

    java 多线程下载 (单文件)

    Java多线程下载技术主要应用于提高大文件下载的效率,通过将文件分割成多个部分,同时启动多个线程分别下载这些部分,从而实现并行下载,加快下载速度。以下是对这个主题的详细解释: 1. **Java多线程基础**: 在...

    java多线程源码-source

    在"java多线程编程实例_Source"这个压缩包中,你可能会找到以上各种概念的实例代码,通过学习这些代码,你可以更深入地理解Java多线程的实现和应用,提高自己的编程能力。记得实践是最好的老师,尝试运行和修改这些...

    JAVA多线程的一个带UI界面的例子

    在Java编程中,多线程是一项关键特性,...总之,这个"JAVA多线程的一个带UI界面的例子"涵盖了Java多线程编程和GUI设计的核心概念,通过实际的代码示例,有助于开发者深入理解如何在实际应用中正确、高效地使用多线程。

Global site tag (gtag.js) - Google Analytics