Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224

JavaAgent измерить размер объектов

25.12.2014, 15:16. Показов 1104. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Работаю в NetBeans, пытаюсь получить размер объекта. Использую данную статью. Добавил два класса:
1. AgentMemoryCounter;
2. AgentTester.
После запуска получаю
Java
1
java.lang.IllegalStateException: Agent not initialised
Понимаю, что он требует инициализировать агент. Каким образом?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.12.2014, 15:16
Ответы с готовыми решениями:

Javaagent
Помогите реализовать. Создается процесс с аргументом -XX:+DisableAttachMechanism del Нужно через javaagent запустить такой же...

Не могу измерить размер массива в указателе
Вообщем, много раз разные вещи перебирал, и решил тут спросить. string *help=new string; help="dasd"; ...

Как измерить размер функции в байтах?
вот есть функция. сколько байт она занимает?

12
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
25.12.2014, 15:55
Stack trace у этого исключения есть?
0
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
25.12.2014, 16:02  [ТС]
Java
1
2
3
4
5
Exception in thread "main" java.lang.IllegalStateException: Agent not initialised
    at folder.AgentMemoryCounter.getSize(AgentMemoryCounter.java:25)
    at folder.AgentTester.printObjectSize(AgentTester.java:43)
    at folder.AgentTester.main(AgentTester.java:31)
Java Result: 1
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
25.12.2014, 16:13
Очевидно, проблема в классе AgentMemoryCounter, на строчке 25
0
 Аватар для Konstantin1706
27 / 27 / 3
Регистрация: 17.07.2008
Сообщений: 224
25.12.2014, 16:35  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class AgentMemoryCounter {
    
    private static Instrumentation instrumentation;
    
    public static void premain(String args, Instrumentation instrumentation) {
        AgentMemoryCounter.instrumentation = instrumentation;
    }
    
    public static long getSize(Object obj) {
        if (instrumentation == null) {
            throw new IllegalStateException("Agent not initialised"); //вот это 25 строка
        }
        return instrumentation.getObjectSize(obj);
    }
}
Я каким-то образом должен проинициализировать instrumentation.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
26.12.2014, 11:10
судя по всему premain не вызывается. Скорее всего вы неправильно прописали агент, в строке запуска.
0
 Аватар для Reshetov
1 / 1 / 0
Регистрация: 23.12.2014
Сообщений: 21
26.12.2014, 14:57
ИМХО, чем так плясать с бубном, гораздо проще сделать классы сериализуемыми и потом, загнав замеряемые экземпляры в какой нибудь небуферированный стрим, вычислить количество байт.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
26.12.2014, 15:24
Reshetov, и получите среднюю температуру по больнице. Размер, который объект занимает в серализованном виде и в хипе - две разные вещи.
0
 Аватар для Reshetov
1 / 1 / 0
Регистрация: 23.12.2014
Сообщений: 21
26.12.2014, 15:57
turbanoff,

1. Не среднюю, а минимальную. Ведь в хипе размер будет не меньше, чем сериализованный. Потому что перед сериализацией из экземпляров удаляется вся избыточная служебная информация, необходимая для JVM, но бесполезная для однозначной десериализации.
2. ТС не ставил задачу вычисления размеров экземпляров в хипе, а посему какой вопрос, таков и ответ.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
26.12.2014, 17:05
Цитата Сообщение от Reshetov Посмотреть сообщение
Ведь в хипе размер будет не меньше, чем сериализованный
Вы заблуждаетесь.
например:
Java
1
2
3
4
5
6
7
8
        Serializable v = new Serializable() {
            int anInt;
        };
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(v);
        oos.flush();
        System.out.println(bos.toByteArray().length);
На моей java выводит 47. Вы действительно, думаете, что объект с одним int-ом занимает не меньше 47 байт?
0
 Аватар для Reshetov
1 / 1 / 0
Регистрация: 23.12.2014
Сообщений: 21
27.12.2014, 14:17
turbanoff, а может быть Вы заблуждаетесь?

А поля родительских классов Пушкин будет учитывать? Плюс идентификатор родительского класса.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
27.12.2014, 14:50
Цитата Сообщение от Reshetov Посмотреть сообщение
А поля родительских классов Пушкин будет учитывать?
В родительском классе Object нет полей.
Цитата Сообщение от Reshetov Посмотреть сообщение
Плюс идентификатор родительского класса.
В самом объекте хранится только ссылка на непосредственный Class этого. А уже в самом классе объекта хранится ссылка на родителя. Так как объекты типа "Class" хранятся в единственном экземпляре, то нет смысла учитывать его при размере каждого экземпляра.
0
 Аватар для Reshetov
1 / 1 / 0
Регистрация: 23.12.2014
Сообщений: 21
28.12.2014, 23:35
Дело в том, что сериализация сохраняет только идентификаторы класса, а также полей для экземпляров и и значения полей. Поля не все сохраняет. Ну и ясен пень есть ещё служебная информация, чтобы всё однозначно восстановить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2014, 23:35
Помогаю со студенческими работами здесь

Самый быстрый способ измерить размер картинки
Привет всем. Собственно, сабж. Нужно сделать собственный компонент для ASP, который бы выдавал размеры картинки. Предполагается...

Автоматически изменять размер объектов Image под размер формы
Как сделать чтобы после запуска программы в C++ Builder можно было изменить размер формы, и размер объектов Image автоматически изменялся...

Log4j & javaagent
Если кому-то интересна тема логирования в Java агентах, то вот нашел в просторах Интернета Log4j Appenders for Domino Logging, само скачать...

Размер 3d объектов в UI
Приветствую, если по сути то у меня есть ScrollViev в котором лежит 3d объект, в редакторе это выглядит так (первая картинка), а на самом...

Размер массива объектов
Метод Count() подсчёта количества элементов массива (массив из сообщений) не правильно распознаёт элементы,заполняет и выводит правильно а...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru