Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8263589

Introduce JavaValue::get_oop/set_oop



    • Enhancement
    • Resolution: Fixed
    • P4
    • 17
    • None
    • hotspot
    • None
    • b14


      JavaValue is a small wrapper class that wraps values used to pass arguments and results between native and Java.

      When JavaCalls::call returns an object, the value stored in the JavaValue is not a handliezed jobject. Instead it's a raw oop. So, most of the code handling the `result`, fetches the result as a jobject, and then immediately casts it to an oop. For example:
        oop res = (oop)result.get_jobject();

      I'd like to change this code to be:
        oop res = result.get_oop();

      The motivations for this patch is:
      1) Minimize the places where we pass around oops in jobject variables. Maybe at some point we'll have converted the JVM to only use the jobject type when passing around JNI handle. We need to be stricter with the types when we continue develop our GCs and their barriers.

      2) Limit the number of places in the code where we perform raw oop casts. We have a helper cast function for that, cast_to_oop, but not all code use it. I have future patches where the compiler will completely forbid raw cast to oops (in fastdebug builds). With that in place, I can then add more stricter oop verification code when oops are created. This helps catching bugs earlier.


        Issue Links



              stefank Stefan Karlsson
              stefank Stefan Karlsson
              0 Vote for this issue
              3 Start watching this issue