Так что иногда вы получаете диалоговое окно «Space is low» в Pharo. Можно ли как-то определить, что занимает много места?Как определить, что «Пробел низкий» вызывает
ответ
Это непростая проблема, потому что в процессе сбора этой информации вы, вероятно, превысите максимальный объем пространства.
SmalltalkImage>>lowSpaceThreshold
, который вы можете изменить, чтобы получить немного больше места для экспериментов.
Что вы также можете сделать, это посмотреть на SmalltalkImage>>memoryHogs
. Эта переменная класса будет заполнена виртуальной машиной (я думаю) с помощью объектов, потребляющих верхнюю память (если такой объект может быть идентифицирован).
Еще одна вещь, которую вы можете сделать, если не удается определить отдельные экземпляры больших объектов, - это посмотреть на количество всех экземпляров всех классов. Это занимает немного места, и вы должны быть осторожны. Но вот какой-то код, который будет работать (ограничено интересные пакеты):
classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class allInstances size ]) inspect.
Тогда, есть также TBehavior>>instancesSizeInMemory
и Object>>sizeInMemory
. Это может привести к краху вашего изображения, если вы запустите их на графике (вам придется реализовать это самостоятельно), но они дают вам хорошее представление о том, какие объекты потребляют сколько памяти.
Вы можете адаптировать код сверху следующее, чтобы получить размер экземпляров:
classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class instancesSizeInMemory ]) inspect.
Примечание: примеры кода предназначены для Pharo4.
Я хотел бы указать, что можно избежать создания промежуточных коллекций (которые занимают еще больше памяти), выражая итерации с помощью «SystemNavigation new allObjectsDo: aBlock», где 'aBlock' тщательно написан, чтобы не занять много памяти. –
Это правда. Тем не менее, вы будете посещать * каждый * объект, а не только те, которые вам интересны, что означает экземпляры 'Process',' Context', 'BlockClosure',' SmallInteger' и т. Д., Которые обычно неинтересны, но из которых суммы. –
Несомненно, аргумент блока должен отфильтровывать неинтересные объекты на основе подозрительных классов и т. Д. –
- 1. Что вызывает низкий показатель отказов?
- 2. CSS - Что вызывает пробел
- 3. Что вызывает пробел/пробел внутри этого div?
- 4. Определить самый низкий уровень таксономии
- 5. Как определить, что вызывает перезапуск процесса w3wp
- 6. Что вызывает у моей игры действительно низкий уровень
- 7. Что такое низкий размер?
- 8. Как узнать, что вызывает пробел в элементе? margin и padding?
- 9. Макет вызывает пробел
- 10. Как я могу определить, что такое пробел в строке?
- 11. Что такое низкий уровень Javascript?
- 12. Пробел в строке вызывает ошибку
- 13. Как узнать, что пробегает пробел?
- 14. Как определить пробел нажата с клавиатуры
- 15. Как определить массив (содержать пробел) в gnuplot?
- 16. Как определить строку, содержащую только пробел
- 17. Как определить пробел в пакетном скрипте?
- 18. Как определить тяжесть (критический/высокий/низкий и т. Д.) Ошибок?
- 19. Как определить, что вызывает JavaScript при сбое браузера?
- 20. Как определить, что вызывает «Недействительные стили» в Safari iOS?
- 21. Как я могу точно определить, что вызывает эту утомляемость Ember?
- 22. В JRuby, как мне определить, что вызывает java.lang.ThreadDeath?
- 23. Как определить, что вызывает ограничения доступа к пользовательскому доступу?
- 24. Как определить, что находится в адресе Сборка вызывает
- 25. Пробел вызывает команду не для завершения
- 26. что пробел в Perl
- 27. Элементы с видимостью скрыты вызывает пробел
- 28. ActionBar DropDown обивка вызывает пробел [ландшафтный режим]
- 29. Пробел в начале XML-документа вызывает ошибку
- 30. Как определить, что меняет стиль
Это общий вопрос, или это случается с вами при особых обстоятельствах? Кроме того, есть ли у вас подозрения в том, какие объекты могут занимать слишком много памяти? –
@LeandroCaniglia да, это вообще. Потому что я знаю, какой пакет я предварительно загрузил до того, как это началось, поэтому разработчик пакета также должен обладать достаточными знаниями для выявления проблемы. Но я начал думать: хорошо, кто-то не настолько продвинутый получает эту ошибку, что он должен делать? – Uko