RFR (4th): 8023524: Mechanism to dump generated lambda classes / log lambda code generation

Henry Jen henry.jen at oracle.com
Wed Oct 2 15:17:44 UTC 2013


On Oct 2, 2013, at 7:21 AM, Remi Forax <forax at univ-mlv.fr> wrote:

> On 10/02/2013 04:12 PM, Peter Levart wrote:
>> On 10/02/2013 12:19 PM, Remi Forax wrote:
>>> final class ProxyClassesDumper {
>>>   ...
>>>   private final Path dumpDir;  // null if invalid
>>> 
>>>   public static ProxyClassesDumper create(String dir) {
>>>      dir = dir.trim();
>>>      Path path = *Paths.get*(dir.isEmpty() ? "." : dir);
>>>      path = validateDumpDir(path)? path: null;
>>>      return new ProxyClassesDumper(path);
>>>   } 
>> 
>> Hi Remi, Henry,
>> 
>> I think Henry is trying to re-validate the directory on each dump attempt even if it was invalid on 1st dump attempt. Perhaps in order to be able to start a VM with dump directory specified and only later create or mount that directory.
>> 
>> Having a static field in the InnerClassLambdaMetafactory holding an initialized ProxyClassesDumper is a good idea.
>> 
>> One thing to watch though is that Paths.get(String) can throw InvalidPathException. This will render InnerClassLambdaMetafactory non-functional since its static initialization will throw exception. Each lambda capture will than throw Error. I think the exception should be caught, logged and null returned from ProxyClassesDumper.create() in that case...
> 
> yes, nice catch.

I had it in there earlier, but need that in exception message. Since it is called only by InnerClassMetaFactory, which I think won't cause that exception so I just let it be.

That's not a good idea if consider dumper to be a reusable component.

Cheers,
Henry


More information about the core-libs-dev mailing list