![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| erslgoeirjh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 16.12.2005 Репутация: нет Всего: нет |
Как на Java работать с оперативной памятью? Как выделить память, записать туда какое-то строковое, байтовое или числовое значение, как сосчитать из этой области памяти строковое, байтовое или числовое значение, как обнулить и как очистить эту область памяти? Какие пакеты и какие классы из J2SE для этого стоить использовать?
|
|||
|
||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
Никак. В Java нет средств для работы с памятью.
Есть массивы. Массивы создаются с помощью оператора new, как и обычные объекты. При обнулении ссылки на массив он попадает под сборщик мусора и память освобождается автоматически. |
|||
|
||||
| erslgoeirjh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 16.12.2005 Репутация: нет Всего: нет |
Имеется две программы. Одна интерфейсная на Java (prog1), другая выполняет математические вычисления на C++ (prog2).
Программа prog1 вызывает программу prog2. Нужно передать данные из программы prog1 в программу prog2 и наоборот (не через файл). Я хочу сделать это через оперативную память. Для этого надо в программе prog1 выделить эту область, адрес её записать в текстовый файл memory.txt, потом программа prog1 запускает программу prog2, которая считывает значение из файла memory.txt. Затем в программе prog2 запускается поток (thread), который с определённой периодичностью опрашивает эту область памяти на предмет того, что туда поступило какое-то значение. При появлении этого значения в этом буфере памяти программа prog2 производит обработку этого значения. Также и в программе prog1 можно запустить поток, который также с определённой периодичностью будет опрашивать этот буфер памяти. Как это сделать? |
|||
|
||||
| Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 6 Всего: 10 |
How To Write Directly to a Memory Locations In Java
Либо, написать свою реализацию прямого доступа к памяти на С++, для дальнейшего использования с помощью JNI или JNA Более высокоуровневый вариант - prog1 и prog2 обмениваются с помощью TCP/IP, то есть нужно и в обеих программах реализовать простейший сервер/слушатель |
|||
|
||||
| Connie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 382 Регистрация: 12.8.2008 Репутация: 1 Всего: 9 |
erslgoeirjh, а нельзя программу на С++ переписать на java?
|
|||
|
||||
| erslgoeirjh |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 16.12.2005 Репутация: нет Всего: нет |
Нельзя. Добавлено через 5 минут и 2 секунды
А нужно ли в этом случае запускать web-сервер или же можно обойтись без него? И ещё вопрос: иной способ передачи данных между двумя программами--это стандартные потоки ввода и вывода (stdin и stdout). Но является ли этот способ кроссплатформенным? Дело в том, что я пришу проект (программы prog1 и prog2) для работы как под Windows, так и под Unix. (Для обеспечения кроссплатформенности программы prog2 на C++ я использую библиотеку Qt). |
||||
|
|||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
А с чем связано ограничение на использование файлов?
|
|||
|
||||
| Skynin |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: 6 Всего: 10 |
Сервером и клиентом будут сами программы. Можно разделить функции, одна из них будет серверов а другая - клиентом.
Вообще да, тоже вариант, не додумал... Насчет кроссплатформенности по идее да. Но нужно проверять, под Windows может не сработать. Работа по TCP/IP точно будет кроссплатформенной. Да и использование Unsafe от Sun или своя реализация обмена через область памяти на С++ с помощью JNI. Еще вариант, дописать в программе prog2, что на C++ написана, блок для подключения по JNI (Java Native Interface (JNI) — стандартный механизм для запуска кода, под управлением виртуальной машины Java (JVM), который написан на языках С/С++ или Ассемблера, и скомпонован в виде динамических библиотек, позволяет не использовать статическое связывание. Это даёт возможность вызова функции С/С++ из программы на Java, и наоборот.) Если исходники доступны, конечно.
Для решения данной задачи это без разницы. |
||||||
|
|||||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Можно также воспользоваться JNA, тогда не нужно модифицировать существующий код на C++. Описание и примеры -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| erslgoeirjh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 16.12.2005 Репутация: нет Всего: нет |
Всем спасибо за ответы!
Как я понял, лучше всего использовать сокеты. Для этого можно запустить соответствующие потоки в программах prog1 и prog2. В окне программы prog1 есть три кнопки: "Выполнить", "Остановить", "Завершить". При нажатии на кнопку "Выполнить" запускается программа prog2, при нажатии кнопки "Остановить" программа prog2 приостанавливается, при последующем нажатии кнопки "Выполнить" происходит продолжение работы prog2, а при нажатии кнопки "Завершить" происходит завершение работы программы prog2. Информация о том, что программе prog2 надо приостановиться, продолжить работу или завершить работу, передаётся от программы prog1 через нефайловый способ (не будут же программы prog1 и prog2 всё время опрашивать жёсткий диск). И только результаты математических вычислений, которые производит программа prog2, будут записаны в текстовой файл, который потом будет считываться программой prog1. Это сообщение отредактировал(а) erslgoeirjh - 24.11.2010, 14:22 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |