Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/50: Рейтинг темы: голосов - 50, средняя оценка - 4.62
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925

Как узнать сколько байтов в памяти занимает объект?

28.12.2013, 13:02. Показов 10226. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли в Java аналог sizeOf?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2013, 13:02
Ответы с готовыми решениями:

Как узнать, сколько байтов памяти занимает массив
Я за Си сижу уже.. полчаса.. встала задача: узнать количество памяти, который занимает массив, память к которому я выделяю динамически...

Узнать сколько занимает памяти объект.
Здравствуйте. Кто нибудь в курсе, как можно узнать сколько "весит" экземпляр написанного мной класса? То есть мне нужно создать экземпляр...

Как узнать сколько программа занимает памяти ?
открываю Connect с Access (ADO) по таймеру идет Execute на UPDATE или INSERT это жутко жрет память, может это нормальное явление ?? ...

12
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
28.12.2013, 15:03
Нет. Есть конечно разные ухищрения, но они обычно JVM-specific.
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
30.12.2013, 10:53
Цитата Сообщение от reisal78 Посмотреть сообщение
Есть ли в Java аналог sizeOf?
А Вам зачем?
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
30.12.2013, 13:44  [ТС]
Прочитав 5ю главу Хорстманна, я решил закрепить материал. Стал делать вот такую задачу:
Для удобства скопирую ее сюда:
Цитата Сообщение от reisal78 Посмотреть сообщение
Приветствую!
Для практического закрепления 5й главы Хорстманна решил сделать такую программку
Суперкласс -
Java
1
2
3
4
5
class ОргТехника
{ 
    private String Название;
    private double Вес;
}
От него делаю два подкласса
Java
1
2
3
4
5
class Принтеры extends ОргТехника
{ 
    private int Скорость_печати;
    private int Максимальная_нагрузка;
}
и
Java
1
2
3
4
5
class Сканеры extends ОргТехника
{ 
    private int Скорость_сканирования;
    private int Разрешение_сканирования;
}
Нужен совет:
Мне еще нужно создать класс МФУ с такими полями:
Java
1
2
3
4
5
6
7
class МФУ extends ОргТехника
{ 
    private int Скорость_печати;
    private int Максимальная_нагрузка;
    private int Скорость_сканирования;
    private int Разрешение_сканирования;
}
От кого мне лучше "унаследоваться"?
Программа должна работать так:
Пользователь вводит, к примеру, скорость сканирования. Программа в ответ ему выводит список всех объектов у которых поле Скорость_сканирования >= той что ввел пользователь.
easybudda, посоветовал использовать интерфейсы, но т.к. я до их изучения еще не добрался я попытался решить задачу с теми знаниями, которые имею.

Я решил сделать класс ОргТехника абстрактным, от него унаследовать класс МФУ и уже от класса МФУ унаследовать принтеры и сканеры. sizeOf мне нужен был для того, что бы поэксперементировать сколько будут "весить" объекты при том, или ином варианте наследования.
0
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
03.01.2014, 07:15
По-моему МФУ правильней сделать вот так:

Java
1
2
3
4
5
class МФУ extends ОргТехника { 
 
* * private Сканер сканер;
* * private Принтер принтер;
}
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
08.01.2014, 17:27  [ТС]
QGuest, в вашем варианте мне видится следующая проблема:
При такой реализации объект класса МФУ унаследует поля Название и Вес из супер класса Оргтехника. (Ну это как раз и требуется)
А вот что делать с этими же полями, которые унаследовались в объектах принтер и сканер, которые вы предлагаете сделать полями подкласса МФУ?

Т.е. другими словами, при такой реализации в объекте класса МФУ у меня будет по три поля "Название" и "Вес".
Или я в чем то ошибаюсь?
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
08.01.2014, 18:23
а вы переопределите
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
08.01.2014, 18:31  [ТС]
tankomaz, не совсем понял, переопределить что?


На данный момент я остановился на таком решении:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
public class Main
{
    public static void main(String[] args)
    {
        OfficeEquipment [] a = new OfficeEquipment[3];
        a[0] = new Printers("LaserJet Pro P1102w", "HP", 11.6, 19);
        a[1] = new Scanners("ScanJet N6310", "HP", 14.6, 600);
        a[2] = new Mfp("LaserJet Pro MFP M127fn", "HP", 20.0, 300, 21);
 
        System.out.println("Список устройств с функцией сканирования: ");
        for (OfficeEquipment o : a)
        {
            if (o.getResolution()>0)
                System.out.println(o.getName());
        }
    }
}
 
abstract class OfficeEquipment
{
    /**
     * @param name  Название
     * @param manufacturer  Производитель
     * @param weight Вес
     */
    public OfficeEquipment(String name, String manufacturer, double weight)
    {
        this.name = name;
        this.manufacturer = manufacturer;
        this.weight = weight;
    }
 
    public String getName()
    {
        return name;
    }
 
    public String getManufacturer()
    {
        return manufacturer;
    }
 
    public double getWeight()
    {
        return weight;
    }
 
    public int getPrintSpeed()
    {
        return -1;
    }
 
    public int getResolution()
    {
        return -1;
    }
 
    private String name; //Название
    private String manufacturer; //Изготовитель
    private double weight; //Вес
}
 
class Printers extends OfficeEquipment
{
    public Printers(String name, String manufacturer, double weight, int PrintSpeed)
    {
        super(name, manufacturer, weight);
        this.PrintSpeed = PrintSpeed;
    }
 
    public int getPrintSpeed()
    {
        return PrintSpeed;
    }
 
    private int PrintSpeed; //скорость печати
}
 
class Scanners extends OfficeEquipment
{
    /**
     * @param name         Название
     * @param manufacturer Производитель
     * @param weight       Вес
     */
    public Scanners(String name, String manufacturer, double weight, int Resolution)
    {
        super(name, manufacturer, weight);
        this.Resolution = Resolution;
    }
 
    public int getResolution()
    {
        return Resolution;
    }
 
    private int Resolution; //Разрешение сканирования
}
 
class Mfp extends OfficeEquipment
{
    /**
     * @param name         Название
     * @param manufacturer Производитель
     * @param weight       Вес
     */
    public Mfp(String name, String manufacturer, double weight, int Resolution, int PrintSpeed)
    {
        super(name, manufacturer, weight);
        this.Resolution = Resolution;
        this.PrintSpeed = PrintSpeed;
    }
    public int getPrintSpeed()
    {
        return PrintSpeed;
    }
    public int getResolution()
    {
        return Resolution;
    }
    private int Resolution; //Разрешение сканирования
    private int PrintSpeed; //скорость печати
}
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
08.01.2014, 19:03
в таком случае у вас в каждом классе будет по три поля, но не 6 в МФУ если я правильно понял вопрос

Добавлено через 11 минут
всмысле в мфу 3 + 2 (новых) будет
0
 Аватар для reisal78
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
08.01.2014, 19:38  [ТС]
tankomaz, все равно не понимаю, что вы имеете ввиду, не могли бы сделать схематичный пример, переопределения.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
08.01.2014, 22:42
Цитата Сообщение от reisal78 Посмотреть сообщение
На данный момент я остановился на таком решении
При таком подходе никакое наследование и вовсе не нужно, конструктор три раза перегрузил и проверяй сиди, что там функции возвращают...
"Шурик, это не наш метод!" (с)
Можно так как-нибудь сделать:
Device.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package easybudda.officeequipment;
 
import javax.naming.OperationNotSupportedException;
 
abstract class Device {
    private String name;
 
    Device(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    abstract void printPage() throws OperationNotSupportedException;
    abstract void scanPage() throws OperationNotSupportedException;
}

Printer.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package easybudda.officeequipment;
 
import javax.naming.OperationNotSupportedException;
 
class Printer extends Device {
    private int printSpeed;
 
    Printer(String name, int printSpeed) {
        super(name);
        this.printSpeed = printSpeed;
    }
 
    @Override
    public void printPage() {
        System.out.println(getName() + ": Страница напечатана за " + printSpeed + " секунд(ы)");
    }
 
    @Override
    public void scanPage() throws OperationNotSupportedException {
        throw new OperationNotSupportedException("Я те сканер?");
    }
}

Scanner.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package easybudda.officeequipment;
 
import javax.naming.OperationNotSupportedException;
 
class Scanner extends Device {
    private int scanResolution;
 
    Scanner(String name, int scanResolution) {
        super(name);
        this.scanResolution = scanResolution;
    }
 
    @Override
    public void scanPage() {
        System.out.println(getName() + ": Страница отсканирована с разрешением " + scanResolution + " dpi");
    }
 
    @Override
    public void printPage() throws OperationNotSupportedException {
        throw new OperationNotSupportedException("Я те принтер?");
    }
}

MFP.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package easybudda.officeequipment;
 
class MFP extends Device {
    private int printSpeed;
    private int scanResolution;
 
    MFP(String name, int printSpeed, int scanResolution) {
        super(name);
        this.printSpeed = printSpeed;
        this.scanResolution = scanResolution;
    }
 
    @Override
    public void printPage() {
        System.out.println(getName() + ": Страница напечатана за " + printSpeed + " секунд(ы)");
    }
 
    @Override
    public void scanPage() {
        System.out.println(getName() + ": Страница отсканирована с разрешением " + scanResolution + " dpi");
    }
}

TestApp.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package easybudda.officeequipment;
 
import javax.naming.OperationNotSupportedException;
 
public class TestApp {
    public static void main(String[] args) {
        Device[] equipment = { new Printer("HP LaserJet 1220", 20),
                               new Scanner("HP ScanJet 300", 2400),
                               new MFP("HP LaserJet Pro M1132 MFP", 15, 1200),
                             };
 
        for ( Device d : equipment ) {
            try {
                d.printPage();
            }
            catch ( OperationNotSupportedException e ) {
                System.out.println(d.getName() + ": " + e.getExplanation());
            }
            try {
                d.scanPage();
            }
            catch ( OperationNotSupportedException e ) {
                System.out.println(d.getName() + ": " + e.getExplanation());
            }
        }
    }
}
1
9 / 9 / 2
Регистрация: 09.04.2012
Сообщений: 35
11.01.2014, 14:40
Подсмотрено у Герберта Шилдта:

Java
1
2
3
4
5
6
7
8
9
Runtime r = Runtime.getRuntime();
long mem1, mem2;
r.gc();
mem1 = r.freeMemory();
 
// Инициализируем объекты наших классов
 
mem2 = r.freeMemory();
System.out.println("Memory used: " + (mem1 - mem2));
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
11.01.2014, 15:32
Alex79, при всём уважении к Шилдту, метод выглядит несколько сомнительным. На момент инициализации этих "наших объектов" может оказаться, что памяти на них свободной не хватает, ну или просто сборщику мусора "надоест" без дела сидеть... В результате получится, что объекты занимают отрицательное количество памяти. Да и вообще, при отсутствии адресной арифметики (как в С к примеру) количество памяти, занимаемое объектом, по-моему величина бесполезная.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2014, 15:32
Помогаю со студенческими работами здесь

Как узнать, в процесе отладки, сколько памяти занимает программа?
Вот чтобы проследить за тем сколько и когда программа занимает и какое количество килобайт под капие переменные.... Чтобы увидеть что...

Как узнать сколько памяти занимает таблица и каждый столбец в таблице
Как узнать сколько памяти занимает таблица и каждый столбец в таблице Access?

Как узнать, сколько памяти занимает тот или иной элемент программы?
Товарищи, подскажите, пожалуйста, ответы на следующие вопросы: 1) Есть какие-либо средства определения, сколько памяти жрёт программа в...

Как узнать, какой процесс занимает много памяти?
на хостинге есть сайт ! какой то скрипт кушает очень много памяти и забивает ей спустя 2 часа и сайт ложится ! реально ли как то через...

Сколько байтов занимает один пиксель на экране в видеорежиме
Здравствуйте, подскажите, как подсчитать, сколько байтов занимает один пиксель на экране в видео режиме или один символ в текстовом режиме?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru