Dear,
My command test:
In my test, I start memcached with memcached -m 1024 =>1G to prevent miss cache
and infinispan with param:-Xmx1G

Monitor java memory used:
I use ubuntu and I see the memory column from "System Monitor(in Ubuntu) for Infinispan.

In my test code, I only put once time for one key ( that mean no version for data)
You can see my code test by put to memcached and infinispan with the same code(only change port):
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;

import net.spy.memcached.
MemcachedClient;

/**

 * /usr/bin/memcached -m 1024 -u nobody -p 11211 -l 127.0.0.1
 * ./startServer.sh -r memcached -p 4567
 * @author root
 */
public class ServerDemo {

    private static final String HOST = "localhost";
//    private static final int PORT = 4567;//inf
    private static final int PORT = 11211;//mem
    private static final int TOTAL_PUT = 500000;
    private static final int DATA_LENGTH = 1000;


    public static void main(String[] args) throws Exception {
        Thread t = new Thread() {

            @Override
            public void run() {
                try {
                    long beginTime = System.currentTimeMillis();
                    put(TOTAL_PUT, DATA_LENGTH);
                    long endTime = System.currentTimeMillis() - beginTime;
                    System.out.println("cost = " + endTime);
                    System.gc();
                } catch (Exception e) {
                }

            }
        };
        t.start();
    }

    private static String getStringByLength(int size) {
        String s = "";
        for (int i = 0; i < size; i++) {
            s += "1";
        }
        return s;
    }

    private static CommentItem getCommentInstance(String content) {
        int time = new Long(System.currentTimeMillis()).intValue();
        CommentItem commentItem = new CommentItem(new Long(123), 12345, 456, time, content.getBytes(), (byte) 1);
        return commentItem;
    }

    private static byte[] comment2Bytes(CommentItem commentItem) throws Exception {
        DataOutputBuffer dos = new DataOutputBuffer();
        CommentItemSerializer.getInstance().serialize(commentItem, dos);
        System.out.println("dos.getData()=" + dos.getData().length);
        return dos.getData();
    }

    private static void putComment2Cached(int keyPrefix, byte[] bytes, MemcachedClient mcc) throws Exception {
        mcc.set("node_" + keyPrefix, 3600, bytes);
        byte[] result = (byte[]) mcc.get("node_" + keyPrefix);
        DataInputStream stream = new DataInputStream(new ByteArrayInputStream(
                result));
        CommentItem getBackItem = CommentItemSerializer.getInstance().deserialize(stream);
//        if (!commentItem.equals(getBackItem)) {
//            System.out.println("fail i= node_" + keyPrefix);
//        }
    }

    private static void put(int loop, int size) throws IOException, Exception {
        MemcachedClient mcc = new MemcachedClient(new InetSocketAddress(HOST, PORT));
        String testData = getStringByLength(size);
        CommentItem commentItem = getCommentInstance(testData);
        byte[] bytes = comment2Bytes(commentItem);
        for (int i = 0; i < loop; i++) {
            putComment2Cached(i, bytes, mcc);
        }
    }
}




2011/3/10 Nguyễn Hồng Nhựt <nhutnguyenhong@gmail.com>
Dear,
I use ubuntu and I see the memory column from "System Monitor(in Ubuntu) for Infinispan.
In my test code, I only put once time and get it back to see I put ok.
You can see my code test by put to memcached and infinispan with the same code(only change port):



import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;

import net.spy.memcached.
MemcachedClient;

/**

 * /usr/bin/memcached -m 1024 -u nobody -p 11211 -l 127.0.0.1
 * ./startServer.sh -r memcached -p 4567
 * @author root
 */
public class ServerDemo {

    private static final String HOST = "localhost";
//    private static final int PORT = 4567;//inf
    private static final int PORT = 11211;//mem
    private static final int TOTAL_PUT = 500000;
    private static final int DATA_LENGTH = 1000;


    public static void main(String[] args) throws Exception {
        Thread t = new Thread() {

            @Override
            public void run() {
                try {
                    long beginTime = System.currentTimeMillis();
                    put(TOTAL_PUT, DATA_LENGTH);
                    long endTime = System.currentTimeMillis() - beginTime;
                    System.out.println("cost = " + endTime);
                    System.gc();
                } catch (Exception e) {
                }

            }
        };
        t.start();
    }

    private static String getStringByLength(int size) {
        String s = "";
        for (int i = 0; i < size; i++) {
            s += "1";
        }
        return s;
    }

    private static CommentItem getCommentInstance(String content) {
        int time = new Long(System.currentTimeMillis()).intValue();
        CommentItem commentItem = new CommentItem(new Long(123), 12345, 456, time, content.getBytes(), (byte) 1);
        return commentItem;
    }

    private static byte[] comment2Bytes(CommentItem commentItem) throws Exception {
        DataOutputBuffer dos = new DataOutputBuffer();
        CommentItemSerializer.getInstance().serialize(commentItem, dos);
        System.out.println("dos.getData()=" + dos.getData().length);
        return dos.getData();
    }

    private static void putComment2Cached(int keyPrefix, byte[] bytes, MemcachedClient mcc) throws Exception {
        mcc.set("node_" + keyPrefix, 3600, bytes);
        byte[] result = (byte[]) mcc.get("node_" + keyPrefix);
        DataInputStream stream = new DataInputStream(new ByteArrayInputStream(
                result));
        CommentItem getBackItem = CommentItemSerializer.getInstance().deserialize(stream);
//        if (!commentItem.equals(getBackItem)) {
//            System.out.println("fail i= node_" + keyPrefix);
//        }
    }

    private static void put(int loop, int size) throws IOException, Exception {
        MemcachedClient mcc = new MemcachedClient(new InetSocketAddress(HOST, PORT));
        String testData = getStringByLength(size);
        CommentItem commentItem = getCommentInstance(testData);
        byte[] bytes = comment2Bytes(commentItem);
        for (int i = 0; i < loop; i++) {
            putComment2Cached(i, bytes, mcc);
        }
    }
}


2011/3/10 Nguyễn Hồng Nhựt <nhutnguyenhong@gmail.com>

Hi Infinispan Devs,
I used memcached all time. I am research Infinispan and make a compare with memcached.
I have just make a memory test between memcached and infinispan to choose which one better(best memory saved).

I run Infinispan from command line: ./startServer.sh -r memcached -p 4567 ( I am fresh download and run it with no custom any config file)
and also memcached from command line: /usr/bin/memcached -m 1024 -u nobody -p 11211 -l 127.0.0.1

with testcase 10000 key and every key has value is byte array  with length= 1024
Infinispan : => memory: 58MB
Memcached: => memory: 14MB

with testcase 500000 key and every key  has value is byte array  with length= 1024
Infinispan : => memory: 920MB
Memcached: => memory: 565MB


In Infinispan, any config param familiar with memory cost? and how i can reduce this cost? why they have a big difference?

thanks and best regards.