Results 1 -
6 of
6
Accordion arrays: Selective compression of unicode arrays in Java
- In International Symposium on Memory Management
, 2007
"... In this work, we present accordion arrays, a straightforward and effective memory compression technique targeting Unicode-based character arrays. In many non-numeric Java programs, character arrays represent a significant fraction (30-40 % on average) of the heap memory allocated. In many locales, m ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
In this work, we present accordion arrays, a straightforward and effective memory compression technique targeting Unicode-based character arrays. In many non-numeric Java programs, character arrays represent a significant fraction (30-40 % on average) of the heap memory allocated. In many locales, most, but not all, of those arrays consist entirely of characters whose top bytes are zeros, and, hence, can be stored as byte arrays without loss of information. In order to get the almost factor of two compression rate for character vectors, two challenges must be overcome: 1) all code that reads and writes character vectors must dynamically determine which kind of array is being accessed and perform byte or character loads/stores as appropriate, and 2) compressed vectors must be dynamically inflated when an incompressible character is written. We demonstrate how these challenges can be overcome with minimal space and execution time overhead, resulting in an average speedup of 2 % across our benchmark suite, with individual speedups as high as 8%.
Abstract No Bit Left Behind: The Limits of Heap Data Compression ∗
"... On one hand, the high cost of memory continues to drive demand for memory efficiency on embedded and general purpose computers. On the other hand, programmers are increasingly turning to managed languages like Java for their functionality, programmability, and reliability. Managed languages, however ..."
Abstract
-
Cited by 3 (2 self)
- Add to MetaCart
On one hand, the high cost of memory continues to drive demand for memory efficiency on embedded and general purpose computers. On the other hand, programmers are increasingly turning to managed languages like Java for their functionality, programmability, and reliability. Managed languages, however, are not known for their memory efficiency, creating a tension between productivity and performance. This paper examines the sources and types of memory inefficiencies in a set of Java benchmarks. Although prior work has proposed specific heap data compression techniques, they are typically restricted to one model of inefficiency. This paper generalizes and quantitatively compares previously proposed memorysaving approaches and idealized heap compaction. It evaluates a variety of models based on strict and deep object equality, field value equality, removing bytes that are zero, and compressing fields and arrays with a limited number and range of values. The results show that substantial memory reductions are possible in the Java heap. For example, removing bytes that are zero from arrays is particularly effective, reducing the application’s memory footprint by 41 % on average. We are the first to combine multiple savings models on the heap, which very effectively reduces the application by up to 86%, on average 58%. These results demonstrate that future work should be able to combine a high productivity programming language with memory efficiency.
Utilizing Field Usage Patterns for Java Heap Space Optimization
"... This research studies the characteristics of field usage patterns in the SpecJVM98 benchmarks. It finds that multiple object instances of the same class often exhibit different field-usage patterns. Motivated by this observation, we designed a heap compression mechanism that classifies object instan ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
This research studies the characteristics of field usage patterns in the SpecJVM98 benchmarks. It finds that multiple object instances of the same class often exhibit different field-usage patterns. Motivated by this observation, we designed a heap compression mechanism that classifies object instances at runtime based on their field-usage patterns and eliminates unused fields to save space. To achieve the maximum space savings while minimizing the space and time overhead, our design combines three interrelated techniques in a novel manner: runtime object instance classification, field virtualization, and bidirectional object layout. An experimental evaluation reveals that this mechanism can reduce the maximum heap occupancy of SpecJVM98 benchmarks by up to 18 % and 14% on average while keeping the application execution overhead low. 1.
Object-Relative Addressing: Compressed Pointers in 64-Bit Java Virtual Machines
"... Abstract. 64-bit address spaces come at the price of pointers requiring twice as much memory as 32-bit address spaces, resulting in increased memory usage. This paper reduces the memory usage of 64-bit pointers in the context of Java virtual machines through pointer compression, called Object-Relati ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Abstract. 64-bit address spaces come at the price of pointers requiring twice as much memory as 32-bit address spaces, resulting in increased memory usage. This paper reduces the memory usage of 64-bit pointers in the context of Java virtual machines through pointer compression, called Object-Relative Addressing (ORA). The idea is to compress 64-bit raw pointers into 32-bit offsets relative to the referencing object’s virtual address. Unlike previous work on the subject using a constant base address for compressed pointers, ORA allows for applying pointer compression to Java programs that allocate more than 4GB of memory. Our experimental results using Jikes RVM and the SPECjbb and DaCapo benchmarks on an IBM POWER4 machine show that the overhead introduced by ORA is statistically insignificant on average compared to raw 64-bit pointer representation, while reducing the total memory usage by 10 % on average and up to 14.5 % for some applications. 1
Java objects without the header
"... Abstract—By a recent trend, 64-bit machines are invading the end-user market. One major rumor keeps people from switching over: a 64-bit machine uses more memory then its 32-bit counterpart for the same job. For a 64-bit Virtual Machine, we tackle 2 reasons that nurish this rumor. For a given applic ..."
Abstract
- Add to MetaCart
Abstract—By a recent trend, 64-bit machines are invading the end-user market. One major rumor keeps people from switching over: a 64-bit machine uses more memory then its 32-bit counterpart for the same job. For a 64-bit Virtual Machine, we tackle 2 reasons that nurish this rumor. For a given application we identify the key object types. Instances of these key types get allocated in a type specific high 64-bit virtual address range. Then for these key 64-bit objects, we remove the enlarged object header and we reduce inter-object alignment. Information previously stored into the header, is now no longer uniformly accessible for all objects. The extra overhead to obtain this information is won back again for most benchmarks by the better memory layout in the heap. As a result we obtain applications that run equally fast, but allocate less memory. Keywords—Java, memory management, 64-bit, Implicit typing I.
Java Object Header Elimination for Reduced Memory Consumption in 64-bit Virtual Machines
"... Memory performance is an important design issue for contemporary computer systems given the huge processor-memory speed gap. This paper proposes a space-efficient Java object model for reducing the memory consumption of 64-bit Java virtual machines. We completely eliminate the object header through ..."
Abstract
- Add to MetaCart
Memory performance is an important design issue for contemporary computer systems given the huge processor-memory speed gap. This paper proposes a space-efficient Java object model for reducing the memory consumption of 64-bit Java virtual machines. We completely eliminate the object header through Typed Virtual Addressing (TVA) or implicit typing. TVA encodes the object type in the object’s virtual address by allocating all objects of a given type in a contiguous memory segment. This allows for removing the type information as well as the status field from the object header. Whenever type and status information is needed, masking is applied to the object’s virtual address for obtaining an offset into type and status information structures. Unlike previous work on implicit typing, we apply TVA to a selected number of frequently allocated object types, hence the name Selective TVA (STVA); this limits the amount of memory fragmentation. In addition to applying STVA, we also compress the Type Information Block (TIB) pointers for all objects that do not fall under TVA. We implement the space-efficient Java object model in the 64-bit version of the Jikes RVM on an AIX IBM platform and compare its performance against the traditionally used Java object model using a multitude of Java benchmarks. We conclude that the space-efficient Java object model reduces memory consumption by on average 15 % (and up to 45 % for some benchmarks). About half the reduction comes from TIB pointer compression; the other half comes from STVA. In terms of performance, the space-efficient object model generally does not affect performance, however for some benchmarks we observe statistically significant performance speedups, up to

