CPU usage: ---------- ObjLoader.load() - ObjLoader.readLine() HDRLoader.writeRGBE() // need faster RGBE8 -> RGB16F conversion // OpenGL resource-intesive points Renderer.renderQueue() Renderer.setVertexAttrib() Material.apply() Memory usage: ------------- - OBJLoader Java's Scanner class allocates approx. 8 MB of memory to load the teapot model. Either implement ObjLoader without Scanner or create an import/export system! - AWTLoader Using AWT for loading images is slow and uses more memory than a home-grown loader. Use DDS and TGA formats more. - Shader.getUniforms This method generates a collection to represent the Uniforms in the shader and is used by Renderer.updateShaderUniforms() Need a faster method to iterate & update uniforms in a shader. - Material.apply Same thing as above. Generates a Collection and then an Iterator for a HashMap. First, consider if using a HashMap is neccessary..