Как сказал Микелонг, это во многом зависит от того, что вы делаете. AFAIK, ни один из методов IPC не имеет собственных привязок Java, поэтому вам, вероятно, придется использовать JNI и создавать привязки самостоятельно, поэтому все различные методы примерно одинаково сложны. Если вы делаете передачу сообщений, я настоятельно рекомендую использовать очереди сообщений. Они очень просты в использовании (если у вас есть привязки) и имеют хорошую производительность. Если вам нужно «поделиться» каким-то ресурсом, то вы, вероятно, захотите использовать общую память.
Поскольку у вас что-то вроде клиента / сервера, я бы сказал, используйте очереди сообщений, доменные сокеты Unix или именованные каналы. Все они связаны с копированием данных в ядре, поэтому они работают не так быстро, как разделяемая память, но они все еще очень быстры. Если у вас есть данные, похожие на сообщения (отдельные небольшие пакеты), используйте очереди сообщений. Это, наверное, самое чистое решение. Если у вас больше потока данных, используйте каналы или сокеты. Преимущество сокетов состоит в том, что вы можете легко сделать их прозрачными для сети (например, X11) позже, если хотите, но с ними немного сложнее работать, чем с каналами. Производительность, вероятно, очень похожа.