On Feb 20, 2013, at 11:59 AM, Coleen Phillimore <coleen.phillim...@oracle.com> wrote:
> On 2/20/2013 2:51 PM, John Rose wrote: >> On Feb 20, 2013, at 10:20 AM, Coleen Phillimore >> <coleen.phillim...@oracle.com> wrote: >> >>> Summary: Add JVM_CONSTANT_PseudoString in place of JVM_CONSTANT_Object and >>> use this tag to distinguish patched pseudo strings. The original string is >>> retained if it was present. >> >> This is reasonable; it is a good cleanup. If you can propose a name better >> than "PseudoString" I'm all ears. > > If the string is really meaningless, maybe it can be deleted and we don't > need this JVM_CONSTANT_PseudoString. The only reason I kept "String" in the > name is because I thought the string would have some meaning to be preserved. The string is meaningless. It is just a waste of UTF8 symbol table space. >> Consider getting rid of set_has_pseudo_string. That flag was present (IIRC) >> only to tell the GC that there might be non-perm oops in the constant pool. >> Do we still need that? > > I'd be happy to. I noticed it wasn't being used. Neither is > _has_invokedynamic for that matter. _has_preresolution does do something. Not any more. That flag was added for the sake of the internally-generated bytecodes: changeset: 2522:ddd894528dbc user: jrose date: Thu Jun 23 17:14:06 2011 -0700 summary: 7056328: JSR 292 invocation sometimes fails in adapters for types not on boot class path It appears that we can get rid of all those flags. >>> I'm not sure how class file reconstitution for pseudo-strings is going to >>> work, but I thought it was prudent to leave the Symbol* in the slot for the >>> patched string. >> >> If you really wanted to reconstitute a class file for an anonymous class, >> and if that class has oop patching (pseudo-strings), you would need either >> to (a) reconstitute the patches array handed to Unsafe.defineAnonymousClass, >> or (b) accept whatever odd strings were there first, as an approximation. >> The "odd strings" are totally insignificant, and are typically something >> like "CONSTANT_PLACEHOLDER_42" (see >> InvokerBytecodeGenerator::constantPlaceholder). >> > > Maybe there isn't a way or API to reconstitute an anonymous class. I don't > know if there is. If reconstituting a class means recovering the parameters originally passed to defineClass, then anonymous classes with patching are inherently a special case. I wouldn't worry about it too much. > I'm not sure how to reconstitute a normal class in the first place. Maybe > Serguei can comment. If this class cannot be reconsitituted, I'll change > this to remove the string in the patched case and won't need > JVM_CONSTANT_PseudoString (and the constant for Object can be removed too). Won't we need a tag that says "this thing is a patched constant"? JVM_CONSTANT_Patched? — John