RFR: 8271506: Add ResourceHashtable support for deleting selected entries

Coleen Phillimore coleenp at openjdk.java.net
Thu Jul 29 21:07:45 UTC 2021


The ResourceHashtable doesn't have a way to delete selected entries based on things like their class has been unloaded, which is needed to replace Hashtable with ResourceHashtable.
The Nodes of the ResourceHashtable has a Key and Value of  template types.
template<typename K, typename V>
class ResourceHashtableNode : public ResourceObj {
public:
  unsigned _hash;
  K _key;
  V _value;
...
But there's no destructor so that ~K and ~V are not called (if I understand C++ correctly).

When instantiated with a value that's not a pointer, calling code does this:

  SourceObjInfo src_info(ref, read_only, follow_mode);
  bool created;
  SourceObjInfo* p = _src_obj_table.put_if_absent(src_obj, src_info, &created);

So if SourceObjInfo has a destructor, it'll have to have a careful assignment operator so that the value copied into the hashtable doesn't get deleted.

In this patch, I assign the responsibility of deleting the Key and Value of the hashtable to the do_entry function, because it's simple.  If we want to use more advanced unreadable C++ code, someone will have to suggest an alternate set of changes, because my C++ is not up to this.

Tested with tier1-3, gtest, and upcoming patch for JDK-8048190.

-------------

Commit messages:
 - 8271506: Add ResourceHashtable support for deleting selected entries

Changes: https://git.openjdk.java.net/jdk/pull/4938/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4938&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8271506
  Stats: 51 lines in 2 files changed: 51 ins; 0 del; 0 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4938.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4938/head:pull/4938

PR: https://git.openjdk.java.net/jdk/pull/4938


More information about the hotspot-dev mailing list