Socket线程池,内存溢出

问题描述

最近在做一个网络通讯的项目,用的是Socket线程池,容器时jboss4.2.2。系统运行一段时间后老是出现内存溢出错误。我用jprofile监控发现垃圾回收老是只回收一点,下面是各个类的内存使用情况图(只截取了内存使用较大的类),哪位高手帮忙分析一下是什么地方内存泄露了。

时间: 2025-01-21 09:04:47

Socket线程池,内存溢出的相关文章

Java服务器端Socket线程池

import java.util.Vector; import java.net.*; import java.io.*; public class ThreadPool { public static final int MAX_THREADS = 100; public static final int MAX_SPARE_THREADS = 50; public static final int MIN_SPARE_THREADS = 10; public static final int

JVM内存区域与内存溢出异常

Java虚拟机在执行java程序时会把它所管理的内存会分为若干个不同的数据区域,不同的区域在内存不足时会抛出不同的异常. >>运行时数据区域的划分 (1)程序计数器 程序计数器(Program Counter Register)是一块比较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器: PCR为线程私有内存,程序计数器是唯一一个在Java虚拟机规范中没有规定任何OOM情况的区域. (2)方法区方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已

Socket网络编程学习笔记(6):使用线程池提高性能(完)

在前几篇介绍中,不论是服务端的侦听还是客户端的连接都是通过新建一个 线程去执行特定功能的.在这种情况下,一量有一个新客户端需要连接,则又得 创建新的线程,而当程序创建新线程时,往往需要大量的内部开销,这对程序的 性能有一定的影响.在.NET库中提供了一种方法,可以避免一些开销.而在 Socket通讯中还有另一种访求那就是异步Socket,我不知道用这种方式的性能如 何,在这里且不管这种形式,主要来看一下用线程池解决问题. Windows操作系允许用户维持一池"预先建立的"线程,这个线程

如何用java线程池和socket实现群聊和私聊,求大神指教

问题描述 如何用java线程池和socket实现群聊和私聊,求大神指教 刚学习完javaSE,需要做一个小小的聊天软件,需要实现私聊和群聊的功能:本人觉得应当使用线程池和socket.IO流来实现,但不知道怎么做?求各位大神给点意见,不胜感激~ 解决方案 http://download.csdn.net/detail/z344310362/7579373 解决方案二: 群聊就是把消息发到一个聊天室,,私聊直接通过服务端发送给个人就行了 解决方案三: 我给你一个java聊天软件的参考吧:java聊

线程池实现socket 通信问题,不能长时间运行。

问题描述 1.创建一个监听import java.io.IOException;import java.net.*;import java.util.concurrent.Future;public class Listener extends ServerSocket implements Runnable {public Listener() throws IOException {super(Server.AppConfig.getLocalhost().getListenport());

java解析xml文件多个线程同时访问时内存溢出

问题描述 java解析xml文件多个线程同时访问时内存溢出,代码如下:解析的xml文件大小大概2M-10M,该怎么解决呢? String sourceFile = ConfigReader.get("data.store.path") + article.getSourceFile();org.dom4j.Document document = null;FileInputStream fin = null;try {fin = new FileInputStream(new File

线程池 java socket服务器基础

可以用类似 while(true)input.readByte()来想得到客户端发送过来的数据. 用output的writeByte来像客户端发送数据. 服务器的socket是通过serverSocket.accept()方法来产生的. 用这个类实现线程池. 看例子,如下代码实现的功能很简单,就是客户端发送一个字节,服务器读到客户端发送的数据后打印它.    代码如下 复制代码 import java.io.DataInputStream; import java.io.DataOutputSt

论Java Web应用中调优线程池的重要性_java

不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求.线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的.本文主要介绍Java线程池的使用和如何正确的配置线程池. 单线程 我们先从基础开始.无论使用哪种应用服务器或者框架(如Tomcat.Jetty等),他们都有类似的基础实现.Web服务的基础是套接字(socket),套接字负责监听端口,等待TCP连接,并接受TCP连接.一旦TCP连接被接受,即可从新创建的TCP连接中读取和发送数据. 为了能够理解上述流

Java内存溢出的详细解决方案

一.内存溢出类型 1.java.lang.OutOfMemoryError: PermGen space JVM管理两种类型的内存,堆和非堆.堆是给开发人员用的上面说的就是,是在JVM启动时创建:非堆是留给JVM自己用的,用来存放类的信息的.它和堆不同,运行期内GC不会释放空间.如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context