1. A computer-implemented method executed by one or more processors, the method comprising: receiving, by one or more processors, source code of an application comprising a plurality of objects; providing, by the one or more processors, an intermediate code based on the source code, the intermediate code being executable to identify creation and destruction of the plurality of objects and comprising at least one instruction for profiling at least one object of the application by providing at least one of a count of all loads/stores of memory allocations and a mapping of each load/store operation of the at least one object; providing, by the one or more processors, a statistics file by processing the intermediate code based on a memory profiling library that maintains a splay tree, in which each node of the splay tree stores statistics on a respective object, the statistics file comprising records of memory access statistics for each of the plurality of objects; processing, by the one or more processors, the statistics file based on a plurality of models to provide a list of objects, the list of objects identifying types of memory respective objects should be stored to in a hybrid main memory system; and storing, by the one or more processors, modified source code that is provided based on the source code and the list of objects.