続ByteBuffer

Cじみてまいりました。


連続領域に確保してそれを切り売りするとなると、
まぁ、例によってリファレンスカウンタ?みたいな。
Minaに含まれるByteBufferは、アロケータをカスタマイズ出来るのですが、
そのデフォルト実装がコレ。

mallocとfreeを自分でやりたいGCなんて待てないぜって漢向け。
これを眺めると、アロケータ自前実装は、面倒だなぁ…とか。


ちなみに、MinaのByteBufferを使うなら、nioには無いgetObject/putObjectと言うメソッドがあるので、初期化コストの高いオブジェクトをDyrectBufferに退避しながら、
キャッシング出来る様な気がするます。

    public ByteBuffer putObject( Object o )
    {
        int oldPos = position();
        skip( 4 ); // Make a room for the length field.
        try
        {
            ObjectOutputStream out = new ObjectOutputStream( asOutputStream() )
            {
                protected void writeClassDescriptor( ObjectStreamClass desc ) throws IOException
                {
                    writeUTF( desc.getName() );
                }
            };
            out.writeObject( o );
            out.flush();
        }
        catch( IOException e )
        {
            throw new BufferDataException( e );
        }

        // Fill the length field
        int newPos = position();
        position( oldPos );
        putInt( newPos - oldPos - 4 );
        position( newPos );
        return this;
    }

この痺れるコードが動作しても、元が取れるだけ、
サイズがでかくて初期化コストの高いオブジェクトがどれだけあるのかな…とか。
まぁ、サーバ的なモノを作る人以外には関係無いかと。