Merge

Tue, 21 Mar 2017 12:20:10 -0700

author
asaha
date
Tue, 21 Mar 2017 12:20:10 -0700
changeset 8954
9deaba76a094
parent 8939
a6c90d8e1900
parent 8953
36ef3df5edd0
child 8955
c4026db66abe
child 8964
77e13f15e396

Merge

.hgtags file | annotate | diff | comparison | revisions
src/os/linux/vm/os_linux.cpp file | annotate | diff | comparison | revisions
src/share/vm/prims/methodHandles.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/.hgtags	Tue Mar 21 12:11:02 2017 -0700
     1.2 +++ b/.hgtags	Tue Mar 21 12:20:10 2017 -0700
     1.3 @@ -949,6 +949,10 @@
     1.4  90f94521c3515e5f27af0ab9b31d036e88bb322a jdk8u121-b13
     1.5  351bf1d4ff9a41137f91e2ec97ec59ed29a38d8b jdk8u121-b31
     1.6  41daac438a2ac5a80755dc3de88b76e4ac66750a jdk8u121-b32
     1.7 +eb9e617d6f64d4ad689feac0707b5e4335b00ce2 jdk8u121-b33
     1.8 +c60b0994e8eee152666252c3ba4105db65c004db jdk8u121-b34
     1.9 +0612a789929b88612509668bea4b3138613e91e4 jdk8u121-b35
    1.10 +0ea269e49511a890e6fabfd468638dd1c0ed0be3 jdk8u121-b36
    1.11  c0a1ba0df20fda10ddb8599e888eb56ad98b3874 jdk8u131-b00
    1.12  0b85ccd6240991e1a501602ff5addec6b88ae0af jdk8u131-b01
    1.13  ef90c721a4e59b01ca36f25619010a1afe9ed4d5 jdk8u131-b02
     2.1 --- a/src/os/linux/vm/os_linux.cpp	Tue Mar 21 12:11:02 2017 -0700
     2.2 +++ b/src/os/linux/vm/os_linux.cpp	Tue Mar 21 12:20:10 2017 -0700
     2.3 @@ -2859,7 +2859,7 @@
     2.4                                // in the library.
     2.5    const size_t BitsPerCLong = sizeof(long) * CHAR_BIT;
     2.6  
     2.7 -  size_t cpu_num = os::active_processor_count();
     2.8 +  size_t cpu_num = processor_count();
     2.9    size_t cpu_map_size = NCPUS / BitsPerCLong;
    2.10    size_t cpu_map_valid_size =
    2.11      MIN2((cpu_num + BitsPerCLong - 1) / BitsPerCLong, cpu_map_size);
     3.1 --- a/src/share/vm/classfile/javaClasses.cpp	Tue Mar 21 12:11:02 2017 -0700
     3.2 +++ b/src/share/vm/classfile/javaClasses.cpp	Tue Mar 21 12:20:10 2017 -0700
     3.3 @@ -1,5 +1,5 @@
     3.4  /*
     3.5 - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
     3.6 + * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
     3.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3.8   *
     3.9   * This code is free software; you can redistribute it and/or modify it
    3.10 @@ -2852,6 +2852,15 @@
    3.11    mname->address_field_put(_vmindex_offset, (address) index);
    3.12  }
    3.13  
    3.14 +bool java_lang_invoke_MemberName::equals(oop mn1, oop mn2) {
    3.15 +  if (mn1 == mn2) {
    3.16 +     return true;
    3.17 +  }
    3.18 +  return (vmtarget(mn1) == vmtarget(mn2) && flags(mn1) == flags(mn2) &&
    3.19 +          vmindex(mn1) == vmindex(mn2) &&
    3.20 +          clazz(mn1) == clazz(mn2));
    3.21 +}
    3.22 +
    3.23  oop java_lang_invoke_LambdaForm::vmentry(oop lform) {
    3.24    assert(is_instance(lform), "wrong type");
    3.25    return lform->obj_field(_vmentry_offset);
     4.1 --- a/src/share/vm/classfile/javaClasses.hpp	Tue Mar 21 12:11:02 2017 -0700
     4.2 +++ b/src/share/vm/classfile/javaClasses.hpp	Tue Mar 21 12:20:10 2017 -0700
     4.3 @@ -1,5 +1,5 @@
     4.4  /*
     4.5 - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
     4.6 + * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
     4.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4.8   *
     4.9   * This code is free software; you can redistribute it and/or modify it
    4.10 @@ -1132,6 +1132,8 @@
    4.11    static int flags_offset_in_bytes()            { return _flags_offset; }
    4.12    static int vmtarget_offset_in_bytes()         { return _vmtarget_offset; }
    4.13    static int vmindex_offset_in_bytes()          { return _vmindex_offset; }
    4.14 +
    4.15 +  static bool equals(oop mt1, oop mt2);
    4.16  };
    4.17  
    4.18  
     5.1 --- a/src/share/vm/oops/instanceKlass.cpp	Tue Mar 21 12:11:02 2017 -0700
     5.2 +++ b/src/share/vm/oops/instanceKlass.cpp	Tue Mar 21 12:20:10 2017 -0700
     5.3 @@ -3018,7 +3018,7 @@
     5.4    return NULL;
     5.5  }
     5.6  
     5.7 -bool InstanceKlass::add_member_name(Handle mem_name) {
     5.8 +oop InstanceKlass::add_member_name(Handle mem_name, bool intern) {
     5.9    jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
    5.10    MutexLocker ml(MemberNameTable_lock);
    5.11    DEBUG_ONLY(No_Safepoint_Verifier nsv);
    5.12 @@ -3028,7 +3028,7 @@
    5.13    // is called!
    5.14    Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
    5.15    if (method->is_obsolete()) {
    5.16 -    return false;
    5.17 +    return NULL;
    5.18    } else if (method->is_old()) {
    5.19      // Replace method with redefined version
    5.20      java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
    5.21 @@ -3037,8 +3037,11 @@
    5.22    if (_member_names == NULL) {
    5.23      _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
    5.24    }
    5.25 -  _member_names->add_member_name(mem_name_wref);
    5.26 -  return true;
    5.27 +  if (intern) {
    5.28 +    return _member_names->find_or_add_member_name(mem_name_wref);
    5.29 +  } else {
    5.30 +    return _member_names->add_member_name(mem_name_wref);
    5.31 +  }
    5.32  }
    5.33  
    5.34  // -----------------------------------------------------------------------------------------------------
     6.1 --- a/src/share/vm/oops/instanceKlass.hpp	Tue Mar 21 12:11:02 2017 -0700
     6.2 +++ b/src/share/vm/oops/instanceKlass.hpp	Tue Mar 21 12:20:10 2017 -0700
     6.3 @@ -1105,7 +1105,7 @@
     6.4    // JSR-292 support
     6.5    MemberNameTable* member_names() { return _member_names; }
     6.6    void set_member_names(MemberNameTable* member_names) { _member_names = member_names; }
     6.7 -  bool add_member_name(Handle member_name);
     6.8 +  oop add_member_name(Handle member_name, bool intern);
     6.9  
    6.10  public:
    6.11    // JVMTI support
     7.1 --- a/src/share/vm/prims/jvm.cpp	Tue Mar 21 12:11:02 2017 -0700
     7.2 +++ b/src/share/vm/prims/jvm.cpp	Tue Mar 21 12:20:10 2017 -0700
     7.3 @@ -643,7 +643,7 @@
     7.4        // This can safepoint and redefine method, so need both new_obj and method
     7.5        // in a handle, for two different reasons.  new_obj can move, method can be
     7.6        // deleted if nothing is using it on the stack.
     7.7 -      m->method_holder()->add_member_name(new_obj());
     7.8 +      m->method_holder()->add_member_name(new_obj(), false);
     7.9      }
    7.10    }
    7.11  
     8.1 --- a/src/share/vm/prims/methodHandles.cpp	Tue Mar 21 12:11:02 2017 -0700
     8.2 +++ b/src/share/vm/prims/methodHandles.cpp	Tue Mar 21 12:20:10 2017 -0700
     8.3 @@ -173,7 +173,7 @@
     8.4    return NULL;
     8.5  }
     8.6  
     8.7 -oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) {
     8.8 +oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info, bool intern) {
     8.9    assert(info.resolved_appendix().is_null(), "only normal methods here");
    8.10    methodHandle m = info.resolved_method();
    8.11    KlassHandle m_klass = m->method_holder();
    8.12 @@ -270,13 +270,7 @@
    8.13    // If relevant, the vtable or itable value is stored as vmindex.
    8.14    // This is done eagerly, since it is readily available without
    8.15    // constructing any new objects.
    8.16 -  // TO DO: maybe intern mname_oop
    8.17 -  if (m->method_holder()->add_member_name(mname)) {
    8.18 -    return mname();
    8.19 -  } else {
    8.20 -    // Redefinition caused this to fail.  Return NULL (and an exception?)
    8.21 -    return NULL;
    8.22 -  }
    8.23 +  return m->method_holder()->add_member_name(mname, intern);
    8.24  }
    8.25  
    8.26  oop MethodHandles::init_field_MemberName(Handle mname, fieldDescriptor& fd, bool is_setter) {
    8.27 @@ -917,7 +911,9 @@
    8.28          if (!java_lang_invoke_MemberName::is_instance(result()))
    8.29            return -99;  // caller bug!
    8.30          CallInfo info(m);
    8.31 -        oop saved = MethodHandles::init_method_MemberName(result, info);
    8.32 +        // Since this is going through the methods to create MemberNames, don't search
    8.33 +        // for matching methods already in the table
    8.34 +        oop saved = MethodHandles::init_method_MemberName(result, info, /*intern*/false);
    8.35          if (saved != result())
    8.36            results->obj_at_put(rfill-1, saved);  // show saved instance to user
    8.37        } else if (++overflow >= overflow_limit) {
    8.38 @@ -949,9 +945,34 @@
    8.39    }
    8.40  }
    8.41  
    8.42 -void MemberNameTable::add_member_name(jweak mem_name_wref) {
    8.43 +oop MemberNameTable::add_member_name(jweak mem_name_wref) {
    8.44    assert_locked_or_safepoint(MemberNameTable_lock);
    8.45    this->push(mem_name_wref);
    8.46 +  return JNIHandles::resolve(mem_name_wref);
    8.47 +}
    8.48 +
    8.49 +oop MemberNameTable::find_or_add_member_name(jweak mem_name_wref) {
    8.50 +  assert_locked_or_safepoint(MemberNameTable_lock);
    8.51 +  oop new_mem_name = JNIHandles::resolve(mem_name_wref);
    8.52 +
    8.53 +  // Find matching member name in the list.
    8.54 +  // This is linear because these are short lists.
    8.55 +  int len = this->length();
    8.56 +  int new_index = len;
    8.57 +  for (int idx = 0; idx < len; idx++) {
    8.58 +    oop mname = JNIHandles::resolve(this->at(idx));
    8.59 +    if (mname == NULL) {
    8.60 +      new_index = idx;
    8.61 +      continue;
    8.62 +    }
    8.63 +    if (java_lang_invoke_MemberName::equals(new_mem_name, mname)) {
    8.64 +      JNIHandles::destroy_weak_global(mem_name_wref);
    8.65 +      return mname;
    8.66 +    }
    8.67 +  }
    8.68 +  // Not found, push the new one, or reuse empty slot
    8.69 +  this->at_put_grow(new_index, mem_name_wref);
    8.70 +  return new_mem_name;
    8.71  }
    8.72  
    8.73  #if INCLUDE_JVMTI
     9.1 --- a/src/share/vm/prims/methodHandles.hpp	Tue Mar 21 12:11:02 2017 -0700
     9.2 +++ b/src/share/vm/prims/methodHandles.hpp	Tue Mar 21 12:20:10 2017 -0700
     9.3 @@ -1,5 +1,5 @@
     9.4  /*
     9.5 - * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
     9.6 + * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
     9.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     9.8   *
     9.9   * This code is free software; you can redistribute it and/or modify it
    9.10 @@ -60,7 +60,7 @@
    9.11    static Handle new_MemberName(TRAPS);  // must be followed by init_MemberName
    9.12    static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target
    9.13    static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false);
    9.14 -  static oop init_method_MemberName(Handle mname_h, CallInfo& info);
    9.15 +  static oop init_method_MemberName(Handle mname_h, CallInfo& info, bool intern = true);
    9.16    static int method_ref_kind(Method* m, bool do_dispatch_if_possible = true);
    9.17    static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig,
    9.18                                int mflags, KlassHandle caller,
    9.19 @@ -236,7 +236,8 @@
    9.20   public:
    9.21    MemberNameTable(int methods_cnt);
    9.22    ~MemberNameTable();
    9.23 -  void add_member_name(jweak mem_name_ref);
    9.24 +  oop add_member_name(jweak mem_name_ref);
    9.25 +  oop find_or_add_member_name(jweak mem_name_ref);
    9.26  
    9.27  #if INCLUDE_JVMTI
    9.28    // RedefineClasses() API support:

mercurial