Proceedings of the Sixth ACM Workshop on Virtual Machines and Intermediate Languages 2012
DOI: 10.1145/2414740.2414747
|View full text |Cite
|
Sign up to set email alerts
|

The JVM is not observable enough (and what to do about it)

Abstract: Bytecode instrumentation is a preferred technique for building profiling, debugging and monitoring tools targeting the Java Virtual Machine (JVM), yet is fundamentally dangerous. We illustrate its dangers with several examples gathered while building the DiSL instrumentation framework. We argue that no Java platform mechanism provides simultaneously adequate performance, reliability and expressiveness, but that this weakness is fixable. To elaborate, we contrast internal with external observation, and sketch s… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
1
1
1
1

Citation Types

0
17
0
2

Year Published

2013
2013
2023
2023

Publication Types

Select...
4
3

Relationship

3
4

Authors

Journals

citations
Cited by 27 publications
(19 citation statements)
references
References 14 publications
0
17
0
2
Order By: Relevance
“…Moreover, agents making use of the Java class library can interfere with the instrumentation of the Java class library itself (in practice this is often the case, unless the whole instrumentation logic is implemented as a native-code agent). To prevent interferences with class loading and JVM initialization [2,9], in-process load-time weavers often prevent instrumentation of the Java class library altogether. 9 Similar to the previous case, the resulting analyses usually suffer from limited code coverage.…”
Section: Motivating Examplementioning
confidence: 99%
See 1 more Smart Citation
“…Moreover, agents making use of the Java class library can interfere with the instrumentation of the Java class library itself (in practice this is often the case, unless the whole instrumentation logic is implemented as a native-code agent). To prevent interferences with class loading and JVM initialization [2,9], in-process load-time weavers often prevent instrumentation of the Java class library altogether. 9 Similar to the previous case, the resulting analyses usually suffer from limited code coverage.…”
Section: Motivating Examplementioning
confidence: 99%
“…In such a setting, the weaver can access the Class instances of the supertypes of the class under instrumentation, allowing the inspection of RSI. Unfortunately, this approach can interfere with the instrumentation of the Java class library, class loading, and JVM initialization [2,9]. To mitigate these problems, in-process load-time weavers (such as the AspectJ load-time weaver) often prevent any instrumentation of the Java class library, leading to limited code coverage.…”
Section: Introductionmentioning
confidence: 99%
“…When the libraries offering these functions are themselves instrumented, library-internal resources become shared between the application and the analysis in an uncoordinated way. Consequently, even very basic instrumentation scenarios can suffer from subtle problems including state corruption (from introduced reentrancy), deadlocks (from lock order violations), and memory exhaustion (from sharing the weak reference queue handler) [22]. A cheap way to avoid this interference, i.e.…”
Section: Coverage Versus Isolationmentioning
confidence: 99%
“…Another example is the JVM reference handling mechanism, used for notification of object death. This mechanism cannot be safely used by analysis that also observes the application reference handling behavior [22]. In general, the problem is that these hooks are neither isolated from the application nor ordered relative to other observed events.…”
Section: Resource Lifecycle Eventsmentioning
confidence: 99%
See 1 more Smart Citation