Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Совместное использование памяти двумя приложениями, Как это сделать? 
V
    Опции темы
Prol
Дата 11.1.2008, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Как сделать так, чтобы данные объектов были в одном приложении, а их методы выполнялись в другом приложении? Аналогично механизму share memory во FreeBSD...

Например, в запущенном приложении Keeper есть объект 

Код

public class Point {
    public int x, y;
}

...

private Point point59 = null;
point59 = new Point;

...


В запущенном приложении Utilizateur происходят операции с объектом.

Код

public class Point {
    public int x, y;
}

...
point59.x = 112 / point59.y;
...



Приложение Utilizateur использует методы и оперирует над данными объекта point59 в другом приложении Keeper.
Это нужно для того, чтобы если Utilizateur попытается чего-то сделать неправильно, например завалится от деления на ноль, то Keeper будет продолжать работу, сохранив все данные.

Как это сделать?

Заранее признателен за подсказку в направлении, куда копать...

PM MAIL WWW ICQ   Вверх
jManiak
Дата 11.1.2008, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



rmi?
PM MAIL ICQ   Вверх
Prol
Дата 11.1.2008, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



rmi?

RMI сериализует/десериализует объекты, и фактически Utilizateur будет оперировать своим point59.
А нужно, чтобы Utilizateur оперировал объектом point59, который принадлежит приложению Keeper.
PM MAIL WWW ICQ   Вверх
Prol
Дата 11.1.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Например, на одной JVM на одном хосте выполняются два приложения. Может ли одно приложение получить прямой доступ к объектам другого приложения и оперировать с ними, как со своими объектами в пределах одной JVM?
PM MAIL WWW ICQ   Вверх
tux
Дата 11.1.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(Prol @  11.1.2008,  08:42 Найти цитируемый пост)
Например, на одной JVM на одном хосте выполняются два приложения. Может ли одно приложение получить прямой доступ к объектам другого приложения и оперировать с ними, как со своими объектами в пределах одной JVM? 

Может. Но для этого нужно слишком много условностей. Во-первых, объект класса нужно сделать статическим. Во-вторых, должен существовать один экземпляр класса. Хочу напомнить, что в Java возможна сложная иерархия класслоудеров и экземпляров классов может быть много, следовательно, и экземпляров статических классов тоже. Для того, чтобы был один экземпляр, в JVM должен быть только один экземпляр файла класса. Поэтому лучше поискать альтернативную возможность хранения общих данных. Например, базу данных или сериализацию на диск.
PM MAIL Skype GTalk Jabber YIM   Вверх
Prol
Дата 11.1.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(tux @ 11.1.2008,  10:38)
Поэтому лучше поискать альтернативную возможность хранения общих данных. Например, базу данных или сериализацию на диск.

Речь идёт не о хранении общих данных. Для этого достаточно СУБД. Но СУБД не хранит методы объектов, насколько я знаю, методы не сериализуются.

Смысл shared memory в данном случае в том, что выход из строя приложения Utilizateur не приведёт к потере данных, которые находятся в работающем приложении Keeper. Ведь приложение Utilizateur использует не свои объекты, а объекты (методы и данные) Keeper'a.

Вот например в SAP JVM сделано так, что разные приложения могут помещать объекты в shared memory и совместно использовать эти объекты. 
PM MAIL WWW ICQ   Вверх
LSD
Дата 11.1.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Можно сделать через MappedByteBuffer (правда работать с ним не удобно):
Код

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;

public class ShareData
{
  public static final File FILE;

  static
  {
    File tempDir = new File(System.getProperty("java.io.tmpdir"));
    FILE = new File(tempDir, "shared_data.bin");
  }

  public static class Keeper extends Thread
  {
    private static volatile boolean working = true;

    public static void main(String[] args) throws IOException
    {
      System.out.println("Keeper started");
      RandomAccessFile in = new RandomAccessFile(FILE, "rw");
      in.setLength(8);
      FileChannel channel = in.getChannel();
      MappedByteBuffer map = channel.map(MapMode.READ_WRITE, 0, 8);
      while(working)
      {
        map.rewind();
        long value = map.getLong();
        System.out.println("value = " + value);
        try
        {
          Thread.sleep(500);
        }
        catch(InterruptedException e)
        {
        }
      }
      channel.close();
      in.close();
      System.out.println("Keeper stopped");
    }

    @Override
    public void run()
    {
      working = false;
      try
      {
        Thread.sleep(1000);
      }
      catch(InterruptedException e)
      {
      }
    }
  }

  public static class Utilizateur extends Thread
  {
    private static volatile boolean working = true;

    public static void main(String[] args) throws IOException
    {
      System.out.println("Utilizateur started");
      RandomAccessFile in = new RandomAccessFile(FILE, "rw");
      in.setLength(8);
      FileChannel channel = in.getChannel();
      MappedByteBuffer map = channel.map(MapMode.READ_WRITE, 0, 8);
      while(working)
      {
        map.rewind();
        map.putLong(System.currentTimeMillis());
        try
        {
          Thread.sleep(100);
        }
        catch(InterruptedException e)
        {
        }
      }
      channel.close();
      in.close();
      System.out.println("Utilizateur stopped");
    }

    @Override
    public void run()
    {
      working = false;
      try
      {
        Thread.sleep(1000);
      }
      catch(InterruptedException e)
      {
      }
    }
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 11.1.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



LSD, шарить нужно не данные, а объекты :о)
Из вашего кода я не понял, как Утилизатор сможет пользоваться объектами Кипера.
PM MAIL WWW ICQ   Вверх
Prol
Дата 11.1.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Попробую переформулировать на живом работающем примере на С.

Запускаю:

prol@corphangar> CorporationApplication -Keeper

Приложение запускается, распределяет память и остаётся в режиме кипера, ничего не делает.

Запускаю вторую копию этого же приложения

prol@corphangar> CorporationApplication -Utilizateur

С помощью механизма shm второе приложение работает над данными первого приложения с помощью функций первого приложения, в том числе делает new и dispose, новые объекты создаются и удаляются в общей shared memory, и первое приложение, которое ничего не делает в sleep'e, при этом владеет всеми новыми объектами.

Так как первое приложение ничего не делает, то оно и не падает. А вот если второе приложение свалится по какой-либо причине, то в первом приложении останутся все данные целыми. :о)

Как сделать такое на Java? 
Чтобы второе приложение использовало объекты первого приложения?




PM MAIL WWW ICQ   Вверх
LSD
Дата 11.1.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Объекты шарить между разными JVM - нельзя (во всяком случае стандартные реализации этого не позволяют).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 11.1.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(LSD @ 11.1.2008,  12:43)
Объекты шарить между разными JVM - нельзя (во всяком случае стандартные реализации этого не позволяют).

А можно ли шарить объекты между приложениями внутри одной JVM?
PM MAIL WWW ICQ   Вверх
LSD
Дата 11.1.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Prol @  11.1.2008,  12:51 Найти цитируемый пост)
А можно ли шарить объекты между приложениями внутри одной JVM?

Да, только они должны использовать один и тот же класс лоадер.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 11.1.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(LSD @ 11.1.2008,  12:59)
Да, только они должны использовать один и тот же класс лоадер.

Извините, я ещё не владею достеменно понятиями Java, поэтому объясните, как в одной JVM могут быть разные класслоадеры.

И пожалуйста, приведите пример, как два приложения могут пользоваться одним объектом в одной JVM в виде кусочка кода...
PM MAIL WWW ICQ   Вверх
LSD
Дата 11.1.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Prol @  11.1.2008,  13:25 Найти цитируемый пост)
Извините, я ещё не владею достеменно понятиями Java, поэтому объясните, как в одной JVM могут быть разные класслоадеры.

Очень даже запросто, если это какой-то  J2EE сервер, то они даже будут разными. Но в обычном приложении он как правило один.


Цитата(Prol @  11.1.2008,  13:25 Найти цитируемый пост)
И пожалуйста, приведите пример, как два приложения могут пользоваться одним объектом в одной JVM в виде кусочка кода... 

Да обычный синглетон например:
Код

Runtime.getRuntime()

все потоки используют один и тот же экземпляр Runtime.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 11.1.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(LSD @ 11.1.2008,  13:36)
Цитата(Prol @  11.1.2008,  13:25 Найти цитируемый пост)
И пожалуйста, приведите пример, как два приложения могут пользоваться одним объектом в одной JVM в виде кусочка кода... 

Да обычный синглетон например:
Код

Runtime.getRuntime()

все потоки используют один и тот же экземпляр Runtime.

Как самому сделать такой "синглетон", одни объект, который могут использовать одновременно два моих приложения?
PM MAIL WWW ICQ   Вверх
seth
Дата 11.1.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

Репутация: нет
Всего: 1



а с помощью JNDI не получится?


--------------------
PM MAIL   Вверх
Prol
Дата 11.1.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(seth @ 11.1.2008,  14:33)
а с помощью JNDI не получится?

JNDI хранит сериализованные объекты (как я понял, методы не сериализуются). 

Но я веду речь не о том, как хранить совместно используемые данные (свойства объектов), а как использовать один и тот же объект из разных приложений одновременно :о)
PM MAIL WWW ICQ   Вверх
batigoal
Дата 11.1.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  11.1.2008,  14:42 Найти цитируемый пост)
Как самому сделать такой "синглетон", одни объект, который могут использовать одновременно два моих приложения? 

С помощью статической переменной:

Код

public class MySingleton {
  private static MySingleton instance;
  private MySingleton() { }
  
  public static MySingleton getInstance() {
    if( instance == null ) {
      instance = new MySingleton();
    }
    return instance;
  }
}


Это сообщение отредактировал(а) batigoal - 11.1.2008, 14:55


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Prol
Дата 11.1.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 11.1.2008,  14:55)
Цитата(Prol @  11.1.2008,  14:42 Найти цитируемый пост)
Как самому сделать такой "синглетон", одни объект, который могут использовать одновременно два моих приложения? 

С помощью статической переменной:

Код

public class MySingleton {
  private static MySingleton instance;
  private MySingleton() { }
  
  public static MySingleton getInstance() {
    if( instance == null ) {
      instance = new MySingleton();
    }
    return instance;
  }
}

Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о)

А как сделать синглтон, который создан одним приложением и виден из другого приложения, которое в это время запущено одновременно с приложением, которое создало синглтон?
PM MAIL WWW ICQ   Вверх
batigoal
Дата 11.1.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  11.1.2008,  16:03 Найти цитируемый пост)
Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о)

Нет, если класс для обоих приложений будет загружен одним и тем же загрузчиком классов.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Prol
Дата 11.1.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 11.1.2008,  15:06)
Цитата(Prol @  11.1.2008,  16:03 Найти цитируемый пост)
Дык оно же будет создавать новый синглтон для каждого приложения, которое пользуется им :о)

Нет, если класс для обоих приложений будет загружен одним и тем же загрузчиком классов.

Но ведь в одной JVM один загрузчик классов?
То есть если я сейчас запущу приложение c вашим синглтоном, то второе запущенное приложение его увидит и не будет делать new?

Это сообщение отредактировал(а) Prol - 11.1.2008, 15:19
PM MAIL WWW ICQ   Вверх
Maksym
Дата 11.1.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Prol
Ты не создаешь новый экземпляр через new в этом случае, а получешь единственный через MySingleton.getInstance() -- в это суть паттерна: используется только один экземпляр класса, который хранится в статике.
PM MAIL   Вверх
Prol
Дата 11.1.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(Maksym @ 11.1.2008,  15:35)
Prol
Ты не создаешь новый экземпляр через new в этом случае, а получешь единственный через MySingleton.getInstance() -- в это суть паттерна: используется только один экземпляр класса, который хранится в статике.

Извините, я новик, у меня не получается сделать приложение с вашим синглтоном :о(

Код

public static void main(String[] args) {
          final MySingleton Sing1; // вот тут компилер ругается что the local variable Sing1 is never read
          System.out.println("S1 started");
}

PM MAIL WWW ICQ   Вверх
batigoal
Дата 11.1.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Это просто предупреждение, что объявленная переменная, в общем-то, не нужна. Оно не препятствует выполнению программы.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
COVD
Дата 11.1.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Prol, вы явно хотите использовать java не по назначению, т.е. преодолеть существующие защитные механизмы java, используемые для повышения надежности программ. Идея сделать на java как на C - не продуктивна.  
Если работа с данными происходит в отдельном потоке и происходит деление на ноль, то выбрасывается исключение и этот поток может спокойно умереть. Если этот поток не модифицировал данные, то данные будут в сохранности и приложение продолжает функционировать. 

Это сообщение отредактировал(а) COVD - 11.1.2008, 17:50
PM MAIL   Вверх
tux
Дата 11.1.2008, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(Prol @  11.1.2008,  15:18 Найти цитируемый пост)
Но ведь в одной JVM один загрузчик классов?

Нет, не один.
PM MAIL Skype GTalk Jabber YIM   Вверх
Stampede
Дата 11.1.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 24
Всего: 144



Цитата(Prol @  11.1.2008,  02:42 Найти цитируемый пост)
Запускаю:

prol@corphangar> CorporationApplication -Keeper

Приложение запускается, распределяет память и остаётся в режиме кипера, ничего не делает.

Запускаю вторую копию этого же приложения

prol@corphangar> CorporationApplication -Utilizateur

С помощью механизма shm второе приложение работает над данными первого приложения с помощью функций первого приложения, в том числе делает new и dispose, новые объекты создаются и удаляются в общей shared memory, и первое приложение, которое ничего не делает в sleep'e, при этом владеет всеми новыми объектами.

Так как первое приложение ничего не делает, то оно и не падает. А вот если второе приложение свалится по какой-либо причине, то в первом приложении останутся все данные целыми. :о)


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

Поэтому предлагаю не шифроваться, а изложить задачу в более исходном виде, не замкнутом на детали реализации. Возможно, совместными усилиями отыщется и более адекватное решение.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Prol
Дата 11.1.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(Stampede @ 11.1.2008,  20:42)
А откуда такая увереность, что приложение-утилизатор, свалившись, не оставит после себя полную абракадабру в приложении-хранителе? Это, я вам скажу, более чем зыбкая посылка.

Не оставит, потому что снимать его будет ОС за оперейшен эксепшен или другое подобное.

Точнее, если второе приложение оставило белиберду, то и первое в этом же месте оставило бы точно такую же белиберду :о) Первое и второе приложение совершенно одинаковы. А значит надо править неправильный код приложения.

Но вот в случае исключительных ситуаций, связанных с вводом-выводом, делением на ноль или подобным, данные сохраняют целостность, а ОС убивает виновника, то есть второе приложение, сохранив при этом работающее первое, которое мне присылает смс, я смотрю, почему ОС убила второе приложение, если исправления в коде не требуются, то перезапускаю второе приложение, которое опять подхватывает shared memory, находящуюся в первом приложении и работает :о)



Это сообщение отредактировал(а) Prol - 11.1.2008, 22:29
PM MAIL WWW ICQ   Вверх
intr
  Дата 12.1.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



RMI или ему подобное. Другие варианты извращение...
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Prol
Дата 12.1.2008, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 12.1.2008,  06:27)
RMI или ему подобное. Другие варианты извращение...

Как вы себе представляете работу RMI с тремя миллионами объектов? Сколько будет длиться сериализация/десериализация трёх миллионов объектов?

А у меня уже несколько лет работают реалтайм приложения на С по схеме с шаред мемори. Одно держит методы и данные, а второе использует методы и данные первого приложения прямо в памяти. Когда второе приложение падает, первое продолжает работать, и сохранять данные тысяч пользователей.

Если вы скажете, что в Java такое невозможно, то я вам приведу в пример SAP JVM, которая позволяет шарить объекты прямо в памяти между несколькими JVM.

Это сообщение отредактировал(а) Prol - 12.1.2008, 06:48
PM MAIL WWW ICQ   Вверх
intr
Дата 12.1.2008, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Цитата(Prol @ 12.1.2008,  11:46)
Цитата(intr @ 12.1.2008,  06:27)
RMI или ему подобное. Другие варианты извращение...

Как вы себе представляете работу RMI с тремя миллионами объектов? Сколько будет длиться сериализация/десериализация трёх миллионов объектов?

А у меня уже несколько лет работают реалтайм приложения на С по схеме с шаред мемори. Одно держит методы и данные, а второе использует методы и данные первого приложения прямо в памяти. Когда второе приложение падает, первое продолжает работать, и сохранять данные тысяч пользователей.

Если вы скажете, что в Java такое невозможно, то я вам приведу в пример SAP JVM, которая позволяет шарить объекты прямо в памяти между несколькими JVM.

1. Зачем нужна сериализация/десериализация трех миллионов объектов. Это равносильно выгрузке 4 гиговой БД в ОЗУ!
2. Судя по проблеме надо шарить методы для других приложений, а не три миллиона объектовsmile
3. Приложение которое сохраняет объекты это обычно БД!

Вопросы:
1. Вы пишете свою базу данных? 
2. Для каких целей  нужна сериализация/десериализация трех миллионов объектов?
3. Вы держите в ОЗУ три миллиона объектов?

p/s
Такое ощущение что архитектура приложения очень сильно хромает!
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Prol
Дата 12.1.2008, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 12.1.2008,  06:57)
1. Зачем нужна сериализация/десериализация трех миллионов объектов. 

Потому что RMI сериализует/десериализует объекты между приложениями.

Добавлено через 1 минуту и 52 секунды
Цитата(intr @ 12.1.2008,  06:57)
 Это равносильно выгрузке 4 гиговой БД в ОЗУ!

Шаман! smile 
PM MAIL WWW ICQ   Вверх
intr
Дата 12.1.2008, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Цитата(Prol @ 12.1.2008,  12:01)
Цитата(intr @ 12.1.2008,  06:57)
1. Зачем нужна сериализация/десериализация трех миллионов объектов. 

Потому что RMI сериализует/десериализует объекты между приложениями.

Ключевое слово здесь три миллиона объектов, зачем так много передавать?

--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Prol
Дата 12.1.2008, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 12.1.2008,  06:57)
3. Вы держите в ОЗУ три миллиона объектов?

Больше... :о)

Это риалтаймовые объекты, свойства которых обновляются от контроллеров, которые присылают данные с датчиков... Их нельзя не держать в памяти, потому что моё приложение обязано откликнуться на любое событие не позднее, чем через восемь миллисекунд. Дропать события тоже нельзя, за это тюрьма.

Добавлено через 13 минут и 5 секунд
Цитата(intr @ 12.1.2008,  07:07)
Ключевое слово здесь три миллиона объектов, зачем так много передавать?

Чтобы при снятии системой одного из приложений, другое сохранило доступ ко _всем_ объектам, с которыми они работали, и возобновило работу.
PM MAIL WWW ICQ   Вверх
intr
Дата 12.1.2008, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



В данном случае я бы использовал очень быстрый сервер БД (на очень быстром железе), возможно Oracle...

ИМХО Java не очень подходить для систем реального времени, по крайней мере с использованием стандартной Java машины от SUN. 

p/s
А что делать с данными в ОЗУ если даст сбой железо или выключат свет? тюрьма? можно не отвечатьsmile
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Prol
Дата 12.1.2008, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 12.1.2008,  07:28)
ИМХО Java не очень подходить для систем реального времени, по крайней мере с использованием стандартной Java машины от SUN.

:о)))

Почему же? Байткод Java ненамного уступает ассемблеру по скорости выполнения, но писать на нём намного легче. Кроме того, у Java отличная переносимость. То, что у SUN ещё нету шаред мемори - это вопрос времени и требований разработчиков...

Добавлено через 1 минуту и 9 секунд
Цитата(intr @ 12.1.2008,  07:28)
А что делать с данными в ОЗУ если даст сбой железо или выключат свет? тюрьма? можно не отвечатьsmile

За сбой питания я не отвечаю :о) Пусть хоть там все передеруцца...
PM MAIL WWW ICQ   Вверх
tux
Дата 12.1.2008, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(Prol @  12.1.2008,  07:08 Найти цитируемый пост)
моё приложение обязано откликнуться на любое событие не позднее, чем через восемь миллисекунд

А каким образом вы решили проблему со сборщиком мусора в Sun JVM? Его работа может занять гораздо больше 8 миллисекунд, причем в неопределенные моменты времени.
PM MAIL Skype GTalk Jabber YIM   Вверх
Prol
Дата 12.1.2008, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(tux @ 12.1.2008,  08:15)
А каким образом вы решили проблему со сборщиком мусора в Sun JVM? Его работа может занять гораздо больше 8 миллисекунд, причем в неопределенные моменты времени.

Мои приложения на С.

Я хочу их портануть на Java, потому что мне так кажется удобнее передать моему наследнику и уйти на пенсию. :о)

На Питон тоже можно, но если эти охламоны видят в операторе (_*_) разорванную жопу, а не умножение предыдущего выражение самого на себя (возведение в квадрат), то уж пусть лучше пишут на Java...

Это сообщение отредактировал(а) Prol - 12.1.2008, 08:33
PM MAIL WWW ICQ   Вверх
tux
Дата 12.1.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(Prol @  12.1.2008,  08:23 Найти цитируемый пост)
Я хочу их портануть на Java, потому что мне так кажется удобнее передать моему наследнику и уйти на пенсию.

Боюсь это плохо кончится для наследника. Сборщик мусора - это как раз одна из тех причин, по которой обычные JVM не используются в приложениях реального времени. Есть спецификация Real-time Java, начать можно отсюда - http://en.wikipedia.org/wiki/Real_time_Java.
PM MAIL Skype GTalk Jabber YIM   Вверх
Prol
Дата 12.1.2008, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(tux @ 12.1.2008,  08:27)
Боюсь это плохо кончится для наследника. Сборщик мусора - это как раз одна из тех причин, по которой обычные JVM не используются в приложениях реального времени. Есть спецификация Real-time Java, начать можно отсюда - http://en.wikipedia.org/wiki/Real_time_Java.


Я знаком с нею - она дропает входящие события, типа я не видела того, на что не успеваю отвечать.

Поэтому я и спросил про шаред мемори - проверенный механизм.
PM MAIL WWW ICQ   Вверх
tux
Дата 12.1.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Мне как-то не совсем понятен разговор про shared memory, рецепт которой, кстати, уже предложили - синглтон, но с ограничениями по загрузке классов о которой я говорил, если сама Java не подходит под задачу. Или таки 8 миллисекунд - это не жесткое ограничение?
PM MAIL Skype GTalk Jabber YIM   Вверх
batigoal
Дата 12.1.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  12.1.2008,  09:35 Найти цитируемый пост)
Я знаком с нею - она дропает входящие события, типа я не видела того, на что не успеваю отвечать.

Насколько я знаю, этим можно управлять.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Maksym
Дата 12.1.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 14
Всего: 62



Prol
Возможно я пропустил.. А в каком окружении работает ваше приложение (ОС, железо)? И куда физически приходит инфомация с датчиков (порты)? Интересно. Если не секрет.

ЗЫ. Насколько я знаю, для реалтаймовых систем используются заточенные под это дело операционный системы, типа QNX.
PM MAIL   Вверх
serger
Дата 14.1.2008, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Ну вы развели!..  smile

Надо начать с описания задания. Что нужно сделать конкретно. А то завели спор, как микроскопом гвозди забивать..
Теоретические споры тоже умесны, но до определённого предела. Вроде он уже достигнут.

Нужны факты.  smile 

ps. Построить можно что угодно, но насколько рационально.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 14.1.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(Maksym @ 12.1.2008,  15:30)
Prol
Возможно я пропустил.. А в каком окружении работает ваше приложение (ОС, железо)? И куда физически приходит инфомация с датчиков (порты)? Интересно. Если не секрет.

ЗЫ. Насколько я знаю, для реалтаймовых систем используются заточенные под это дело операционный системы, типа QNX.

FreeBSD 4.12
Железо нормальное :о)

Данные приходят на сетевой порт :о) Трафик порядка терабайта в месяц :о)

Добавлено через 2 минуты и 50 секунд
Цитата(serger @ 14.1.2008,  09:01)
Надо начать с описания задания. Что нужно сделать конкретно. 

Не имеет значения, что делает приложение.
Я описал работающий метод защиты от сбоев приложения с использованием механизма shared memory и спросил, возможно ли сделать такое не для приложения на С, а для приложения на Java ? 
PM MAIL WWW ICQ   Вверх
powerOn
Дата 14.1.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



По поводу расшаривания объектов, есть предложение посмотреть в сторону JMX (Java Management Extensions). Я с этой технологией не работал, но на сколько знаю, она позволяет одной JVM подключиться к другой и, грубо говоря, дернуть метод у объекта. В целом JMX создавалась как средство мониторинга Java приложений.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
serger
Дата 14.1.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Цитата(Prol @ 14.1.2008,  09:34)
Не имеет значения, что делает приложение.
Я описал работающий метод защиты от сбоев приложения с использованием механизма shared memory и спросил, возможно ли сделать такое не для приложения на С, а для приложения на Java ?

Банальный вопрос а зачем?

Ещё хуже. Зачем делать так же как на с?

 smile,  но не совсем..
Язык определяет мышление. Нельзя на одном писать средствами другого.

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


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
w1nd
Дата 14.1.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(powerOn @  14.1.2008,  10:02 Найти цитируемый пост)
В целом JMX создавалась как средство мониторинга Java приложений.

Как средство управления с универсальным интерфейсом.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
serger
Дата 14.1.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5





--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
serger
Дата 14.1.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



около 400к данных в секунду приходит?



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 14.1.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(serger @ 14.1.2008,  11:39)
около 400к данных в секунду приходит?

Это суммарный входящий/исходящий. Пропорция примерно 100к входящего на 300к исходящего от приложения в секунду.

Добавлено через 11 минут и 40 секунд
Цитата(serger @ 14.1.2008,  10:20)
Цитата(Prol @ 14.1.2008,  09:34)
Не имеет значения, что делает приложение.
Я описал работающий метод защиты от сбоев приложения с использованием механизма shared memory и спросил, возможно ли сделать такое не для приложения на С, а для приложения на Java ?

Банальный вопрос а зачем?

Как зачем?

Затем, чтобы обеспечить сохранность данных, разделяемых двумя приложениями, при любых практически сбоях одного из приложений. :о)
PM MAIL WWW ICQ   Вверх
powerOn
Дата 14.1.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Prol @  14.1.2008,  22:30 Найти цитируемый пост)
Пропорция примерно 100к входящего на 300к исходящего от приложения в секунду.


Цитата(Prol @  14.1.2008,  22:30 Найти цитируемый пост)
Затем, чтобы обеспечить сохранность данных, разделяемых двумя приложениями, при любых практически сбоях одного из приложений. :о) 


Большинство из БД могут удовлетворить этим требованиям. Например Apache Derby (Java DB) прекрастно с этим справится. Просто настройте 2 приложения работать с одной БД. Более того, при работе с БД, вы имеете возможность сохранить данные даже при крахе обоих приложений.

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


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
batigoal
Дата 15.1.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(powerOn @  15.1.2008,  00:46 Найти цитируемый пост)
Хотя, честное слово, ума не приложу, в чем может быть причина, что одно из приложений упадет...

Ну как раз тут-то у меня сомнений нет, redundancy обеспечивать нужно. Вот только что толку от двух экземпляров программ, запущенных на одной машине, мне неясно. Умрет диск - и до свиданья. Так что лучше обеспечивать беперебойность кластеризацией (базы, или application-серверов, или каких-то самописных программ).


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
COVD
Дата 15.1.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Банальный вопрос а зачем?


праивильный ответ 

Цитата

Мои приложения на С.

Я хочу их портануть на Java, потому что мне так кажется удобнее передать моему наследнику  ...



PM MAIL   Вверх
Prol
Дата 15.1.2008, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Ок, я понял, что не могу доходчиво донести. Попробую по другому.

Фаза инициализации более трёх миллионов объектов в памяти занимает более 15 минут. Они читаются из БД и размещаются в памяти одним приложением. В случае, если ОС снимет это приложение, то время повторного перезапуска займёт те же более 15 минут, каковое время недопустимо по требованию заказчика.

Поэтому я запускаю две копии одного приложения. Первая копия при первом старте тратит 15 минут на чтение и размещение объектов в shared memory памяти и падает в sleep.
После того, как я вижу, что первое приложение отинитилось, то запускаю вторую копию этого же приложения. 
Поскольку оба приложения используют shared memory, то второе приложение (оно точно такое же по коду как и первое) получает уже отиниченную память со всеми тремя миллионами объектами и приступает к отработке очереди сообщений всего за одну секунду.

В случае сбоя в приложении, ОС снимает именно то приложение, в контексте которого произошёл сбой, то есть второе, потому что именно оно что-то делает, а первое остаётся в слипе, сохраня всю память со всеми тремя миллионами объектов в текущем состоянии обработки.
Рестартовав второе приложение за одну секунду, оно продолжает работать, откатив последнюю транзакцию.

Можно ли так сделать на Java?

Добавлено через 3 минуты и 32 секунды
Цитата(batigoal @ 15.1.2008,  00:11)
Ну как раз тут-то у меня сомнений нет, redundancy обеспечивать нужно. Вот только что толку от двух экземпляров программ, запущенных на одной машине, мне неясно. Умрет диск - и до свиданья. 

Если умрёт диск (это тоже неважно, потому что диск не используется), ОС снимет второе приложение по сбою ввода-вывода, но первое приложение останется в памяти и сохранит все данные :о)
PM MAIL WWW ICQ   Вверх
Prol
Дата 15.1.2008, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Грубо говоря, можно ли примерно так? :

Код

class Keeper {
    long oneGigabyteArea = 1000000000;
    global SharedMemory myarea = new SharedMemory(oneGigabyteArea);
    public static void main(String args[]) {
         World earth = myarea.new World();
         Man ivanov = myarea.new Man();
    }
}

class Utilizateur {
    global SharedMemory myarea = Keeper.myarea;
    public static void main(String args[]) {
         World earth = myarea.earth;
         Man petrov = myarea.new Man();
         // теперь у нас в шаред мемори есть Иванов и Петров, доступные из обоих приложений.
         // если  JVM завершит приложение Utilizateur, то в Keeper.myarea всё равно остануться 
         // и Иванов и Петров.
    }
}




Это сообщение отредактировал(а) Prol - 15.1.2008, 04:16
PM MAIL WWW ICQ   Вверх
intr
Дата 15.1.2008, 04:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Дальше небольшой smile 

Помню пришлось дорабатывать код написанный бывшими PHPшниками, это был их первый большой проект на Java. 
Таких извращений в коде я больше никогда не виделsmile Да кстати их проект был переписан с PHP на Java:)

p/s
а оно надо переписывать с си на Java? Ведь работает и устраивает заказчика. А если код стабилен то проще найти нормального сишника!

p/s/s
А сборка мусора это действительно большие грабли для реалтаймовых системsmile У меня томкет всегда за разное время обрабатывает запросы, иногда бывает что время отличается на порядок (для тестового приложения без бд).
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
serger
Дата 15.1.2008, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Цитата(Prol @ 15.1.2008,  02:10)
Можно ли так сделать на Java?

 smile 
А может ли волк понять овцу?

И может ли овца стать волком?

Задачи надо решать средствами языка, иначе будет.. ну что-то на 5 точке ;)

Те я хочу сказать, что простой переделкой кода тут не обойдёшься. Надо переделывать архитектуру системы с точки зрения java и как это на java делается.
Готовы Вы на это пойти, или нет - это Вам решать.

Ну и есть принцип. Работает, не трожь!


Это сообщение отредактировал(а) serger - 15.1.2008, 06:27


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 15.1.2008, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(intr @ 15.1.2008,  04:26)
p/s/s
А сборка мусора это действительно большие грабли для реалтаймовых системsmile У меня томкет всегда за разное время обрабатывает запросы, иногда бывает что время отличается на порядок (для тестового приложения без бд).

Не такие уж и большие грабли - этот garbage collector.
По крайней мере его можно заставить убирать мусор не когда ему требуется, а когда нам требуется.

Код

class Demo {
   public static void main(String args[]) {
      // получаем ссылку на текущее выполняемое приложение в JVM
      Runtime currentApp = Runtime.getRuntime();
      // там где нужно, вызываем сборщик мусора для этого приложения
      currentApp.gc();
   }
}

PM MAIL WWW ICQ   Вверх
serger
Дата 15.1.2008, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



это не так
Это лишь уведомление о необходимости - jvm САМА решает когда запускать.


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 15.1.2008, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(serger @ 15.1.2008,  07:14)
это не так
Это лишь уведомление о необходимости - jvm САМА решает когда запускать.

gc() - принудительный вызов сборщика мусора.
Когда управление выходит из вызванного gc(), мусор уже убран.

Код

     /** java.lang.Runtime
     * Runs the garbage collector.
     * Calling this method suggests that the Java virtual machine expend 
     * effort toward recycling unused objects in order to make the memory 
     * they currently occupy available for quick reuse. When control 
     * returns from the method call, the virtual machine has made 
     * its best effort to recycle all discarded objects. 
     * <p>
     * The name <code>gc</code> stands for "garbage 
     * collector". The virtual machine performs this recycling 
     * process automatically as needed, in a separate thread, even if the 
     * <code>gc</code> method is not invoked explicitly.
     * <p>
     * The method {@link System#gc()} is the conventional and convenient 
     * means of invoking this method. 
     */
     public native void gc();


PM MAIL WWW ICQ   Вверх
batigoal
Дата 15.1.2008, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Prol, это ошибка. Вызов сборщика мусора не гарантирован ВАЩЕ. Кое-как им можно управлять с помощью ключей запуска JVM, но это весьма ограниченное управление.

Раньше еще использовался такой прием - вызов gc() несколько раз подряд. Сейчас даже он уже не прокатывает.

Это сообщение отредактировал(а) batigoal - 15.1.2008, 09:40


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
serger
Дата 15.1.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



да даже если бы и срабатывал сразу, к чему это приводило бы?

Вот тут сайт про JVM.
http://blogs.sun.com/vmrobot/category/GC

или вот есть такие шаманства (отсюда):
Следующий метод освобождает всю возможную память:
Код

public static void fullGC() {
     Runtime rt = Runtime.getRuntime();
     long isFree = rt.freeMemory();
     long wasFree;
     do {
          wasFree = isFree;
          rt.gc();
          isFree = rt.freeMemory();
     } while (isFree >> wasFree);
     rt.runFinalization();
}



Это сообщение отредактировал(а) serger - 15.1.2008, 09:57


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 15.1.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 15.1.2008,  09:38)
Prol, это ошибка. Вызов сборщика мусора не гарантирован ВАЩЕ. Кое-как им можно управлять с помощью ключей запуска JVM, но это весьма ограниченное управление.

Раньше еще использовался такой прием - вызов gc() несколько раз подряд. Сейчас даже он уже не прокатывает.

Что значит "ошибка"? В одном из базовых классов Java ошибка?

Его нельзя вызывать несколько раз подряд, это асинхронное событие имеющее длительно время исполнения. Сборщик мусора нужно вызывать не в основном потоке приложения, а делать для него отдельный поток и пользоваться как при асинхронном вводе-выводе, наверна, да? :о)
PM MAIL WWW ICQ   Вверх
intr
Дата 15.1.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Вообщем пообщался с одним умным человекомsmile

gc() не просто удалят все неиспользуемые объекты из памяти он при вызове решает стоит удалять объекты из пямяти или нет на основе времени жизни объекта, количества свободной (занятой) ОЗУ и т.д.

то есть он попробует почистить памятьsmile но то что он удалит все неиспользуемые объекты он не обещает.

Так по крайней мере в стандартной Java машинеsmile

p/s
Кстати если нужен нормальный runtaime и адекватное время исполнение, то скорее всего надо использовать специальное железо от SUN и специальную сборку Java машины. Но стандартная сборка Java машины для этого точно не подходит! Но это ИМХО.
--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
batigoal
Дата 15.1.2008, 14:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  15.1.2008,  15:03 Найти цитируемый пост)
Его нельзя вызывать несколько раз подряд,

Что значит "нельзя"? Можно. Но исполняться оно будет долго.

Цитата(Prol @  15.1.2008,  15:03 Найти цитируемый пост)
Что значит "ошибка"? В одном из базовых классов Java ошибка?

Ошибка заложена уже в самой идее - управлять памятью в managed-языке. Приложение не может управлять своей выполняющей средой, оно может лишь рекомендовать ей что-то сделать, что и подтвержадется приведенным куском доки:
Цитата(Prol @  15.1.2008,  08:29 Найти цитируемый пост)
Calling this method suggests that the Java virtual machine ...


Цитата(Prol @  15.1.2008,  15:03 Найти цитируемый пост)
Сборщик мусора нужно вызывать не в основном потоке приложения, а делать для него отдельный поток 

Зачем? В том же фрагменте написано:
Цитата(Prol @  15.1.2008,  08:29 Найти цитируемый пост)
 The virtual machine performs this recycling ... in a separate thread


Рекомендую почитать статьи по тюнингу сборщика мусора, в Интернете их немало.

Добавлено через 1 минуту и 21 секунду
Цитата(intr @  15.1.2008,  15:24 Найти цитируемый пост)
Кстати если нужен нормальный runtaime и адекватное время исполнение, то скорее всего надо использовать специальное железо от SUN и специальную сборку Java машины. Но стандартная сборка Java машины для этого точно не подходит! Но это ИМХО. 

Для этого и создана Real-Time Java.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
intr
Дата 15.1.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 18.12.2005

Репутация: 1
Всего: 2



Вообщем пообщался с одним умным человекомsmile

gc() не просто удалят все неиспользуемые объекты из памяти он при вызове решает стоит удалять объекты из пямяти или нет на основе времени жизни объекта, количества свободной (занятой) ОЗУ и т.д.

то есть он попробует почистить памятьsmile но то что он удалит все неиспользуемые объекты он не обещает.

Так по крайней мере в стандартной Java машинеsmile

p/s
Кстати если нужен нормальный runtaime и адекватное время исполнение, то скорее всего надо использовать специальное железо от SUN и специальную сборку Java машины. Но стандартная сборка Java машины для этого точно не подходит! Но это ИМХО.


--------------------
Исследователь бытия и по совместительству Java-developer
PM MAIL WWW Skype GTalk   Вверх
Prol
Дата 15.1.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Мы отвлеклись от темы. :о)

Как обратиться к объекту (экземпляру класса), находящемуся в другом приложении?
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 15.1.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Prol @  15.1.2008,  02:10 Найти цитируемый пост)
Фаза инициализации более трёх миллионов объектов в памяти занимает более 15 минут. Они читаются из БД и размещаются в памяти одним приложением. В случае, если ОС снимет это приложение, то время повторного перезапуска займёт те же более 15 минут, каковое время недопустимо по требованию заказчика.

Поэтому я запускаю две копии одного приложения. Первая копия при первом старте тратит 15 минут на чтение и размещение объектов в shared memory памяти и падает в sleep.
После того, как я вижу, что первое приложение отинитилось, то запускаю вторую копию этого же приложения. 
Поскольку оба приложения используют shared memory, то второе приложение (оно точно такое же по коду как и первое) получает уже отиниченную память со всеми тремя миллионами объектами и приступает к отработке очереди сообщений всего за одну секунду.



Я бы тогда пошел по другому пути - повышение надежности и отказоустойчивости.

Например запускаем Application Server у которого работает два приложения - одно хранит данные в некотором кэше (хранилище), другое (логика) - выполняет какие-либо действия с этими данными.

Падение Application Server - ну надо очень постараться. Даже если при выполнении логики что-то отвалится, то хранилище должно (и будет) нормально работать. Сервер просто подымет еще одну копию логики. И все.

Хотя инициализация трех миллионов объектов - это как-то странно.
PM MAIL WWW ICQ   Вверх
w1nd
Дата 15.1.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(Prol @  15.1.2008,  15:32 Найти цитируемый пост)
Как обратиться к объекту (экземпляру класса), находящемуся в другом приложении?

Вам уже ответили - никак. Связь только через файл, отображаемый на память или сокеты (или любой другой более высокоуровневый механизм).


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
ecologist
Дата 16.1.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Ну вообщем-то никто не мешает исполmзовать RMI или просто сокеты для общения приложений. Но правда в таком случае эффективность работы наверняка снизится.
Если же иметь в виду общую память, которую можно разделять между процессами, то это особенности ОС и кроссплатформенность JAVA на такие вещи не рассчитана.

Я бы тоже задумался (как и AntonSaburov) над проектированием системы.
PM MAIL   Вверх
Prol
Дата 16.1.2008, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 15.1.2008,  16:00)
Я бы тогда пошел по другому пути - повышение надежности и отказоустойчивости.

Например запускаем Application Server у которого работает два приложения - одно хранит данные в некотором кэше (хранилище), другое (логика) - выполняет какие-либо действия с этими данными.

Падение Application Server - ну надо очень постараться. Даже если при выполнении логики что-то отвалится, то хранилище должно (и будет) нормально работать. Сервер просто подымет еще одну копию логики. И все.

Хотя инициализация трех миллионов объектов - это как-то странно.

Что подразумевается под "Хранилищем"? Образ памяти или БД?
Application Server предоставляет доступ двум приложениям к одной памяти?

Добавлено через 2 минуты и 17 секунд
Цитата(w1nd @ 15.1.2008,  21:08)
Связь только через файл, отображаемый на память 

Как сделать в Java связь через файл, отображаемый на память?
PM MAIL WWW ICQ   Вверх
batigoal
Дата 16.1.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  16.1.2008,  10:09 Найти цитируемый пост)
Application Server предоставляет доступ двум приложениям к одной памяти?

Нет, но он может объединять несколько серверов в кластер, обеспечивая тем самым отказоустойчивость.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
w1nd
Дата 16.1.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата([B)
Prol[/B]]Как сделать в Java связь через файл, отображаемый на память?

В этой теме об этом уже говорили - http://forum.vingrad.ru/index.php?showtopi...t&p=1376155.



--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Prol
Дата 16.1.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(w1nd @ 16.1.2008,  11:26)
В этой теме об этом уже говорили - http://forum.vingrad.ru/index.php?showtopi...t&p=1376155.

Спасибо, но в этот файл невозможно загрузить методы и передать им управление :о(
PM MAIL WWW ICQ   Вверх
w1nd
Дата 16.1.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(Prol @  16.1.2008,  11:31 Найти цитируемый пост)
Спасибо, но в этот файл невозможно загрузить методы и передать им управление :о(

Как и в любой другой файл. Но в этом нет и смысла - вам же нужно разделять данные, а не методы.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Prol
Дата 16.1.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(w1nd @ 16.1.2008,  12:39)
Цитата(Prol @  16.1.2008,  11:31 Найти цитируемый пост)
Спасибо, но в этот файл невозможно загрузить методы и передать им управление :о(

Как и в любой другой файл. Но в этом нет и смысла - вам же нужно разделять данные, а не методы.

Именно необходимо разделять методы :о)
Мне не нужны два разных приложения, у которых каждого свой new и свой код методов.

Мне нужно, чтобы два одинаковых приложения разделяли один new в одной области памяти и использовали одну копию методов над одной копией объектов.
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 16.1.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Prol @  16.1.2008,  13:20 Найти цитируемый пост)
Мне нужно, чтобы два одинаковых приложения разделяли один new в одной области памяти и использовали одну копию методов над одной копией объектов. 

А если упадет именно в таком методе, то какая тут надежность ?

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

Ощущение, что Вы не очень понимаете, что надо. Это не сомнение в профессионализме - просто может пока задача не совсем очевидна.
PM MAIL WWW ICQ   Вверх
Prol
Дата 16.1.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 16.1.2008,  13:42)
А если упадет именно в таком методе, то какая тут надежность ?


Так упадёт же второе приложение. А первое сохранит все данные уже размещённые в памяти.
И тогда нужно будет перезапустить второе приложение, которое продолжит работу с откатом последней транзакции. :о) 
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 16.1.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Prol @  16.1.2008,  13:49 Найти цитируемый пост)
Так упадёт же второе приложение. А первое сохранит все данные уже размещённые в памяти.

Но в таком случае логика и данные разделены. И второе приложение просто проверяет - не упало ли первое. И в нужный момент подхватывает. Значит именно данные лежат в shared memory. А все методы - в логике. Или классов тоже три миллиона ?

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

Добавлено через 8 минут и 20 секунд
Похоже я что-то понимаю - логика работает в объектах и меняет их состояние. Надо каким-то образом это состояние хранить. А т.к. перемешана логика с данными в объектах, то точно разделить не получается. Значит нужен механизм, которые постоянно сохраняет значения полей объектов где-то. Что конечно же усложнит работу и снизит производительность.

Либо сделать разделение на объекты, которые зранят данные и объекты, которые их изменяют. В терминах EnterpriseJavaBeans это EntityBean и SessionBean. Видимо так и надо проектировать.
PM MAIL WWW ICQ   Вверх
Prol
Дата 16.1.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 16.1.2008,  13:42)
Ощущение, что Вы не очень понимаете, что надо. 

Ок, попробую ещё раз объяснить.

ОС убивает то приложение, в контексте которого произошла ошибка. И освобождает память убитого. Но если приложение пользуется памятью другого приложения, то ОС не освобождает память непричастного.

Посмотрите картинку, как оно сделано на С.
Можно ли так сделать на Java?


Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  Shm.JPG 11,32 Kb
PM MAIL WWW ICQ   Вверх
LSD
Дата 16.1.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Нафига код методов помещать в общую память? У вас что, приложение само себя модифицирует в процессе работы?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 16.1.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 16.1.2008,  13:55)
Но в таком случае логика и данные разделены.

Методы и объекты всегда разделены :о)
Методы ведь общие для всего класса объектов.

Смысл в том, что второе приложение пользуется методами и объектами первого приложения, но в случае сбоя ОС снимает именно второе приложение :о) А первое сохраняет загруженными и методы и объекты. 
PM MAIL WWW ICQ   Вверх
LSD
Дата 16.1.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Prol @  16.1.2008,  14:16 Найти цитируемый пост)
ОС убивает то приложение, в контексте которого произошла ошибка. И освобождает память убитого. Но если приложение пользуется памятью другого приложения, то ОС не освобождает память непричастного.

На Java тако практически не реально, байткод не может вызвать крах JVM. Сам упасть - сколько угодно, но свалить JVM без использования native методов не реально (ошибки в самой JVM редки).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 16.1.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(LSD @ 16.1.2008,  14:20)
Нафига код методов помещать в общую память? У вас что, приложение само себя модифицирует в процессе работы?

Для того, чтобы второе приложение могло вызвать методы, которые лежат в общей памяти :о)

Добавлено через 1 минуту и 30 секунд
Цитата(LSD @ 16.1.2008,  14:22)
На Java тако практически не реально, байткод не может вызвать крах JVM. Сам упасть - сколько угодно, но свалить JVM без использования native методов не реально (ошибки в самой JVM редки).

Подставьте вместо ОС слово JVM.
Как сделать, чтобы второе приложение вызывало методы первого над объектами первого?
PM MAIL WWW ICQ   Вверх
LSD
Дата 16.1.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Prol @  16.1.2008,  14:23 Найти цитируемый пост)
Для того, чтобы второе приложение могло вызвать методы, которые лежат в общей памяти :о) 

И что? Что тебе мешает дать ему свою копию классов?

Добавлено через 1 минуту и 39 секунд
Да и зачем ему что-то там вызывать, если он как ты говоришь используется только для того, чтобы после падения данные остались в памяти.

Добавлено через 3 минуты и 1 секунду
Цитата(Prol @  16.1.2008,  14:23 Найти цитируемый пост)
Как сделать, чтобы второе приложение вызывало методы первого над объектами первого? 

Если ты хочешь все делать внутри одной JVM, то варианты решения тебе уже неоднократно предлагали, повторять не буду.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 16.1.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата
Цитата(Prol @  16.1.2008,  14:23 Найти цитируемый пост)
Для того, чтобы второе приложение могло вызвать методы, которые лежат в общей памяти :о) 


И что? Что тебе мешает дать ему свою копию классов?


Мне не нужна вторая копия тех же методов, во-первых. А во-вторых мой менеджер памяти должен быть в единственном экземпляре но доступен из обоих приложений для управления распределением общей разделяемой памяти для объектов.

Цитата

Да и зачем ему что-то там вызывать, если он как ты говоришь используется только для того, чтобы после падения данные остались в памяти.


Первое приложение не совсем спит, оно просто в это время делает непрерывный бекап в БД, не мешая второму работать с объектами. :о)

Цитата

Цитата(Prol @  16.1.2008,  14:23 Найти цитируемый пост)
Как сделать, чтобы второе приложение вызывало методы первого над объектами первого? 

Если ты хочешь все делать внутри одной JVM, то варианты решения тебе уже неоднократно предлагали, повторять не буду.


Извините, но RMI и JMX не подходит, потому что сериализует/десереализует объекты между приложениями. 

А мне нужно из второго приложения выполнять методы первого над объектами первого, и если JVM прибъёт второе приложение за шо-нибуть некорректное. то в первом остануться все методы и все объекты на момент последней незавершённой транзакции.

Это сообщение отредактировал(а) Prol - 16.1.2008, 14:52
PM MAIL WWW ICQ   Вверх
fixxer
Дата 16.1.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Prol, сколько можно тупить? (при всем уважении к возрасту и прочим регалиям). 
Вам уже неоднократно сказали, что Java это не C и то что прокатывает во втором не обязано 
работать также в первом.

Мое мнение, что на Java Вам переходить не стоит.


--------------------
user posted image
PM MAIL ICQ   Вверх
Prol
Дата 16.1.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(fixxer @ 16.1.2008,  14:43)
Prol, сколько можно тупить? (при всем уважении к возрасту и прочим регалиям). 
Вам уже неоднократно сказали, что Java это не C и то что прокатывает во втором не обязано 
работать также в первом.


Так что, даже если я откомпилю приложения Java в нативный код и они будут работать без JVM, то всё равно они не смогут пользоваться общей разделяемой памятью? ;о)))
PM MAIL WWW ICQ   Вверх
fixxer
Дата 16.1.2008, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(Prol @ 16.1.2008,  14:46)
Так что, даже если я откомпилю приложения Java в нативный код и они будут работать без JVM, то всё равно они не смогут пользоваться общей разделяемой памятью? ;о)))

Попробуйте ;)

Добавлено через 2 минуты и 15 секунд
Цитата(Prol @ 16.1.2008,  14:42)
Извините, но RMI и JMX не подходит, потому что сериализует/десереализует объекты между приложениями. 

А мне нужно из второго приложения выполнять методы первого над объектами первого, и если JVM прибъёт второе приложение за шо-нибуть некорректное. то в первом остануться все методы и все объекты на момент последней незавершённой транзакции.

Непонятно, чем здесь помешает RMI?


--------------------
user posted image
PM MAIL ICQ   Вверх
Prol
Дата 16.1.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Я вот чё подумал... 
Может быть я недооцениваю потоки в Java?

Например пусть в одном приложении у меня есть поток Keeper и поток Utilizateur, и в одном из них произошёл непоправивый сбой, то JVM мне остановит только поток-виновник сбоя или прибъёт всё приложение?

Добавлено через 2 минуты и 51 секунду
Цитата(fixxer @ 16.1.2008,  14:55)
Непонятно, чем здесь помешает RMI?

Предстаьте себе, что вы меняете значения трёх миллионов объектов не напрямую, а используя сериализацию/десериализацию (RMI) :о) Насколько это будет медленнее?
PM MAIL WWW ICQ   Вверх
LSD
Дата 16.1.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Prol @  16.1.2008,  15:00 Найти цитируемый пост)
Например пусть в одном приложении у меня есть поток Keeper и поток Utilizateur, и в одном из них произошёл непоправивый сбой, то JVM мне остановит только поток-виновник сбоя или прибъёт всё приложение?

Только поток вызвывший сбой. Плюс ты можешь зарегистрировать своего обработчика на это событие.

Добавлено через 5 минут и 16 секунд
Цитата(Prol @  16.1.2008,  14:42 Найти цитируемый пост)
Извините, но RMI и JMX не подходит, потому что сериализует/десереализует объекты между приложениями.

Внутри одной JVM можно использовать статические поля/методы.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 16.1.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(LSD @ 16.1.2008,  15:06)
Цитата(Prol @  16.1.2008,  15:00 Найти цитируемый пост)
Например пусть в одном приложении у меня есть поток Keeper и поток Utilizateur, и в одном из них произошёл непоправивый сбой, то JVM мне остановит только поток-виновник сбоя или прибъёт всё приложение?

Только поток вызвывший сбой. Плюс ты можешь зарегистрировать своего обработчика на это событие.

Тогда это выход.

Если сбой в одном потоке не вызывает снятия всего приложения исполняющей JVM, то я нашёл ответ на свой вопрос.

Всем участникам спасибо за возню со мной, косноязычным :о)
Теперь бы ещё понять, как отловить переполнение.... Но для этого я открыл другую тему.

Ещё раз спасибо, ребята :о)
PM MAIL WWW ICQ   Вверх
batigoal
Дата 16.1.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  16.1.2008,  16:21 Найти цитируемый пост)
Если сбой в одном потоке не вызывает снятия всего приложения исполняющей JVM, то я нашёл ответ на свой вопрос.

Если сбой произошел по вине данных, то они успешно положат и второй поток.
Если же, допустим, засбоит JVM, то приложение также умрёт. Поэтому я не понимаю смысл подобной избыточности - она не даёт особых прибылей.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Prol
Дата 16.1.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 16.1.2008,  16:00)
Если сбой произошел по вине данных, то они успешно положат и второй поток.
Если же, допустим, засбоит JVM, то приложение также умрёт. Поэтому я не понимаю смысл подобной избыточности - она не даёт особых прибылей.

Данные не могут положить поток. Поток может положить неправильный метод.

Не положат они второй поток, потому что второй поток не делает с ними те же операции что и первый :о)

Прибыль получается, что в случае сбоя второго потока, нам нужно его перезапустить на уже готовые, существующие объекты. А в случае однопоточного приложения нам придётся переиничивать все объекты, а это занимает бешеное время, в моём приложении 15 минут.


PM MAIL WWW ICQ   Вверх
COVD
Дата 16.1.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Если сбой в одном потоке не вызывает снятия всего приложения исполняющей JVM, то я нашёл ответ на свой вопрос.


 smile 

PM MAIL   Вверх
LSD
Дата 16.1.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Prol @  16.1.2008,  16:04 Найти цитируемый пост)
Поток может положить неправильный метод.

А что помешает ему после перезапуска, на тех же самых данных снова лечь? smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Prol
Дата 16.1.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(LSD @ 16.1.2008,  17:19)
Цитата(Prol @  16.1.2008,  16:04 Найти цитируемый пост)
Поток может положить неправильный метод.

А что помешает ему после перезапуска, на тех же самых данных снова лечь? smile

А он ведь не с того же места начнёт выполнение, а значит вызовет другой метод или тот же метод с другим объектом, так что может вообще повторной ошибки не произойти :о)))

Грубо говоря, вот у нас любое  оконное приложение состоит из трёх потоков.
1. UI
2. Внутренняя логика
3. Ввод-вывод всякий, кроме UI.

В таком приложении нужно просто добавить поток Keeper, который всегда будет работать, ничего не делая, кроме ожидания остановки одного из первых трёх потоков по ошибке. В случае остановки одного из указанных потоков, Keeper его перезапускает. При этом данные приложения сохранятся. :о)
PM MAIL WWW ICQ   Вверх
batigoal
Дата 16.1.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  16.1.2008,  17:04 Найти цитируемый пост)
Поток может положить неправильный метод.

что значит - неправильный метод?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Prol
Дата 16.1.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 16.1.2008,  17:43)
Цитата(Prol @  16.1.2008,  17:04 Найти цитируемый пост)
Поток может положить неправильный метод.

что значит - неправильный метод?

неправильный метод, это такой метод, который делает не то, что написано в спецификации этого метода, например закоден с ошибкой в алгоритме, или кодер ошибся с приоритетом операций и скобки не там стоят... 
PM MAIL WWW ICQ   Вверх
batigoal
Дата 16.1.2008, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Prol @  16.1.2008,  18:49 Найти цитируемый пост)
неправильный метод, это такой метод, который делает не то, что написано в спецификации этого метода, например закоден с ошибкой в алгоритме, или кодер ошибся с приоритетом операций и скобки не там стоят...  

Так его надо переписывать, значит, а не в двух потоках запускать. А если у тебя есть два неправильных метода, и они выполнятся в двух потоках с интервалом, допустим, в три минуты?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
serger
Дата 16.1.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



to Prol, Вы какие ошибки имеите в виду? Какие данные? В двух словах, какой алгоритм?

Просто опять грубо: Возникает у Вас ошибка деления на 0 в алгоритме, алгоритм завершается, как-либо? Ну допустим вылетает. Данные сохранились. И опять так же обрабатываются. Алгоритм опять вылетает.. Что дальше?!

ps. Горе от ума?!  smile 


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 16.1.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(batigoal @ 16.1.2008,  17:54)
Цитата(Prol @  16.1.2008,  18:49 Найти цитируемый пост)
неправильный метод, это такой метод, который делает не то, что написано в спецификации этого метода, например закоден с ошибкой в алгоритме, или кодер ошибся с приоритетом операций и скобки не там стоят...  

Так его надо переписывать, значит, а не в двух потоках запускать. А если у тебя есть два неправильных метода, и они выполнятся в двух потоках с интервалом, допустим, в три минуты?

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

Добавлено через 3 минуты и 54 секунды
Цитата(serger @ 16.1.2008,  18:07)
Просто опять грубо: Возникает у Вас ошибка деления на 0 в алгоритме, алгоритм завершается, как-либо? Ну допустим вылетает. Данные сохранились. И опять так же обрабатываются. Алгоритм опять вылетает.. Что дальше?!

ps. Горе от ума?!  smile

Ну ето не самая частая ошибка, в прошлом году три раза вылетала. Ничего страшного, перезапустился тут-же, а там другие проверки не пропустили до этого места, а потом корку копал, искал откуда он проскочил, етот делений на ноль.
PM MAIL WWW ICQ   Вверх
serger
Дата 16.1.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Печально, но ничего не понял, кроме того, что лучше бы таких ошибок не возникало.
Ну это и так понятно.

Ну возникла идея. А почему бы тогда всё-таки данные и обработчик вообще разъединить?
Чтобы перезапускать надо было только обработчик, если он сбоит?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 16.1.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(serger @ 16.1.2008,  18:19)
Печально, но ничего не понял, кроме того, что лучше бы таких ошибок не возникало.
Ну это и так понятно.

Ну возникла идея. А почему бы тогда всё-таки данные и обработчик вообще разъединить?
Чтобы перезапускать надо было только обработчик, если он сбоит?

Так я так и делаю сейчас. У меня Кипер и Утилизатор два разных приложения в контексте ОС. Кипер хранит данные и работает ну вот последний аптайм 170 суток. А Утилизатор с этими данными работает аптайм уже две недели со времени последнего перезапуска.
PM MAIL WWW ICQ   Вверх
serger
Дата 16.1.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Ну дык, тогда я не понял.. Если алгоритм засбоит, Утилизатор быстро можно перезапустить?!..


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 16.1.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(serger @ 16.1.2008,  18:29)
Ну дык, тогда я не понял.. Если алгоритм засбоит, Утилизатор быстро можно перезапустить?!..

Утилизатор поднимается мгновенно - за одну секунду :о)
PM MAIL WWW ICQ   Вверх
serger
Дата 16.1.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Не если его передеплоить придётся. Раз он за секунду поднимется, в чём проблема?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Prol
Дата 16.1.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.1.2008
Где: Кыев, Украина

Репутация: нет
Всего: нет



Цитата(serger @ 16.1.2008,  18:47)
Не если его передеплоить придётся. Раз он за секунду поднимется, в чём проблема?

Без санкции руководства я не имею права запускать новые версии вне плановых перезапусков :о) Что непонятного? Порядок должен быть полным орднунгом, такая процедура, и очень правильная.
Простой перезапуск текущего Утилизатора не требует санкции. Я его даже с мобилки могу сейчас перезапустить, юзера даже коннект не потеряют. Плановый перезапуск раз в месяц, если требуется. Я как правило им пользуюсь, где-то лики памяти всё-таки есть...
PM MAIL WWW ICQ   Вверх
mindflyer
Дата 5.2.2008, 10:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

Репутация: 1
Всего: 4



Сегодня знакомый упомянул про некую http://www.terracotta.org/ - типа возможность в одной java-машине напрямую использовать объекты, которые реально хранятся в другой JVM. Ничего об этом не знаю, но по форме звучит похоже на название темы smile
Кто-нить реально использовал эту штуку? Какие впечатления?
PM MAIL ICQ   Вверх
COVD
Дата 6.2.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

типа возможность в одной java-машине напрямую использовать объекты, которые реально хранятся в другой JVM


"напрямую" - это, очевидно, все равно обмен через сокетные соединения, но реализация скрыта. Так же "напрямую" работает и RMI.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3397 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.