Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Alexandrietz
Member

Откуда:
Сообщений: 171
Допустим, что я создал ссылочную переменную (пусть это будет ссылка типа MyClass, например) класса MyClass, в котором определено много методов и объявлено много полей. Каков размер ссылки? Зависит ли ее размер от числа методов и полей класса? Непрерывно ли они лежат в памяти или нет? Как в памяти лежат методы и конструкторы класса? Стек, или куча, или вообще дискретно, то есть не непрерывно?
27 июн 20, 20:35    [22158358]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
chpasha
Member

Откуда:
Сообщений: 9556
Имхо тебе это сейчас совсем не нужно. ты можешь нагуглить любые подробности об внутренней организации jvm, но это тебе никак особо не поможет в твоих начинаниях. Ссылка на класс это всего лишь ссылка - т.е. адрес по которому можно найти экземпляр класса в памяти. Каким бы большим этот экземпляр не был и сколько методов он бы не имел, ссылка будет строго определенного размера в зависимости от разной фигни, которая тебе сейчас абсолютно не нужна. Так что можешь себе ни в чем не отказывать, создавай ссылок сколько нужно.

Конечно можно ознакомиться с потрохами более углубленно, но не на этом этапе и не в твоей ситуации. Таковое мое мнение
27 июн 20, 22:13    [22158390]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5388
Alexandrietz,

Ты перепутал с ЯП С++.
Удивительно, но в нынешнем веке и в java это автоматизировано. Программист не парится этими задачами.
Скажи, зачем вводили умные указатели? Сборщики мусора?
Так что я согласен с chpasha, тебе это не нужно)
27 июн 20, 22:27    [22158396]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Alexandrietz
Допустим, что я создал ссылочную переменную (пусть это будет ссылка типа MyClass, например) класса MyClass, в котором определено много методов и объявлено много полей. Каков размер ссылки? Зависит ли ее размер от числа методов и полей класса? Непрерывно ли они лежат в памяти или нет? Как в памяти лежат методы и конструкторы класса? Стек, или куча, или вообще дискретно, то есть не непрерывно?


Вот почитай для начала. Тут должны быть главные ответы на вопросы такого толка
https://docs.oracle.com/javase/specs/jvms/se14/jvms14.pdf
27 июн 20, 22:30    [22158398]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
mayton
Member

Откуда: loopback
Сообщений: 47981
Alexandrietz

Про размер ссылки. Однозначного ответа нет. Для классической (Oracle/OpenJDK) он обычно 32 бита
для 32х битный JVM и может быть 32 и 64 бита для 64х битной в зависимости от опции -Xmx32g
При этом указатель может быть гранулярный но экономный. Или точный но расточительный
в смысле расхода на ячейку хранения.

И размер ссылки не зависит от того на что она указывает. Здесь есть аналогия с С++.

Если речь идет о какой-то мобильной Java то там - я не знаю. Может быть что угодно.

По всем твоим остальным вопросам. Если тебя на собеседовании спросят про размер Java-объекта
в памяти - то сразу отвечай что JVM-спецификация не регламентирует это вообще. Тоесть мы не знаем
как будут скомпонованы поля в непрерывной памяти объекта. И мы не знаем каков будет общий размер.
Мы можем иногда смотреть через специальные служебные системные библиотеки типа

Instrumentation.getObjectSize(..)


Но и этот размер надо понимать просто как частный случай для данной версии софта и для ОС и для
архитектуры железа. В других - он просто будет другой.

Кроме того надо понимать что есть размеры deep/shallow. Тоесть размер объекта вместе с примитивными полями
или размер объекта рекурсивно со всеми под-объектами которые входят в него. Типа дерево.

На эту тему лучше всего скачай утилиту Eclipse-Memory-Analyzer позапускай и просто понаблюдай
какие отчоты она выдает по Java-процессам.

По поводу твоего вопроса

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


Тут вообще полный капец. На этот вопрос нельзя просто так ответить.
Память методов и конструкторов лежит в двух местах. Это собственно байт-код
который грузит classloader. И есть бинарный код который собрал JIT после нескольких
итераций использования байткода.

Байт-код ты можешь увидеть глазами. Это и есть тело .class - файла который ты компилируешь.

По второму вопросу - я пока не знаю. Но ты попробуй просто переварить эту инфу и может
тебе сейчас не надо лезть так глубоко в эти недра. От джуна этого никто не потребует.
27 июн 20, 23:30    [22158434]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Alexandrietz
Member

Откуда:
Сообщений: 171
PetroNotC Sharp,

Помню, как в C++ надо было вручную освобождать память с помощью delete. Тут, слава Богу, есть garbage collector.
27 июн 20, 23:30    [22158435]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5388
Alexandrietz,
Все делают для того чтобы системных программистов и их вопросов становилось все меньше. А прикладных становилось больше.
28 июн 20, 09:52    [22158523]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
dakeiras
Member

Откуда:
Сообщений: 549
как раз таки правильные вопросы задаёт человек.
28 июн 20, 14:14    [22158574]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
dakeiras
Member

Откуда:
Сообщений: 549
PetroNotC Sharp
Alexandrietz,
Все делают для того чтобы системных программистов и их вопросов становилось все меньше. А прикладных становилось больше.

нет такого понятия как системный, прикладной и пр. программисты.
И никогда не было.

Это придумали чтобы выделить коболистов, которые не могут пользоваться другими ЯП (в силу специфики Кобола).
28 июн 20, 14:15    [22158576]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
chpasha
Member

Откуда:
Сообщений: 9556
dakeiras
как раз таки правильные вопросы задаёт человек.

да, для освоения явы и получения первой работы, жизненно необходимо выяснить размер ссылок на объекты
28 июн 20, 14:33    [22158581]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5388
dakeiras,
Угу. И тимлида скажи нету. И деления на кодировщика и программиста.
И врачи не делятся на хирургов и проктологов.
Ты с луны наверно.
28 июн 20, 14:40    [22158582]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5388
dakeiras
как раз таки правильные вопросы задаёт человек.
если подтвердит кодом, тогда соглашусь.
У нас форум не ПТ.
28 июн 20, 14:41    [22158583]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
dakeiras
Member

Откуда:
Сообщений: 549
PetroNotC Sharp
dakeiras,
Угу. И тимлида скажи нету. И деления на кодировщика и программиста.
И врачи не делятся на хирургов и проктологов.
Ты с луны наверно.

Просто я стараюсь смотреть на вещи непредвзято и самостоятельно анализировать.

В agile - кодировщики именно. Программисты это отдельно.

Тимлид это в agile который гундит что ему имя класса не нравится и прочие бессмысленные вещи совершенно типа code smells.
Он есть.

А вот "системных" программистов нет. Есть системные инженеры (инженеры системотехники по нашей терминологии). Могут программировать. При этом именно прикладную часть.

Системные программисты это те кто пишет на C и на разных asm, микрокод, ядро ОС и прочее.
Но конечно вы не их имели в виду. У нас в бывшем совке все у кого в когде есть переменная типа number - считаются системными программистами.
28 июн 20, 19:14    [22158655]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
dakeiras
Member

Откуда:
Сообщений: 549
chpasha
dakeiras
как раз таки правильные вопросы задаёт человек.

да, для освоения явы и получения первой работы, жизненно необходимо выяснить размер ссылок на объекты

для понимания это очень полезно.
28 июн 20, 19:15    [22158656]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Zzz79
Member

Откуда:
Сообщений: 583
Alexandrietz
Допустим, что я создал ссылочную переменную (пусть это будет ссылка типа MyClass, например) класса MyClass, в котором определено много методов и объявлено много полей. Каков размер ссылки? Зависит ли ее размер от числа методов и полей класса? Непрерывно ли они лежат в памяти или нет? Как в памяти лежат методы и конструкторы класса? Стек, или куча, или вообще дискретно, то есть не непрерывно?

Рано ты полез в такие дебри и вот почему

размер ссылки это фиксированные байты и зависят от системы
32х 4 байта
64 соотвественно 8,тоесть неважно на что указывает ссылка ее размер всегда фиксирован

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

далее суммируется размер полей

например int i=1 /4 байта

надо понимать и то ,что не важно значение переменной а важен тип ( тоест если i=1 и i=32^2-1 все работо будет 4 байта)
28 июн 20, 19:29    [22158658]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Zzz79
Member

Откуда:
Сообщений: 583
а где все это хранится - вообще не нужная java разработчику информация,так как управлять памятью ты не можешь,за исключением выделения хипа в настройках jvm.Всю работу за тебя делает сборщик мусора

причем учить как оно работает уже нет смысла ,так как его поменяли вроде в 15 джаве
28 июн 20, 19:37    [22158659]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
chpasha
Member

Откуда:
Сообщений: 9556
dakeiras
для понимания это очень полезно.

Произнесение банальностей само по себе недостаточно - нужно еще уметь обосновать. что Шерлок Холмс говорил о пользе знания, что Земля крутится вокруг Солнца, для раскрытии преступлений? Вот тут примерно тоже самое.
28 июн 20, 22:13    [22158696]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10418
dakeiras
У нас в бывшем совке
"Спасибо, ваше мнение очень важно для нас".
29 июн 20, 03:42    [22158748]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10418
Zzz79
размер ссылки это фиксированные байты и зависят от системы
... а в JVM заголовок объекта зависит от деталей реализации и даже от режима работы.
29 июн 20, 03:44    [22158749]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1492
Alexandrietz,

Это всё не важно. Жрать память оно в любом случае будет как не в себя.
29 июн 20, 05:25    [22158761]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10418
crutchmaster
Жрать память оно в любом случае будет как не в себя.
А вас не затруднит быть поосторожнее с кванторами всеобщности?
29 июн 20, 06:50    [22158768]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5395
Alexandrietz
Допустим, что я создал ссылочную переменную (пусть это будет ссылка типа MyClass, например) класса MyClass, в котором определено много методов и объявлено много полей. Каков размер ссылки? Зависит ли ее размер от числа методов и полей класса? Непрерывно ли они лежат в памяти или нет? Как в памяти лежат методы и конструкторы класса? Стек, или куча, или вообще дискретно, то есть не непрерывно?


Идем сюда.
Скачиваем исходники.
Читаем их.
Думаем.

Для понимания стоит еще почитать это.

Как все на самом деле устроено в JVM, тут вам вряд ли скажут.
Эти знания не нужны, они скрыты под несколькими слоями абстракции.

Т.к. JVM работает на нескольких платформах, как минимум ARM и x86, то работа с памятью, её выделение и пр. на них отличаются.
Т.е. для ответа на данный вопрос, нужно еще знать под какой платформой будет работать код (тут уже указывали в 32 разрядной и 64 разрядной системе будет по разному).

А так "НАФИГА" вам эти знания?
29 июн 20, 08:05    [22158794]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
chpasha
Member

Откуда:
Сообщений: 9556
mad_nazgul
А так "НАФИГА" вам эти знания?

все еще есть ненулевая вероятность, что он всех троллит, но презумпция невиновности однако :)
29 июн 20, 09:41    [22158828]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5388
Именно троллит. А всё пишите и пишите))
29 июн 20, 10:02    [22158839]     Ответить | Цитировать Сообщить модератору
 Re: Ссылочные переменные с точки зрения памяти PC/Notebook.  [new]
xerxf
Member

Откуда:
Сообщений: 128
PetroNotC Sharp,

Зато каков талант! прошлый то вброс за 300 сообщений перевалил
29 июн 20, 11:15    [22158891]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить