Client.java size does not lagg your server.
I just worked this out. If you have 2000 players online, and your Client.java is 2MB (thats the biggest freakin thing ever, i doubt ANY server has one over 1MB)
(2000 players * 2MB = 4000MB) / 1024 = 3.9GB
The runescape servers probably have like 40GB RAM, and i doubt and server here has that many players anyway. What uses up your RAM is the "byte[] buffer". This is a byte[] used to store all information in until it it written out to the client once per 600ms. There may be up to 3 buffers, each being tens of thousands of bytes in size. Think, new byte[70000]. One for client.java, one for outStream, and one for inStream. Plus, a new one possibly even bigger for the players update block. Thats where your memory goes.
Things that cause lagg:
Process being large. It should be like maybe 20 lines max.
A bug in winterLove causes process to be repeated for EVERY packet sent. So if a player clicks 5 times in one cycle, it repeats process 5 times.
To many NPC's. They have to be processed just like players, and in winterLove, it checks like 50 ID's for every NPC for talking above their heads, and for fighting, e.c.t.
Bugged code.
This is the major thing. wL has tons of unnecessary code. Sometimes methods repeat over and over for no reason.
Large parseIncomingPackets() method.
If you click an object, it has to go through maybe 2-3k if statements to find the right object ID you clicked on.
wL is such a reused source for bases. there are so many things that you never even knew about in there. Try reading through client.java. 90% of it will be stuff never used, or used for no reason.
Maybe you guys can fix it now. All this doesn't mean wL is crap. Its a much reused source, thats collected junk over time. My own 317 and 474 servers are wL type, and they certainly don't have these type of issues.