As of memory requirements for texture loading, few revisions ago I added to DirectBufferedImage a method that can take existing byte of image data and construct an image basing on it.
Also to minimize memory usage you have to implement your own image loading mechanism instead of loading image in BufferedImage and after copying it into DirectBufferedImage like TextureLoader does:
ImageInputStream stream = ImageIO.createImageInputStream(imgData);
Iterator iter = ImageIO.getImageReaders(stream);
ImageReader reader = (ImageReader)iter.next();
ImageReadParam param = reader.getDefaultReadParam();
reader.setInput(stream, true, true);
int iw = reader.getWidth(0);
int ih = reader.getHeight(0);
BufferedImage dst = DirectBufferedImage.getDirectImageRGBA(iw, ih);
bi = reader.read(0, param);
This code is supposed to save for you up to twice memory during image loading procedure.
Also I am thinking about adding lazy texture loading to the core and renderer, so textures will reside only in video memory rather than in both video and system memory. This sometimes may reduce performance, but in other cases will reduce runtime memory usage.