Hi Kris, I think this change should be fine, but I would like Alan to comment also.
Thanks, -Chris. On 11/18/11 10:44 AM, Chris Hegarty wrote: > > > -------- Original Message -------- > Subject: Re: Suppress creation of SocksSocketImpl in SocketAdaptor's > constructor > Date: Fri, 18 Nov 2011 16:38:28 +0800 > From: Krystal Mok<rednaxel...@gmail.com> > To: 撒迦<sa...@taobao.com> > CC: jdk8-...@openjdk.java.net<jdk8-...@openjdk.java.net> > > Oops, looks like my company email stripped the attachment. > Here's that patch again: > > diff -r 00e2c88e2234 src/share/classes/sun/nio/ch/SocketAdaptor.java > --- a/src/share/classes/sun/nio/ch/SocketAdaptor.java Thu Nov 17 10:46:02 > 2011 -0800 > +++ b/src/share/classes/sun/nio/ch/SocketAdaptor.java Fri Nov 18 15:37:20 > 2011 +0800 > @@ -57,13 +57,17 @@ > // Timeout "option" value for reads > private volatile int timeout = 0; > > - // ## super will create a useless impl > - private SocketAdaptor(SocketChannelImpl sc) { > + private SocketAdaptor(SocketChannelImpl sc) throws SocketException { > + super((SocketImpl) null); > this.sc = sc; > } > > public static Socket create(SocketChannelImpl sc) { > - return new SocketAdaptor(sc); > + try { > + return new SocketAdaptor(sc); > + } catch (SocketException e) { > + throw new RuntimeException("should not reach here"); > + } > } > > public SocketChannel getChannel() { > > > - Kris > > 2011/11/18 撒迦<sa...@taobao.com> > >> Hi all, >> >> I'd like to propose the following change to JDK's sun.nio.ch.SocketAdaptor: >> >> In OpenJDK 6, 7 and 8, sun.nio.ch.SocketAdaptor is used to adapt a >> SocketChannelImpl to a java.net.Socket. >> >> A comment in the constructor of SocketAdaptor says "super will create a >> useless impl", but it actually doesn't have to. AFAICT the SocksSocketImpl >> instance created here really isn't used at all in SocketAdaptor, unless >> someone invokes non-public methods on java.net.Socket via reflection. >> >> The attached patch is to get rid of creation of the useless >> SocksSocketImpl. >> >> At a glance, creating a useless SocksSocketImpl for every SocketAdaptor >> seems innocent. But that's not the case when the allocation rate/heap >> memory pressure is high. SocksSocketImpl has a finalizer (inherited from >> PlainSocketImpl), and when: >> * old generation is large >> * there are a lot of ready-to-die SocksSocketImpl instances >> these instances can be queued up in the finalizer queue, which increases >> the heap pressure. >> >> In one of our Hadoop NameNode nodes in production, excessive >> SocksSocketImpl instances had been causing frequent CMS collections + long >> reference processing pause. Using this patch helps side-steping the problem. >> >> I don't have a bug ID for this yet. Could anyone kindly open a bug for >> this? >> >> Regards, >> Kris Mok >> Software Engineer, Taobao (http://www.taobao.com) >> >> ________________________________ >> This email (including any attachments) is confidential and may be legally >> privileged. If you received this email in error, please delete it >> immediately and do not copy it or use it for any purpose or disclose its >> contents to any other person. Thank you. >> >> >> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或透露本邮件之内容。谢谢。 >>