![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Grishanya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Доброго времени суток!
Может кто-нибудь посоветует что-нибудь дельное... 1. Есть некое приложение. При выходе из этого приложения, необходимо затереть часть полей, то есть, чтобы данные, скажем строки, не остались в явном виде в памяти. Как это красиво реализовать? 2. Программа ведёт лог в виде текстового файла. Эти самые строчки, которые пишутся в файл также остаются в памяти... Это тоже надо как-то обойти... Заранее спасибо! |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
С этим прекрасно справляется операционная система.
Как вы это определили? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Имхо, средствами самой java - никак. Потому что нет прямого доступа к памяти.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Grishanya |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Как мне кажется, это не совсем так.... При завершении приложения, память помечается как свободная, однако, до тех пор, пока этот фрагмент памяти не будет выделен заново и заполнен другим приложением, данные так и будут там храниться... :(
Это элементарно. Далее с пом. опр. манипуляций вызываем зависание ОС (Windows) с включенной записью полного дампа памяти. В рез. при перезагрузке имеем файл, содержащий образ памяти. После этого, файл можно проанализировать на предмет наличия строк, которые мы создали в рез. работы программы... |
||||
|
|||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
При большом желании можно нарисовать свою программку, скажем, на С, которая узнает, с какими блоками памяти работает твоя java-программа и после её завершения затрёт всё память. Только вот зачем столько мороки? Сверхсекретные вещи на языках верхнего уровня делать просто глупо.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Можно попробовать вызвать gc(), выделить массив байт размером с свободную память и очистить его - но полной гарантии что очистится всё нет.
|
|||
|
||||
| Grishanya |
|
||||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
С первым вопросом я поборолся. 2 способа: 1. Применяем в качетсве хранилища строк не String, а StringBuffer, который позволяет менять строку посимвольно. 2. Отражения. А вот что делать со-вторым вопросом - пока не знаю... :( Добавлено через 5 минут и 3 секунды
Думал об этом. Но тогда теряется кросс-платформенность. Точнее этот код придётся писать под каждую ОС... Это неприемлемо. :(
Вещь уже сделана... А переделывать её, скажем на С просто не реально... :( Добавлено через 9 минут и 14 секунд
Интересная мысль... Думал об этом, однако есть одна проблемка: её мало выделить, но надо ещё и заполнить чем-нибудь.... но тогда если у меня хотя-бы 1 Гб мозгов, то процедура может зятянуться... :( |
||||||||||||
|
|||||||||||||
| _Michael |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: 2 Всего: 6 |
А мне кажется, но я могу конечно ошыбаться, но можно вместо String использовать StringBuffer. То-есть если мы рабоатем с обычными строками то к примеру
создает новые временные строки которые так и остаются в памяти если их потом не затрет какой то новый обьект или еще что-то, в то время как со StringBuffer мы работаем действительно с одним обьектом т-е с одной областью памяти, и вконце программы мы можем етот наш StringBuffer заполнить нулями к примеру, которые действительно запишутся поверх того что там было. Со строками же известно что mystring = null просто ссылку mystring обнуляет но никак не содержимое на которое раньше ета mystring указывала. Если что не так так поправьте пожалуйста -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
| Grishanya |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Спасибо за ответ! Добавлено через 52 секунды
Только что отыскал... |
||||||||||
|
|||||||||||
| nornad |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
В своей работе StringBuffer тоже может запрашивать выделение памяти и "освобождать" её, так что этот вариант не всегда будет работать. Да и при получении строки из StringBuffer будет создан объект String, насколько я знаю (могу и ошибаться). Можно подробнее? Естественно. Ты хочешь низкоуровневую работу на языке высокого уровня. Надо бы решиться - шашечки или ехать. Одновременно в твоём случае изредка будет прокатывать, но далеко не всегда.
А кто говорил про переделку всей "вещи"? Сделай загрузчик своей программы на сях, который отследит память и очистит её. Кстати, теоретически вроде бы можно попробовать и сам GC подменить. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||
|
|||||
| _Michael |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: 2 Всего: 6 |
ето механизм reflection наверное Grishanya имел ввиду. Но насколько я знаю ним можно к приватным полям доступаться или методам но про работу с памятью че то не слышал. Надо будет взглянуть в ету книжечку Можно ссылку на нее ? -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Блин, отражения... рефлекшн - он и в Африке рефлекшн
В принципе, можно и через него прорубиться попробовать. Не знаю, поможет ли - тут после "переоборудования" надо снова дамп сливать и смотреть. И кроме прочего, переменные никуда не должны пропадать в программе (читай - не должно быть локальных переменных, которые надо очищать и такие переменные не должны получать новые значения; ну или перед "пропаданием" или сменой значения надо явно очищать). Добавлено через 1 минуту и 28 секунд держи А к памяти доступ получать не слишком сильно и надо. Нужно тупо дорубиться до основы того же стринга, например. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| Grishanya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Кто-нибудь представляет, как это делать? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
не-а
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
А нельзя просто перед выключением программы загрузить в память что-то большое ( вплоть до получения OutOfMemory ). Например, в цикле наплодить строк. Новые обьекты займут место старых. Наверное, это проще, чем свою версию GC писать.
|
|||
|
||||
![]()
|
| Правила форума "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. |