Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Compositional pointer and escape analysis for Java programs
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Programming Ruby: the pragmatic programmer's guide
Programming Ruby: the pragmatic programmer's guide
Bugs as deviant behavior: a general approach to inferring errors in systems code
SOSP '01 Proceedings of the eighteenth ACM symposium on Operating systems principles
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Java Language Specification, Second Edition: The Java Series
Java Language Specification, Second Edition: The Java Series
C: A Reference Manual
Immutability specification and its applications
JGI '02 Proceedings of the 2002 joint ACM-ISCOPE conference on Java Grande
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Formal Techniques for Java Programs
ECOOP '01 Proceedings of the Workshops on Object-Oriented Technology
A practical flow-sensitive and context-sensitive C and C++ memory leak detector
PLDI '03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation
Automatic detection of immutable fields in Java
CASCON '00 Proceedings of the 2000 conference of the Centre for Advanced Studies on Collaborative research
Joeq: a virtual machine and compiler infrastructure
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
DynaMine: finding common error patterns by mining software revision histories
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Recovering system specific rules from software repositories
MSR '05 Proceedings of the 2005 international workshop on Mining software repositories
Javari: adding reference immutability to Java
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Static detection of leaks in polymorphic containers
Proceedings of the 28th international conference on Software engineering
Perracotta: mining temporal API rules from imperfect traces
Proceedings of the 28th international conference on Software engineering
From uncertainty to belief: inferring the specification within
OSDI '06 Proceedings of the 7th USENIX Symposium on Operating Systems Design and Implementation - Volume 7
Purity and side effect analysis for java programs
VMCAI'05 Proceedings of the 6th international conference on Verification, Model Checking, and Abstract Interpretation
Verifying dereference safety via expanding-scope analysis
ISSTA '08 Proceedings of the 2008 international symposium on Software testing and analysis
Constraint based optimization of stationary fields
Proceedings of the 6th international symposium on Principles and practice of programming in Java
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Feedback-directed barrier optimization in a strongly isolated STM
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Mostly-Functional Behavior in Java Programs
VMCAI '09 Proceedings of the 10th International Conference on Verification, Model Checking, and Abstract Interpretation
Automatic Generation of Runtime Failure Detectors from Property Templates
Software Engineering for Self-Adaptive Systems
Type-Based Object Immutability with Flexible Initialization
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Soundly Handling Static Fields: Issues, Semantics and Analysis
Electronic Notes in Theoretical Computer Science (ENTCS)
A dynamic evaluation of the precision of static heap abstractions
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Enforcing secure object initialization in java
ESORICS'10 Proceedings of the 15th European conference on Research in computer security
Understanding the impact of collection contracts on design
TOOLS'10 Proceedings of the 48th international conference on Objects, models, components, patterns
Checking enforcement of integrity constraints in database applications based on code patterns
Journal of Systems and Software
SOS: saving time in dynamic race detection with stationary analysis
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Continuous object access profiling and optimizations to overcome the memory wall and bloat
ASPLOS XVII Proceedings of the seventeenth international conference on Architectural Support for Programming Languages and Operating Systems
Identifying future field accesses in exhaustive state space traversal
ASE '11 Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering
Dynamic optimization of bytecode instrumentation
Proceedings of the 7th ACM workshop on Virtual machines and intermediate languages
Hi-index | 0.00 |
Java programmers can document that the relationship between two objects is unchanging by declaring the field that encodes that relationship to be final. This information can be used in program understanding and detection of errors in new code additions. Unfortunately, few fields in programs are actually declared final. Programs often contain fields that could be final, but are not declared so. Moreover, the definition of final has restrictions on initializationthat limit its applicability. We introduce stationary fields as a generalization of final. A field in a program is stationary if, for every object that contains it, all writes to the field occur before all the reads. Unlike the definition of final fields, there can be multiple writes during initialization, and initialization can span multiple methods. We have developed an efficient algorithm for inferring which fields are stationary in a program, based on the observation that many fields acquire their value very close to object creation. We presume that an object's initialization phase has concluded when its reference is saved in some heap object. We perform precise analysis only regarding recently created objects. Applying our algorithm to real-world Java programs demonstrates that stationary fields are more common than final fields: 44-59% vs. 11-17% respectively in our benchmarks. These surprising results have several significant implications. First, substantial portions of Java programs appear to be written in a functional style. Second, initialization of these fields occurs very close to object creation, when very good alias information is available. These results open the door for more accurate and efficient pointer alias analysis.