Egor, thanks for clear scheme.

In your terms I'd do something like this:

* firstly - raise event for X:
    CompiledMethodLoad(start=X.1.start,
                       method_size=X.1.size + X.2.size,
                       addr_loc_map=
                       [X.1.start -> bcoff1,
                        X.2.start -> bcoff2])
  * secondly - raise event for Y:
    CompiledMethodLoad(start=Y.1.start,
                       method_size=Y.1.size,
                       addr_loc_map=
                       [Y.1.start -> bcoff_Y])

  For example, we have
  some chinks of methods X and Y intermixed like this:
  "X.1,Y.1,X.2". To overcome we may:
* raise a single event for X: CompiledMethodLoad(start=X.1.start,
                       method_size=X.1.size + Y.1.size + X.2.size,
                       addr_loc_map=
[X.1.start -> bcoff1, Y.1.start -> 0,
                        X.2.start -> bcoff2])
  * raise 2 events for X:
    CompiledMethodLoad(start=X.1.start,
                       method_size=X.1.size,
                       addr_loc_map=
                       [X.1.start -> bcoff1])
    CompiledMethodLoad(start=X.2.start,
                       method_size=X.2.size,
                       addr_loc_map=
                       [X.2.start -> bcoff2])

I would highly appreciate if some JVMTI guru steps down from Olymp and
tells which of two is the best, or at least says what RI does in that
case (or, maybe, RI does not generate non-contigous blocks?)

I like the second approach (raise 2 events)


Reply via email to