Вопрос не имеет смысла, по крайней мере, без дополнительного контекста.
Понятие "размер" в Java достаточно разумно определено для примитивов: байт 8-битный (неудивительно) int
32-битный, long
64-битный и т. д. (см., например, http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html для полного списка).
Для экземпляров объекта это более сложно, потому что:
- Экземпляры объектов могут (и обычно будут) содержать внутренние ссылки на другие экземпляры, поэтому вы должны решить, следует ли считать эти зависимые экземпляры и как.Что если несколько экземпляров имеют общую зависимость?
- Иногда экземпляры объектов могут использоваться повторно (например, интернирование
java.lang.String
, см. http://en.wikipedia.org/wiki/String_interning).Поэтому, если вы используете x объектов размером y, общий размер может быть меньше, чем x * y - . В JVM есть много возможностей для внутренней реализации объектов и экземпляров.Он может использовать разные методы для разных экземпляров (например, совместное использование внутренних структур данных), поэтому может даже не быть значимого «размера» для назначения одному объекту.
Может быть, вы могли бы объяснить, почему выинтересуются размерами объектов.
Существуют некоторые практические правила для оценки кучи памяти, используемой экземплярами (например, в JVM Sun, экземпляр java.lang.Object
использует 8 байт), но они будут зависеть от используемой вами JVM.использовать.
Как правило, если вы хотите узнать об использовании кучи, используйте профилировщик памяти / кучи.
Редактировать:
Ну, естьэто (начиная с JDK 6) способ получить приблизительное количество памяти, используемой объектом: http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize%28java.lang.Object%29
Это все еще только приближение ...