Sorry but this is still wrong on a number of counts.
I specifically mentioned system resources. For any non-trivial application, the mapping of authentication to sockets should be a miniscule part and it only applies if your application absolutely needs to use raw sockets. If you can use Websockets over https, the entire thing can be managed by the Servlet infrastructure (part of the Java standard) and you won't have to think about that at all.
GGP did not limit the scope to just system resources. System resources are usually not the issue anyway. Nobody says that an app is a "resource hog" because it left a few file descriptors open. They say it's a resource hog because it's using 4GB of RAM to do nothing. The socket to user mapping is merely an example - you're supposed to extrapolate it to whatever use case you have.
You really don't need to think about interning strings. Any string constants in your code get automatically interned by the compiler (which is why you shouldn't use them as lock objects.) If you're really worried about saving a few bytes of memory, put your strings in a HashMap.
You absolutely should be thinking about this. I can tell you've probably never used Java Mission Control or similar, since it will outright show you how much memory is being wasted to duplicate strings. If you're, let's say, parsing XML files, you're going to see lots of small duplicate strings in the tag names. Same thing with a log parser, or anything else handling textual data. HTTP server? Yeah, you're gonna see a lot of similar strings in headers and such.
The reason you are thinking about memory when writing Java is that you are thinking of Java as a C/C++ variant with garbage collection. It's not. Java is it's own language.
No, I'm thinking about memory because I don't want my program to eat all of a user's RAM for no reason, or to inflate cloud bills because we have to allocate twice the RAM for JVM instances.
If you tried to write Lisp like it were an imperative language, you'd find it frustrating too. Same with JavaScript.
If you find yourself thinking about memory management in Java, you're probably approaching the problem wrong. Best to step back and reconsider than immediately blame the language.
Who says it's frustrating? Who says the language is the problem? Java code will typically use less memory than the equivalent in Python, JS, and other high-level languages. It packs objects' fields much more efficiently, and supports primitives. However, a bad programmer can still destroy that efficiency by thinking that they don't need to worry about memory. Just because the language handles garbage collection of unreachable objects doesn't mean you can just forget about memory usage.