Есть тяга подходить к делу "изнутри", понимать как все работает, и возник вопрос т.к. толковой документации что то не смог найти.
Допустим есть код:
class MyClassHelper
{
// Много переменных
protected function test_1 ($name)
{
echo $name;
}
// Очень много функций
}
class MyClass extends MyClassHelper
{
// С десяток переменных
function __construct ($name)
{
parent::test_1($this);
}
// С десяток функций
}
$b = array();
for ($i = 0; $i < 10; $i++)
{
$b[] = new MyClass();
}
Как он будет размещаться в памяти? Сколько занимают функции памяти?
Конкретно в моем примере интерисует: в класс MyClassHelper допустим я выношу кучу функций, огромное количество, а класс MyClass их использует и состоит их пары десятков функций и переменных, сэкономлю ли я на памяти выделяемой скрипту? Или можно поместить все функции в класс MyClass и не париться с наследованием все равно в памяти функции будут занимать место и так и так?
С каждым новым созданным классом будет ли память заниматься на создание и расположение одинаковых функций которые внутри класса? Имеет ли смысл использовать наследование класса дабы избежать создания лишнего байт кода в памяти?
И вообще посоветуйте пожалуйста внятный мануал по подробному разбору памяти процессов пхп скриптов, адрес гугла знаю можете его не рекомендовать =)
Функцию memory_get_usage не рекомендовать, на xdebug много времени уйдет, хотелось бы почитать а не собственными тестами выводить (
Спустя 22 минуты, 3 секунды (26.03.2010 - 14:48) vagrand написал(а):
Функции занимают в памяти, грубо говоря, ровно столько места сколько в них буков.
Волновать тебя должны не функции а размер переменных, вот он может варьироваться в зависимости от того сколько и чего ты туда грузишь.
Волновать тебя должны не функции а размер переменных, вот он может варьироваться в зависимости от того сколько и чего ты туда грузишь.
Спустя 4 минуты, 49 секунд (26.03.2010 - 14:53) glock18 написал(а):
Цитата (vagrand @ 26.03.2010 - 11:48) |
Функции занимают в памяти, грубо говоря, ровно столько места сколько в них буков. |
меньше даже. при обработке больших файлов большая часть времени уйдет на парсинг, а расход на хранение скомпилированного кода по сравнению со всем остальным очень мал.
Спустя 4 минуты, 53 секунды (26.03.2010 - 14:58) ZigZag написал(а):
Мое приложение на PHP висит в памяти неделями-месяцами без перезагрузки, и хочеться погоняться за экономией занимаемой памяти, если дубликатов класса создать не 10, как в примере, а 10000? функции в памяти расплодятся в случае выноса их в отдельный класс и наследовать им остальные?
С оптимизацией хранимых данных уже давно вопрос решен, теперь стараюсь оптимизировать код
С оптимизацией хранимых данных уже давно вопрос решен, теперь стараюсь оптимизировать код
Спустя 12 минут, 32 секунды (26.03.2010 - 15:11) vagrand написал(а):
Цитата |
Мое приложение на PHP висит в памяти неделями-месяцами без перезагрузки |
Что же это у тебя за скрипты такие, что время их выполнения измеряется в неделях и месяцах?
Цитата |
если дубликатов класса создать не 10, как в примере, а 10000? функции в памяти расплодятся в случае выноса их в отдельный класс и наследовать им остальные? |
Код методов класса не расплодится, хотя да если ты создашь 10000 экземпляров, даже пустых, то память они займут как 10000. Но весь смысл оптимизации какраз и заключен в том чтобы не создавать такое большое количество. Я себе не могу навскидку представить задачи где одновременно необходимо было бы держать в памяти для одного экземпляра скрипта такое огромное количество объектов.
Цитата |
С оптимизацией хранимых данных уже давно вопрос решен, теперь стараюсь оптимизировать код |
Оптимизировать код нужно, с этим никто не спорит, но оптимизировать надо ни столько его количество сколько время его выполнения.
Спустя 3 часа, 34 минуты, 57 секунд (26.03.2010 - 18:46) ZigZag написал(а):
Цитата |
Что же это у тебя за скрипты такие, что время их выполнения измеряется в неделях и месяцах? |
Управляет соединениями, перебрасывает с tcp на udp по своему протоколу.
Цитата |
Код методов класса не расплодится, хотя да если ты создашь 10000 экземпляров, даже пустых, то память они займут как 10000. Но весь смысл оптимизации какраз и заключен в том чтобы не создавать такое большое количество. Я себе не могу навскидку представить задачи где одновременно необходимо было бы держать в памяти для одного экземпляра скрипта такое огромное количество объектов. |
10000 это я цифру от балды привел, штук 20-30 таких класов одновременно у меня создано будет.
Спустя 17 минут, 47 секунд (26.03.2010 - 19:03) glock18 написал(а):
Цитата (ZigZag @ 26.03.2010 - 15:46) |
Управляет соединениями, перебрасывает с tcp на udp по своему протоколу. |
лучше используй C для этого. в php достаточно сложно контролировать утечки памяти - для типичных скриптов это некритично, но для такой задачи это может стать проблемой.
Спустя 17 часов, 25 минут, 1 секунда (27.03.2010 - 12:28) ZigZag написал(а):
Цитата | ||
лучше используй C для этого. в php достаточно сложно контролировать утечки памяти - для типичных скриптов это некритично, но для такой задачи это может стать проблемой. |
Так и думал что тема уйдет от своей сути в оффтопик )
У меня свои взгляды на этот вопрос, и меня не переубедить. Давайте не будем офтопить а предлогаю совместными усилиями подробненько покопаться в процессах пхп и разобраться как работает zend машина.
Спустя 36 минут, 36 секунд (27.03.2010 - 13:05) DedMorozzz написал(а):
на форуме, в курсах, была тема, как раз Глока, об организации памяти. Возможно это ккраз то, что бы ищешь
Спустя 1 день, 3 часа, 33 минуты, 10 секунд (28.03.2010 - 15:38) ZigZag написал(а):
Еще такой вопрос, почти по теме, почему каждый раз при загрузке одного и того же скрипта с бесконечным циклом он занимает различный обьем памяти?
_____________
i like network programming
R270121804964