java写的服务端 客户端程序,每有一个客户端登陆成功 就会生成一个类,10个就生成10个,n个会不会资源耗尽
用的多线程,是我理解上有问题吗?我是在bin里看到的,我做测试用登陆了n个账户,结果bin里出了很多clientsclass1,clientsclass2.......之...
用的多线程 ,是我理解上有问题吗?我是在bin里看到的,我做测试用 登陆了n个账户,结果bin里出了很多clientsclass1,clientsclass2.......之类的 。我就想啊 ,登陆的多了不就挂了吗
展开
1个回答
展开全部
Socket服务端要同时处理来自多个客户端的请求,当然需要开启对应的多个线程进行通信。
这是没问题的。
每当有新的Socket连接建立时,就会开立一个匿名线程类对象。
这时候确实会产生一个匿名内部类的。
就想你说的clientsclass$1\clientsclass$2
但是,会不会产生类爆炸呢?就是说类越来越多,导致java虚拟机占用的内存爆掉。
我想是不会的。jvm当然不会这么傻。
类加载之后,的确是回占据jvm的方法区内存的。这没错。
方法区一般不是垃圾回收处理的重点区域。但不代表不会回收。
当客户端断开连接之后。客户线程结束。线程对象没有了。对应的匿名类不再被使用,
这个类也是会被垃圾回收器回收掉的。
而且,一台主机能够同时应对的连接数是很有限的。
我相信你在担心产生5000个匿名内部类会不会让JVM爆掉的话。
不如去担心这台主机能不能同时处理5000个连接。。。
这是没问题的。
每当有新的Socket连接建立时,就会开立一个匿名线程类对象。
这时候确实会产生一个匿名内部类的。
就想你说的clientsclass$1\clientsclass$2
但是,会不会产生类爆炸呢?就是说类越来越多,导致java虚拟机占用的内存爆掉。
我想是不会的。jvm当然不会这么傻。
类加载之后,的确是回占据jvm的方法区内存的。这没错。
方法区一般不是垃圾回收处理的重点区域。但不代表不会回收。
当客户端断开连接之后。客户线程结束。线程对象没有了。对应的匿名类不再被使用,
这个类也是会被垃圾回收器回收掉的。
而且,一台主机能够同时应对的连接数是很有限的。
我相信你在担心产生5000个匿名内部类会不会让JVM爆掉的话。
不如去担心这台主机能不能同时处理5000个连接。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询