本人写了一个多线程的端口扫描应用程序,这个本来是在公司的电脑上跑得,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编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多线程是实现并发处理的关键技术,尤其在服务器端应用和高性能计算中不可或缺。 ...
3. Semaphore:信号量,用于限制同时访问某个资源的线程数量。 4. Executors框架:提供线程池服务,有助于管理和控制线程的生命周期。 六、线程优先级 Java中的线程优先级由Thread类的静态常量定义,如MIN_PRIORITY...
Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...
在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车运行或者交通系统的一个小型示例。 在Java中,创建线程主要有两种方式:继承`Thread`类和实现`...
Java多线程多人聊天系统是一种基于网络通信的软件应用,它允许多个用户同时进行实时交流。这个系统的核心在于利用Java的多线程技术来处理并发的用户交互,确保每个用户的输入和输出都能得到及时响应,不会因为其他...
Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。...通过阅读《java多线程设计模式》这本书,你可以深入理解这些概念,并学习到更多实际应用的案例。
最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...
### Java多线程编程经验 #### 一、Java线程:概念与原理 现代操作系统都是多任务操作系统,其中多线程是一种重要的实现多任务的方式。...掌握这些基本概念和技术对于开发高效稳定的多线程应用程序至关重要。
对于大型分布式系统、Web应用以及任何需要处理大量并发请求的服务来说,深入理解和熟练掌握Java多线程是必要的。 一、线程的创建 Java提供了多种创建线程的方式,包括继承Thread类和实现Runnable接口。继承Thread类...
Java多线程是Java编程中一个非常重要的概念,它允许程序在同一时间执行多个任务,从而提高了应用程序的效率和响应速度。在操作系统中,程序被加载到内存中形成进程,而进程中的执行单元就是线程。Java多线程的实现...
Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类或者实现`Runnable`接口。这个压缩包文件"JAVA多...
综上所述,Java多线程下载图片涉及到的知识点包括线程的创建与管理、并发控制、异常处理、IO操作、线程同步、资源管理以及用户界面的更新等,这些都是构建高效、健壮的多线程应用所必需的技能。
掌握Java多线程技术对于设计高效的并发程序、充分利用多核处理器资源、提高应用程序的执行效率至关重要。本书《Java多线程核心技术》作为Java学习者的重要参考资料,详细讲述了多线程编程的基础知识、高级用法和最佳...
Java多线程是Java编程中的核心概念,尤其在开发高并发、高性能的应用程序时不可或缺。本书籍《JAVA多线程教材》显然会深入探讨这一主题,帮助开发者掌握如何有效地利用多核处理器,提高程序的执行效率。PDF格式的...
Java多线程技术是编程领域中的重要概念,尤其在开发高效、并发的网络应用程序时,如简易聊天程序,它的应用尤为关键。在这个“java 多线程简易聊天 精简版”项目中,我们将深入探讨Java如何实现多线程环境下的客户端...
Java多线程下载技术主要应用于提高大文件下载的效率,通过将文件分割成多个部分,同时启动多个线程分别下载这些部分,从而实现并行下载,加快下载速度。以下是对这个主题的详细解释: 1. **Java多线程基础**: 在...
在"java多线程编程实例_Source"这个压缩包中,你可能会找到以上各种概念的实例代码,通过学习这些代码,你可以更深入地理解Java多线程的实现和应用,提高自己的编程能力。记得实践是最好的老师,尝试运行和修改这些...
在Java编程中,多线程是一项关键特性,...总之,这个"JAVA多线程的一个带UI界面的例子"涵盖了Java多线程编程和GUI设计的核心概念,通过实际的代码示例,有助于开发者深入理解如何在实际应用中正确、高效地使用多线程。