For a while I've been wondering about which versions of Minecraft could support the most players whilst upholding a tolerable TPS. Since Minecraft's netcode is held up by popsicle sticks and glue with only 1 CPU core used to handle everything, I've decided to add a rule to this discussion:
I'd say up to 1.5.2 unless you are willing to include performance/bugfix mods (I often compare the performance of 1.6.4 to newer versions but 1.6.x does have a significant issue with zombie pathfinding causing lag, which I fixed in my own version. There is also an issue with saved structure data, mainly mineshafts, causing memory/lag issues on very large worlds (even some singleplayer worlds), which i also fixed by simply not saving it for mineshafts, as was also the case prior to 1.6.4).
If it supported multiplayer my own version/mod based on 1.6.4 would likely be best (among reasonably "modern" versions, presuming that e.g. Alpha/Beta were more lightweight; however, performance isn't just about how much content the game has); I see an average tick time of 1-2 milliseconds, out of a maximum of 50, so I could see it handling 25 or more players at once, with a memory allocation as low as 1 GB (at a view distance of 16 in singleplayer, with a total of 2178 chunks loaded, memory usage by loaded chunks, which is the majority of all memory used, was about 123 MB, including everything referenced by a chunk object, such as entities. The default server view distance is 10, loading 441 chunks, so about 5 players would load as many chunks on a dedicated server as overall in singleplayer at 16 chunks, and singleplayer also needs to handle additional data, such as rendering).
Of course, this would never be possible in newer versions; Mojang even increased the default memory allocation to 2 GB, which is pretty much all used, along with using experimental VM options (which may not be consistent across Java versions) to try to get the most out of it; I see people posting screenshots that show 10 times worse performance on more powerful hardware:
(this is a custom version based on my "TMCW engine" which is more or less vanilla, with the same code as TMCW but minus most of the new features TMCW adds, which has virtually no impact on performance/memory usage, as I'd expect based on VisualVM profiles showing loaded chunks using most of the memory, which is only a function of the amount of blocks/entities/etc loaded, not the number of unique things)
(a screenshot from somebody having performance issues in 1.15.2, at about the same settings (FPS limited to 80 but it is lower so it shouldn't have an effect), and less demanding considering what is being rendered and loaded, such as a jungle in the first screenshot. Most striking is the difference in memory usage; 232 vs 2253 used, 365 vs 3488 allocated)
Also, an archived Wiki page on dedicated server requirements from 2013 claims that you can have 2-4 players with as little as 256 MB of memory on a 300 MHz Pentium II CPU (these would be late 1990s specs); they also say that you can have 8-20 players on a 1.2 GHz Pentium III with 1 GB (I have no idea how realistic these are, 300 MHz seems incredibly low, considering that such old CPUs also had a lower IPC and with only a single core there is no room to accommodate things like garbage collection (done on a separate thread in modern VMs/GC types):
In addition, it is a myth that the game is still singlethreaded; as early as 1.8 they multithreaded dimensions and mob AI; 1.13 multithreaded world generation, and 1.14 multithreaded lighting, and possibly more; even older versions can benefit from multiple cores since there are various threads such as file I/O (the chunk loader is threaded) and garbage collection: