1
3
所以脚本一直读取和存储字节,直到看到0xff。 这似乎是个有缺陷的设计。无论如何调优JVM,最终都可能耗尽内存。如果远程服务选择在0xff之前发送peta字节的deta,那么您将耗尽内存。我的看法是,你应该总是假设另一个参与者可能是坏的或反社会的。
底线:清理你的输入。允许外部进程耗尽内存是件坏事。当他们说“这不可能发生”时,不要相信他们。 |
2
1
|
3
1
实际上是来自套接字的数据导致了OutofMemory吗? 如果您使用的是Java6,请使用jconsole连接到服务器并查看堆。 |
4
0
如果你看了合同,
因此,如果流不具有0xff字符(例如,如果流在接收0xff之前结束),则此代码将永远将接收到的最后一个字节(例如-1)附加到该数组中! 如此固定:
//---其他问题 当然,您应该为这段代码设置一个上限以避免OOM,但您遇到的具体问题是
这将创建一个ArrayList,这是一个以数组为基础的数据结构,它从分配一个数组开始,每次达到以前的容量时,它的大小都会增加一倍。我相信默认大小只有10个元素。 因此,您在这里隐式地创建了大量数组,这就是堆栈跟踪的混乱所抱怨的。在一个高性能的应用程序中,消息大小适中,为数不多的K到M,分配新数组的速度很可能比GC所能达到的速度还要快。
|