Java toString () использование отражения?

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

Вы можете использовать выборку в качестве метода профилирования потоков. Добавьте агента java к исполнителям, которые будут захватывать трассировки стека, а затем агрегируют по этим трассировкам стека, чтобы узнать, какие методы использует ваше приложение в большинстве случаев.

Например, вы можете использовать statsd- jvm-profiler java agent и настроить его для отправки трассировки стека в InfluxDB , а затем скомпилировать их с помощью пламенных графов .

информацию, проверить мое сообщение о профилировании приложений Spark: https://www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/

50
задан James McMahon 14 January 2009 в 16:45
поделиться

5 ответов

Apache Ленг свободного городского населения ReflectionToStringBuilder делает это для Вас.

import org.apache.commons.lang3.builder.ReflectionToStringBuilder

// your code goes here

public String toString() {
   return ReflectionToStringBuilder.toString(this);
}
87
ответ дан hcpl 7 November 2019 в 20:42
поделиться

Вт/отражение, поскольку я не знал об апачской библиотеке:

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

@Override
public String toString()
{
    StringBuilder b = new StringBuilder("[");
    for (Field f : getClass().getFields())
    {
        if (!isStaticField(f))
        {
            try
            {
                b.append(f.getName() + "=" + f.get(this) + " ");
            } catch (IllegalAccessException e)
            {
                // pass, don't print
            }
        }
    }
    b.append(']');
    return b.toString();
}


private boolean isStaticField(Field f)
{
    return Modifier.isStatic(f.getModifiers());
}
6
ответ дан Steve B. 7 November 2019 в 20:42
поделиться

Не отражение, но я взглянул на генерацию toString метода (наряду с, равняется/хэш-код) как постшаг компиляции с помощью управления байт-кодом. Результаты были смешаны.

4
ответ дан McDowell 7 November 2019 в 20:42
поделиться

Вот Netbeans, эквивалентный ответу Olivier; умный-codegen плагин для Netbeans.

2
ответ дан James McMahon 7 November 2019 в 20:42
поделиться

При использовании Eclipse можно также взглянуть на генератор JUtils toString , который делает это статически (генерирующий метод в исходном коде).

5
ответ дан Olivier 7 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: