-------- 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.
>
>
> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或透露本邮件之内容。谢谢。
>

Reply via email to