You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
if (runtimes != null) cache = runtimes.get(runtime);
assertcache != null : "Runtime given has not initialized JSON::Ext";
returncache;
}
}
The runtimes cached in weak references will not "leak" but it may take longer for the runtime to be collected than normal. In addition, the cost of traversing the weak reference may offset any gains from caching runtime objects.
These should be removed and cached in a runtime-safe way.
The text was updated successfully, but these errors were encountered:
I improved this in #708 but eliminating all references is tricky. Basically this is being used as a way to key a cache object per-runtime that holds references to things like JSON classes, modules and exceptions. It shouldn't leak but having weak references means that dereferenced objects will survive at least one or two more GC cycles while they get cleaned up.
The cache being used may actually be more expensive than just looking up the values again. This should remain open for now and I'll return to it when I can (or someone else will) to try to eliminate more of these references.
There are a few places where we cache the JRuby runtime or runtime-specific objects in a static field, such as here with a WeakReference:
json/java/src/json/ext/RuntimeInfo.java
Lines 83 to 91 in 7d2ad6d
The runtimes cached in weak references will not "leak" but it may take longer for the runtime to be collected than normal. In addition, the cost of traversing the weak reference may offset any gains from caching runtime objects.
These should be removed and cached in a runtime-safe way.
The text was updated successfully, but these errors were encountered: