Reverse-engineering object interactions from source
code can be done through static, dynamic, or hybrid (static plus
dynamic) analyses. In the latter two, monitoring a program and
collecting runtime information translates into some overhead
during program execution. Depending on the type of application,
the imposed overhead can reduce the precision and accuracy of
the reverse-engineered object interactions (the larger the overhead
the less precise or accurate the reverse-engineered interactions),
to such an extent that the reverse-engineered interactions
may not be correct, especially when reverse-engineering a multithreaded
software system. One is therefore seeking an instrumentation
strategy as less intrusive as possible. In our past work, we
showed that a hybrid approach is one step towards such a solution,
compared to a purely dynamic approach, and that there is
room for improvements. In this paper, we uncover, in a systematic
way, other aspects of the dynamic analysis that can be improved
to further reduce runtime overhead, and study alternative
solutions. Our experiments show effective overhead reduction
thanks to a modified procedure to collect runtime information.