Even switching from &quot;copy and allocate objects everywhere&quot; to non-copying native IO can improve your memory efficiency and usability.<p>I am working on an Android app, and rewrote the part that handles the connection via a binary protocol over a socket with a remote server. Rewriting that to take advantage of NIO already improved connection times (build up a connection, initialize, etc) from almost 2 minutes to only 8 or 9 seconds. RAM usage of the backend was reduced by 50% – and it is easier readable.<p>More often than not it’s not that hard to add it, if one carefully thinks about the requirements and future extensions at every step.