предайте земле jvm [закрытую] коммуникацию

У синтаксического анализатора ANTLR действительно нет понятия правила запуска - вы можете выбрать любое правило в качестве правила запуска при его вызове (вызывая соответствующий метод, например, start(), если вы хотите начать с правила [ 111]).

Это может быть полезно, если вам нужно начать с разных правил для разных вариантов использования.

Возможно, было бы хорошей идеей называть ваше правило запуска что-то вроде startRule в вашей грамматике для удобства чтения, но это не обязательно.

7
задан Javamann 1 May 2009 в 04:40
поделиться

2 ответа

Java NIO поддерживает файлы с отображением в памяти. Если несколько карт памяти JVM отображают один и тот же файл, они могут использовать его как разделяемую память.

Вот пример отображения памяти файла.

try {
int shmSize = 1024;
RandomAccessFile file = new RandomAccessFile("shm.raw","rw");

// inialize file size
if(file.length() < shmSize) {
  byte[] tmp = new byte[shmSize];
  file.write(tmp);
  file.seek(0); // seek back to start of file.
}

// memory-map file.
FileChannel ch = file.getChannel();
MappedByteBuffer shm = ch.map(FileChannel.MapMode.READ_WRITE, 0, shmSize);
ch.close(); // channel not needed anymore.
shm.load(); // force file into physical memory.

// now use the ByteBuffer's get/put/position methods to read/write the shared memory

} catch(Exception e) { e.printStackTrace(); }

В Linux вы можете создать файл shm.raw в / dev / shm / a файловая система на основе памяти. Это поможет избежать дискового ввода-вывода.

Подробнее читайте в этой статье Введение в сопоставленный с памятью ввод-вывод в Java

Также вам все равно понадобится способ синхронизировать чтение / запись в разделяемую память. JVM отправителя должен будет сигнализировать JVM получателя, когда будет написано полное сообщение.

Использование Java NIO ' SocketChannel может быть лучше для небольших сообщений, так как получатель может быть уведомлен о получении сообщения. Совместно используемая память действительно помогает только при отправке больших сообщений.

Для IPC между JVM на разных машинах попробуйте JIPC

12
ответ дан 6 December 2019 в 15:31
поделиться

Я бы предложил вам взять посмотрите на Терракотовая . Я не знаю, будет ли это соответствовать вашим требованиям, потому что главная цель Terracotta - плавная масштабируемость («api» - это просто доступ к памяти), но у него, безусловно, есть модуль интеграции обмена сообщениями. Это с открытым исходным кодом.

Приветствия.

2
ответ дан 6 December 2019 в 15:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: