![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
soulburner |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 5.3.2008 Репутация: нет Всего: нет |
Я - новичок в Java, по этому не ругайте, если вопрос глупый.
Суть в следующем - мы пишем сервер для онлайн игры, но не суть важно. Допустим, есть класс "Player". В объектах этого класса хранятся всякие характеристики игроков - здоровье, сила, ловкость и т.п:
Соответственно, таких объектов требуется по количеству столько же, сколько игроков. Допустим, у нас 50 тыс. игроков. Памяти такие объекты будут жрать порядочно. По этому, хочется досканально понять расходование памяти джавой. Соответственно, вопрос в следующем - если мне нужно создать какие-то методы, оперирующие с игроком - следует ли мне обязательно делать их статическими? Почему я спрашиваю - я думал, что если я создаю какой-то не-статический метод в классе Player, то при каждом создании объекта этого класса в памяти будет выделяться место под код всех его методов. Т.е. если я хочу метод savePlayer(), то создав 50 тыс. игроков, я получу в памяти 50 тыс. копий кода этого метода. Что явно fail. И по-этому я обязан создавать статический метод типа savePlayer(Player player). Я прав? Просто, дело в том, что я решил это проверить. Посмотрел в профайлер Эклипса... Сейчас у меня одна инстанция Player занимает 112 байт. После этого я добавил не-статический метод в "плеера", запустил снова... и странно - инстанция плеера по-прежнему занимает 112 байт. Я ожидал увидеть увеличение размера инстанции "плеера" на размер кода добавленного метода. Объясните, плиз. Это сообщение отредактировал(а) soulburner - 25.12.2010, 14:57 |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
Все экземпляры разделяют общий код методов.
-------------------- Обижено школьников: 8 |
|||
|
||||
mgarin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 19.8.2009 Где: Санкт-Петербург Репутация: 1 Всего: 3 |
И плюс к этому, если говорить конкретно о 50 тысячах таких как вы привели экземпляров - они не много съедят памяти ![]() Также, если рассчитывается, что сервер игры будет крутиться на достаточно современной машине (4+ гб оперативки и среднестатистический проц) то я бы советовал вообще не зацикливаться на сохранении памяти (но это не значит что можно забивать на места явной утечки памяти - всему есть разумный предел). Скажем так, в нашей архивной системе, где кол-во объектов (более сложных и крупных) может достигать 1-2 миллионов, сервер при запросах объектов кэширует их и пока что 2гб, выделенных под приложение, как мне известно, всегда хватало даже на таких объемах. Тут важную роль играет и то, что никогда все 2млн объектов не будут висеть в памяти (достаточно старые, автоматически стираются). В вашем случае также вряд ли все 50 тысяч пользователей будут онлайн одновременно P.S. Как кто-то уже говорил - "проблемы стоит решать по мере их появления" ;) Конечно, опять же, это не значит что нужно их себе создавать Это сообщение отредактировал(а) mgarin - 25.12.2010, 22:05 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |