{"title":"Local redundant polymorphism query elimination","authors":"Rhodes H. F. Brown, R. Horspool","doi":"10.1145/1852761.1852773","DOIUrl":"https://doi.org/10.1145/1852761.1852773","url":null,"abstract":"Dynamic polymorphism is a powerful yet costly feature of object-oriented programming languages. To improve performance, several techniques have been developed to simplify or remove polymorphism operations when they are not needed. However, these techniques have little effect on sites that are actively polymorphic.\u0000 In this paper we present an alternate approach to the optimization of operations such as virtual dispatches and type tests. Rather than attempt to eliminate the polymorphism mechanism, we identify situations where resolved type and method information can be shared across multiple polymorphism operations. In short, we perform a partial redundancy elimination transform over the loads and tests that constitute polymorphism queries.\u0000 We describe the realization of our technique in the Jikes RVM and present its effects on the DACAPO and SPECJVM98 benchmarks. Rigorous measurements show a mean improvement, including several statistically significant results, over a configuration with no dispatch optimization and over one that employs guarded inlining. We underscore the potential of our approach by demonstrating speedups of up to 14% on a highly polymorphic benchmark.\u0000 Our results show the approach is both successful and complementary to techniques that focus on degenerate polymorphism.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"18 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124753255","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Tool demonstration: a toolkit for architecture-centric software development","authors":"Georg Buchgeher, R. Weinreich","doi":"10.1145/1852761.1852784","DOIUrl":"https://doi.org/10.1145/1852761.1852784","url":null,"abstract":"Current software development environments lack support for architecture-related activities like architecture design, analysis, and architecture knowledge management. We present a toolkit supporting architecture-centric development. The toolkit is an extension of the Eclipse IDE and supports architecture-related activities during the whole software life cycle, from analysis to design, implementation, and maintenance. It provides multiple views for capturing architectural knowledge, and for architecture modeling and visualization. Incremental development and consistency between architecture and system implementation are supported through continuous forward and reverse engineering. Capturing architectural knowledge supports tracing from requirements to architecture and implementation.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"122 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123449210","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
L. Schrettner, Lajos Jeno Fülöp, R. Ferenc, T. Gyimóthy
{"title":"Visualization of software architecture graphs of Java systems: managing propagated low level dependencies","authors":"L. Schrettner, Lajos Jeno Fülöp, R. Ferenc, T. Gyimóthy","doi":"10.1145/1852761.1852783","DOIUrl":"https://doi.org/10.1145/1852761.1852783","url":null,"abstract":"The availability of up-to-date documentation of the architecture is crucial for software maintenance tasks, but it is often missing or differs from the implemented architecture. An increasingly popular and feasible way to get a clear picture of the architecture is to reconstruct it from the source code. The result of the reconstruction procedure is a graph with special, architecture-specific properties. Nowadays software systems are typically very large, so the reconstructed architecture contains a lot of details and is really difficult to interpret. It is important therefore to have efficient methods that help in understanding and managing the architecture graph. The purpose of these methods is to try to present the information so that it is comprehensible to the users. Two important methods are selective subtree collapsion and lifting low level dependencies of the system into higher, visible levels. These enable an architect to investigate the dependencies of system components at higher levels, without the need to deal with an enormous quantity of low-level details.\u0000 In this paper, first we overview the concepts related to lifting and present a conceptual framework that combines subtree collapsion with lifting to enable users to interactively explore and manipulate a software architecture graph. Then we define a set of algorithms that can be used to efficiently propagate dependency edges of a graph to higher levels. We also describe how the results can be integrated into SourceInventory, a software quality monitoring and visualization framework.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130688318","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Lukas Stadler, Thomas Würthinger, Christian Wimmer
{"title":"Efficient coroutines for the Java platform","authors":"Lukas Stadler, Thomas Würthinger, Christian Wimmer","doi":"10.1145/1852761.1852765","DOIUrl":"https://doi.org/10.1145/1852761.1852765","url":null,"abstract":"Coroutines are non-preemptive lightweight processes. Their advantage over threads is that they do not have to be synchronized because they pass control to each other explicitly and deterministically. Coroutines are therefore an elegant and efficient implementation construct for numerous algorithmic problems.\u0000 Many mainstream languages and runtime environments, however, do not provide a coroutine implementation. Even if they do, these implementations often have less than optimal performance characteristics because of the tradeoff between run time and memory efficiency.\u0000 As more and more languages are implemented on top of the Java virtual machine (JVM), many of which provide coroutinelike language features, the need for a coroutine implementation has emerged. We present an implementation of coroutines in the JVM that efficiently handles a large range of workloads. It imposes no overhead for applications that do not use coroutines and performs well for applications that do.\u0000 For evaluation purposes, we use our coroutines to implement JRuby fibers, which leads to a significant speedup of certain JRuby programs. We also present general benchmarks that show the performance of our approach and outline its run-time and memory characteristics.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"20 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114299317","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Philippe Moret, Walter Binder, A. Heydarnoori, Danilo Ansaloni
{"title":"Tool demonstration: effective runtime exploration of the inter-procedural control flow in Java applications","authors":"Philippe Moret, Walter Binder, A. Heydarnoori, Danilo Ansaloni","doi":"10.1145/1852761.1852785","DOIUrl":"https://doi.org/10.1145/1852761.1852785","url":null,"abstract":"Statically exploring the inter-procedural control flow of object-oriented applications is often difficult because of the use of abstraction, polymorphism, and dynamic binding. To ease this problem, in this tool demonstration, we present a new profiler that dynamically explores the inter-procedural control flow of Java applications while they are executing. Our profiler visualizes the complete Calling Context Tree (CCT) with various dynamic metrics, such as method invocations, executed bytecodes, or allocated objects, and enables efficient navigation in large CCTs comprising up to several millions of nodes. We show that our tool can render data quite fast with response times in the range of 14--204ms upon user interactions. Thanks to a carefully tuned incremental data representation, the profiling data produced by a running application can be updated several times per second on a standard laptop. The visualization can also show recently active parts of the application. The collection of profiling data uses an aspect-based dynamic program analysis technique that simplifies extension and customization of the tool.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"51 12","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132070467","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Lorenzo Bettini, Ferruccio Damiani, Ina Schaefer, Fabio Strocco
{"title":"A prototypical Java-like language with records and traits","authors":"Lorenzo Bettini, Ferruccio Damiani, Ina Schaefer, Fabio Strocco","doi":"10.1145/1852761.1852780","DOIUrl":"https://doi.org/10.1145/1852761.1852780","url":null,"abstract":"Traits have been designed as units of fine-grained behavior reuse in the object-oriented paradigm. In this paper, we present the language Sugared Welterweight Record-Trait Java (SWRTJ), a Java dialect with records and traits. Records have been devised to complement traits for fine-grained state reuse. Records and traits can be composed by explicit linguistic operations, allowing code manipulations to achieve fine-grained code reuse. Classes are assembled from (composite) records and traits and instantiated to generate objects. We present the prototypical implementation of SWRTJ using Xtext, an Eclipse framework for the development of programming languages as well as other domain-specific languages. Our implementation comprises an Eclipse-based editor for SWRTJ with typical IDE functionalities, and a stand-alone compiler, which translates SWRTJ programs into standard Java programs.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130217414","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Optimizing invokedynamic","authors":"Christian Thalinger, J. Rose","doi":"10.1145/1852761.1852763","DOIUrl":"https://doi.org/10.1145/1852761.1852763","url":null,"abstract":"In order to support the needs of non-Java languages, the JSR 292 Expert Group has designed a new bytecode \"invokedynamic\" which allows JVM bytecodes to contain call sites with pluggable, user-defined behavior. The bytecode is accompanied by a new data type called a \"method handle\" that reifies the pluggable behavior, in the form of a functional value. The authors have been building the JSR 292 Reference Implementation on top of Oracle's HotSpot JVM. This paper describes their implementation tactics. Interesting subtopics include connecting the novel features of JSR 292 to classic HotSpot optimizations, creating new code optimization techniques for HotSpot in support of JSR 292, using Java (along with HotSpot's customary C++) as an implementation language for method handles, using internally-generated bytecodes as an intermediate language for \"freezing\" dynamic call sites before optimization, and designing specialized \"adapter\" calling sequences which match callers and callees of differing type descriptors.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129382955","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Andreas Sewe, Dingwen Yuan, Jan Sinschek, M. Mezini
{"title":"Headroom-based pretenuring: dynamically pretenuring objects that live \"long enough\"","authors":"Andreas Sewe, Dingwen Yuan, Jan Sinschek, M. Mezini","doi":"10.1145/1852761.1852767","DOIUrl":"https://doi.org/10.1145/1852761.1852767","url":null,"abstract":"Many modern garbage collectors are generational, operating under the assumption that \"most objects die young.\" Such collectors allocate all objects in a frequently collected nursery and tenure only surviving objects to a less-frequently collected, older generation. But these survivors induce copying costs upon tenuring. To avoid these costs, pretenuring schemes construct classifiers to predict whether an object will be long-lived or short-lived; accordingly, it is tenured or not immediately upon allocation. Up to now, however, these predictions did not account for one important fact: the proximity of the next collection. In contrast, headroom-based pretenuring does take this into account; thus, it can dynamically pretenure objects whenever they live \"long enough.\"\u0000 We devised two ways to estimate an object's lifetime from garbage collection traces. This led to two headroom-based pre-tenuring schemes, which we implemented on top of Jikes RVM and MMTk. Our experiments show that the dynamic, headroom-based pretenuring schemes outperform static schemes in terms of collector performance, albeit at the cost of increased mutator overhead.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"17 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125403827","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Exploiting memory usage patterns to improve garbage collections in Java","authors":"Liangliang Tong, F. Lau","doi":"10.1145/1852761.1852768","DOIUrl":"https://doi.org/10.1145/1852761.1852768","url":null,"abstract":"Copying-based garbage collectors are currently widely employed in JVM systems, as they provide not only cheap allocations but also fast collections. Comparing to their compacting-based counterparts, copying-based collectors trade space for time: they conservatively reserve half of the available heap for the purpose of copying live objects. It is a common belief, however, that objects' survival rates are generally too low to make full use of the reserved memory. We find through experiments that the total live object sizes of Java programs are generally small and remain relatively stable over many collections, which provides a perfect opportunity for optimization. We analyze this phenomenon and propose a \"skew-space\" collector that would reserve spaces of dynamically adjusted sizes coming from online predictions. The proposed collector has been realized using MMTk in the JikesRVM, and has shown promising improvements in the total execution time for the SPECjvm98 and DaCapo benchmarks.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"26 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124452355","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"A programming model for adaptable Java applications","authors":"M. Autili, P. Benedetto, P. Inverardi","doi":"10.1145/1852761.1852779","DOIUrl":"https://doi.org/10.1145/1852761.1852779","url":null,"abstract":"Adaptable applications are becoming the main drivers of the pervasive computing paradigm. The development and the context-aware execution of such applications on mobile devices, often characterized by their heterogeneity and limitedness, is a big challenge and it is far to be solved. The main difficulty is to provide (i) an easy-to-use and powerful programming technique for developers to actually code adaptable applications, and (ii) a context-aware run-time support to properly handle contextual situations. This paper presents a programming model that provides developers with a set of agile and user-friendly extensions to Java for easily specifying generic code in a flexible and declarative way. The generic code specifies both the invariant semantics and the degree of variability of the application. Variability is expressed in terms of adaptable classes that declare adaptable methods, and alternative classes that define them. Then, an ad-hoc preprocessor resolves variability by generating standard Java methods within standard Java classes that, opportunely combined with the core code, make-up different application alternatives, i.e., standard Java applications that represent different ways of implementing an adaptable application specification. The programming model and the generic code preprocessor have been fully implemented in and for Java as Eclipse plugins. They are part of Chameleon, a framework that provides both an integrated development environment and a proper context-aware run-time support to adaptable Java applications for limited devices.","PeriodicalId":169989,"journal":{"name":"Principles and Practice of Programming in Java","volume":"2 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2010-09-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121545589","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}