Information AboutMemory-footprint |
|
A program's memory footprint is ''the extent of main memory ( RAM space) that it uses or references while executing'' – this includes all sorts of active memory regions like code, static data sections (both initialized and uninitialized), heap, as well as all the stacks plus memory required to hold any additional data structures, such as symbol tables, constant tables, debugging structures, open files, etc., that the program ever needs while executing and will be loaded at least once during the entire run. Memory footprint will be larger depending the size of the program. Often it is not the program itself that makes up the entire footprint, but also involves structures introduced by the run-time environment, for e.g. a C++ compiler inserts vtables, type_info objects and lots of temporary and anonymous objects, which effectively occupy much of the footprint. In a Java program the footprint is predominantly due to objects, classes, and threads that the users create directly and Native data structures (like the constant-pool, the string-table, etc.), Native code, and the Virtual Machine (JVM) itself that are loaded indirectly by the user. In the first days of computing memory was very expensive, so it was very important to keep programs small, which caused several techniques to develop, both at the programmer's and operating system level, to cope with this requirement, such as swapping, paging, segmentation, etc. During the 1990s, as memories became cheaper, programs with larger memory-footprints became commonplace. This trend has been mostly due to the widespread use of computers, from large enterprise-wide applications that consume vast amounts of memory space, such as databases, Enterprise Resource Planning (ERP) applications to memory intensive desktop applications processing multimedia files. With the invasion of Intelligent Consumer Electronics or Embedded Systems low-memory-footprint programs have regained importance once more. Low-memory-footprint programs are of paramount importance to running applications on embedded platforms where memory is often constrained to within a few MBs – so much so that developers typically sacrifice efficiency (processing speeds) just to make program footprints small enough to fit into the available RAM. So much so that Sun Microsystems has now brought out a version of its Java-Virtual-Machine (JVM) for these devices; it goes by the name of ''KVM''. The KVM works on platforms where memory is in Kilobytes as opposed to the Megabytes of memory available on even a regular home PC. The ''K Virtual-Machine'' addresses more than just being memory efficient {Link without Title} . Programs that advertise to be of low-memory-footprint often tend to strip down certain memory intensive features so as to accommodate itself into the little memory it is allocated to. The choice of programming language is yet another important consideration when low-memory-footprint programs are desired. Certain languages like C++ and Java tend to take up a huge amounts of memory for even small programs. A simple procedural language like C is often desirable as a C compiler generates far lesser number of anonymous and temporary objects as compared to C++, in addition to its lighter run-time-environment needs. |
|
|