Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расход памяти под методы объектов 
:(
    Опции темы
soulburner
  Дата 25.12.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.3.2008

Репутация: нет
Всего: нет



Я - новичок в Java, по этому не ругайте, если вопрос глупый.

Суть в следующем - мы пишем сервер для онлайн игры, но не суть важно.

Допустим, есть класс "Player". В объектах этого класса хранятся всякие характеристики игроков - здоровье, сила, ловкость и т.п:

Код

public class Player extends Object {
    public int        hp = 0;
    public int        str = 0;
    public int        dex = 0;
    public int        agil = 0;

    // ... и т.п.
}

Соответственно, таких объектов требуется по количеству столько же, сколько игроков.

Допустим, у нас 50 тыс. игроков. Памяти такие объекты будут жрать порядочно. По этому, хочется досканально понять расходование памяти джавой.

Соответственно, вопрос в следующем - если мне нужно создать какие-то методы, оперирующие с игроком - следует ли мне обязательно делать их статическими?

Почему я спрашиваю - я думал, что если я создаю какой-то не-статический метод в классе Player, то при каждом создании объекта этого класса в памяти будет выделяться место под код всех его методов. Т.е. если я хочу метод savePlayer(), то создав 50 тыс. игроков, я получу в памяти 50 тыс. копий кода этого метода. Что явно fail. И по-этому я обязан создавать статический метод типа savePlayer(Player player).

Я прав?

Просто, дело в том, что я решил это проверить. Посмотрел в профайлер Эклипса... Сейчас у меня одна инстанция Player занимает 112 байт. После этого я добавил не-статический метод в "плеера", запустил снова... и странно - инстанция плеера по-прежнему занимает 112 байт. Я ожидал увидеть увеличение размера инстанции "плеера" на размер кода добавленного метода.

Объясните, плиз.

Это сообщение отредактировал(а) soulburner - 25.12.2010, 14:57
PM MAIL   Вверх
bems
Дата 25.12.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Все экземпляры разделяют общий код методов.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
mgarin
Дата 25.12.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 19.8.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Цитата(bems @  25.12.2010,  15:36 Найти цитируемый пост)
Все экземпляры разделяют общий код методов. 

И плюс к этому, если говорить конкретно о 50 тысячах таких как вы привели экземпляров - они не много съедят памяти smile
Также, если рассчитывается, что сервер игры будет крутиться на достаточно современной машине (4+ гб оперативки и среднестатистический проц) то я бы советовал вообще не зацикливаться на сохранении памяти (но это не значит что можно забивать на места явной утечки памяти - всему есть разумный предел).

Скажем так, в нашей архивной системе, где кол-во объектов (более сложных и крупных) может достигать 1-2 миллионов, сервер при запросах объектов кэширует их и пока что 2гб, выделенных под приложение, как мне известно, всегда хватало даже на таких объемах. 
Тут важную роль играет и то, что никогда все 2млн объектов не будут висеть в памяти (достаточно старые, автоматически стираются).
В вашем случае также вряд ли все 50  тысяч пользователей будут онлайн одновременно 

P.S. Как кто-то уже говорил - "проблемы стоит решать по мере их появления" ;)
Конечно, опять же, это не значит что нужно их себе создавать

Это сообщение отредактировал(а) mgarin - 25.12.2010, 22:05
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.