1. A method comprising: receiving, by a processing device, a request for a plurality of images from a rendering application providing a graphical user interface (GUI) for image scrolling, the rendering application executing in a high level language virtual machine (HLL VM) running on a mobile device; sequentially retrieving, by the processing device, the plurality of images from a disk of the mobile device using a fetching thread; decoding, by the processing device, the plurality of images using a plurality of decoding threads operating in parallel prior to the plurality of images being stored in a heap memory of the HLL VM, each of the plurality of decoding threads being executed by a distinct one of a plurality of processor cores of the mobile device; adding, by the processing device, decoded versions of the plurality of images to a first image cache in a native memory managed by an operating system of the mobile device; receiving, by the processing device, a request for a subset of the decoded versions of the plurality of images, the request being issued by the rendering application; and adding, by the processing device, the subset of the decoded versions of the plurality of images to a second image cache in the heap memory managed by the HLL VM, the subset of the decoded versions of the plurality of images to be presented by the rendering application in a user view of the GUI, the rendering application to request additional decoded versions of the plurality of images from the first image cache when a user scrolls through images presented in the user view.