1)Il C++ permette la gestione diretta della memoria, in Java c'è il garbage collector che è automatico.Entrare nei dettagli e poter specificare come gestire la memoria è un vantaggio perché lo si fa nei momenti del gioco in cui c'è meno carico di "lavoro", mentre quando il processore e la scheda grafica "lavorano poco" per salvare le performance non si può deallocare la memoria, a meno che non sia strettamente necessario;
2)La prima cosa che devi sapere è OpenGL se vuoi partire dal basso, giusto per capire come funzionano le cose che poi farai con librerie più avanzate che derivano da OpenGL.Se vuoi passare direttamente al sodo ci sono DirectX e altre librerie che puoi trovare con una googlata;
3)Io per OpenGL ho il libro rosso, ma se vuoi passare direttamente al sodo con altre librerie anche questo lo risolvi con una googlata.