169 похожих чатов

Подскажите такой момент, есть задача, которая требует частого создания больших

FloatArray, и вся фигня в том что размер его постоянно меняется, конечно можно создать один огромный массив и его использовать, попытка оптимизации, но есть и другие места, где такое не прокатит, вот вопрос, как мне Создать обьект и реально его уничтожить, чтобы он не складировался и ждал своего часа в GC а реально освободил ресурсы, это в котлине вообще возможно?

11 ответов

16 просмотров

Никак

Так как нужно будет место GC и вызовется и почистит что не нужно

Наблюдатель-® ] Автор вопроса
Tigran Movsisyan
Так как нужно будет место GC и вызовется и почисти...

Разве при этом не замораживается приложение?

Наблюдатель ® ]
Разве при этом не замораживается приложение?

ну в андроиде он уже вроде в отдельном потоке всё это делает, если я не путаю

Не надо подсказывать GC как делать его работу, он умный и так. Освободит память если уже не надо. Но если очень хочется можно сделать myBigFloatArray = null или FloatArray(1) если он не нуллабельный, это с гарантией сделает старый большой массив доступным сборщику

Наблюдатель-® ] Автор вопроса
Сергей П.
Не надо подсказывать GC как делать его работу, он ...

Ну это FloatArray(1) похоже на то чтобы прошлый массив потерял ссылку на объект ибо создастся новый объект, это больше похоже на то чтобы GC просто быстрее его нашел что нужно грохнуть при следующей сборке мусора, не уверен что будет особый выигрыш, ибо мы сами не освободили ресурс ка на Си. Интересно как обстоят дела с BufferArray и сборкой мусора

Невозможно, котлин тут не причем

Наблюдатель ® ]
Ну это FloatArray(1) похоже на то чтобы прошлый ма...

Скажем так, для того что бы сборщик собрал гигабайтный массив надо что бы на него не было активных ссылок Допустим у нас есть полугигабайтный массив а1 и надо создать новый такого же размера а2, а старый уже не нужен Val a2=ByteArray(500 000 000) может кинуть ООМ потому что старый массив а1 еще имеет ссылки хотя программисту и не нужен уже a1=null Val a2=ByteArray(500 000 000) гарантирует возможность сборки a1 перед отведнием памяти для а2. Это самое близкое к сишному освобождению памяти

Наблюдатель-® ] Автор вопроса
Сергей П.
Скажем так, для того что бы сборщик собрал гигабай...

Пока GC не снесет a1 хоть мы и дали ему null мы успеем создать а2, и реально получим гиг занятого пространства, а когда GC раздуплится, тогда и освободит a1, это я ловлю переполнения на устройстве с 1гиг ОЗУ, есть старый телефон на A7 именно для теста, что если на таком старом двуядерном говне приложение будет работать, значит и у пользователей будет работать. Хорошо иметь старые телефоны для теста приложения, какой смысл тестить на телефоне с 18 гиг ОЗУ)

Наблюдатель ® ]
Пока GC не снесет a1 хоть мы и дали ему null мы ус...

Если памяти на a2 не хватает и при ее отведении будет ООМ gc вызовется немедленно и соберет все что может включая а1

Наблюдатель-® ] Автор вопроса
Сергей П.
Если памяти на a2 не хватает и при ее отведении бу...

По идее я понимаю что в этот момент GC должен заморозить приложение, пока не освободит память, ибо а2 выделение должно ждать тогда пока место не освободится, и если места ваще нет после GC то креш outofmemory, я так понял

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта