This program is tentative and subject to change.

Thu 5 Jun 2025 11:00 - 11:30 at S 9 - Programming Language Implementation Chair(s): Stefan Marr

Data structures are a cornerstone of most modern programming languages. Whether they are provided via separate libraries, built into the language specification, or as part of the language’s standard library - data structures such as lists, maps, sets, or arrays provide programmers with a large repertoire of tools to deal with data. Moreover, each kind of data structure typically comes with a variety of implementations that focus on scalability, memory efficiency, performance, thread-safety, or similar aspects.

Choosing the right data structure for a particular use case can be difficult or even impossible if the data structure is part of a framework over which the user has no control. It typically requires in-depth knowledge about the program and, in particular, about the usage of the data structure in question. However, it is usually not feasible for developers to obtain such information about programs in advance. Hence, it makes sense to look for a more automated way for optimizing data structures.

We present an approach to automatically replace data structures in Java applications. We use profiling to determine allocation-site-specific metrics about data structures and their usages, and then automatically replace their allocations with customized versions, focusing on memory efficiency. Our approach is integrated into GraalVM Native Image, an Ahead-of-Time compiler for Java applications.

By analyzing the generated data structure profiles, we show how standard benchmarks and microservice-based applications use data structures and demonstrate the impact of customized data structures on the memory usage of applications.

We conducted an evaluation on standard and microservice-based benchmarks, in which the memory usage was reduced by up to 13.85 % in benchmarks that make heavy use of data structures. While others are only slightly affected, we could still reduce the average memory usage by 1.63 % in standard benchmarks and by 2.94 % in microservice-based benchmarks.

We argue that our work demonstrates that choosing appropriate data structures can reduce the memory usage of applications. While acknowledge that our approach does not provide benefits for all kinds of workloads, our work nevertheless shows how automated profiling and replacement can be used to optimize data structures in general. Hence, we argue that our work could pave the way for future optimizations of data structures.

This program is tentative and subject to change.

Thu 5 Jun

Displayed time zone: Belgrade, Bratislava, Budapest, Ljubljana, Prague change

10:30 - 12:00
Programming Language ImplementationResearch Papers at S 9
Chair(s): Stefan Marr University of Kent
10:30
30m
Talk
An attempt to catch up with JIT compilers: the false lead of optimizing inline caches
Research Papers
Aurore Poirier University of Rennes - Inria - CNRS - IRISA, Erven Rohou Université de Rennes - Inria - CNRS - IRISA, Manuel Serrano Inria; Université Côte d’Azur
11:00
30m
Talk
Automated Profile-guided Replacement of Data Structures to Reduce Memory Allocation
Research Papers
Lukas Makor JKU Linz, Sebastian Kloibhofer Johannes Kepler University Linz, Peter Hofer Oracle Labs, David Leopoldseder Oracle Labs, Hanspeter Mössenböck JKU Linz
11:30
30m
Talk
Meta-compilation of Baseline JIT Compilers with Druid
Research Papers
Nahuel Palumbo Université Lille, CNRS, Centrale Lille, Inria, UMR 9189 - CRIStAL, Guillermo Polito Univ. Lille, Inria, CNRS, Centrale Lille, UMR 9189 CRIStAL, Stéphane Ducasse Inria; University of Lille; CNRS; Centrale Lille; CRIStAL, Pablo Tesone Univ. Lille, Inria, CNRS, Centrale Lille, UMR 9189 CRIStAL, Pharo Consortium