기본적으로 Microbenchmark는 실행된 코드의 타이밍과 할당에 관한 정보를 제공합니다. 측정된 코드가 느리게 실행되는 이유를 조사하려면 지원되는 OS 버전에서 기본적으로 캡처되는 메서드 트레이스를 검사하거나 다른 프로파일링 구성을 선택하세요.
프로파일러 구성을 선택하려면 다음 스니펫에서 볼 수 있듯이 MethodTracing (기본값), StackSampling, None 인수 중 하나와 함께 계측 실행기 인수 androidx.benchmark.profiling.mode를 추가합니다.
옵션에 관한 자세한 내용은 Java/Kotlin 메서드 기록을 참고하세요.
MethodTracing은 추적과 같고 StackSampling은 해당 문서에 정의된 샘플링과 같습니다.
Groovy
android{defaultConfig{// must be one of: 'None', 'StackSampling', or 'MethodTracing'testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]='StackSampling'}}
Kotlin
android{defaultConfig{// must be one of: 'None', 'StackSampling', or 'MethodTracing'testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]="StackSampling"}}
벤치마크를 프로파일링하면 출력 .trace 파일이 JSON 결과와 함께 호스트의 디렉터리에 복사됩니다. Android 스튜디오에서 프로파일링 결과를 검사하려면 마이크로벤치마크 결과에서 Method Trace 또는 Stack Sampling Trace 링크를 선택합니다.
MethodTracing
메서드 트레이스는 다른 메서드보다 실행 시간이 오래 걸리는 메서드를 식별하는 데 도움이 되도록 코드를 최적화하려는 경우에 유용합니다. 이렇게 하면 성능에 가장 큰 영향을 미치는 메서드를 최적화하는 데 집중할 수 있습니다.
프로파일링은 코드 측정 후 순서대로 발생하므로 테스트에서 정확한 타이밍과 프로파일링 결과를 모두 출력합니다.
메서드 추적은 기본적으로 사용 설정되어 있습니다.
참고: 일부 Android OS 및 ART 버전에서는 메서드 추적이 기본적으로 사용 중지되어 있습니다. 이 경우 Android 스튜디오는 경고를 출력합니다.
StackSampling
샘플 트레이스는 메서드 트레이스의 성능 오버헤드 없이 비용이 많이 드는 메서드를 식별하는 데도 도움이 됩니다. 그러나 호출 스택이 캡처된 후에 앱에서 메서드가 시작되고 다음 캡처 전에 메서드가 종료되면 메서드 호출이 로깅되지 않습니다. 수명 주기가 짧은 메서드를 올바르게 추적하려면 샘플 트레이스 대신 메서드 트레이스를 사용하세요.
스택 샘플링을 사용하면 준비가 완료된 후에 벤치마크가 호출 스택을 샘플링합니다. 계측 인수를 사용하여 샘플링 빈도와 샘플링 지속 시간과 같은 샘플링 동작을 제어할 수 있습니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-27(UTC)
[null,null,["최종 업데이트: 2025-08-27(UTC)"],[],[],null,["By default, Microbenchmarks give you information about the timing and\nallocations of the executed code. If you want to investigate why the measured\ncode is running slowly, inspect the method trace---captured by default on\n[supported OS versions](#method-tracing-default-support)---or select other\nprofiling configurations.\n\nTo select the profiler configuration, add the instrumentation runner argument\n`androidx.benchmark.profiling.mode` with one of\n[`MethodTracing`](#method-tracing) (default),\n[`StackSampling`](#stack-sampling), or [`None`](#none) argument, as shown in the\nfollowing snippet.\n\nFor more information about the options, see [Record Java/Kotlin methods](/studio/profile/record-java-kotlin-methods).\n`MethodTracing` is the equivalent of tracing, and `StackSampling` is the\nequivalent of sampling as defined in that document. \n\nGroovy \n\n```groovy\nandroid {\n defaultConfig {\n // must be one of: 'None', 'StackSampling', or 'MethodTracing'\n testInstrumentationRunnerArguments[\"androidx.benchmark.profiling.mode\"]= 'StackSampling'\n }\n}\n```\n\nKotlin \n\n```kotlin\nandroid {\n defaultConfig {\n // must be one of: 'None', 'StackSampling', or 'MethodTracing'\n testInstrumentationRunnerArguments[\"androidx.benchmark.profiling.mode\"] = \"StackSampling\"\n }\n}\n```\n\nWhen you profile a benchmark, an output `.trace` file is copied to the host in\nthe directory [alongside JSON results](/topic/performance/benchmarking/microbenchmark-write#benchmark-results). To inspect profiling results in\nAndroid Studio, select the **Method Trace** or **Stack Sampling Trace** link\nin the microbenchmark results.\n| **Note:** The Microbenchmark library automatically captures system tracing, but with custom tracing sections disabled---it ignores calls to `Trace.beginSection and endSection`---to prevent interference from tracing overhead.\n\nMethodTracing\n\nMethod tracing is useful when you are trying to optimize your code because it\ncan help you identify the methods that take longer to run than others. You can\nthen focus on optimizing the methods that have the most impact on performance.\n\nProfiling occurs in sequence after code measurement, so your test outputs both\naccurate timing and profiling results.\n\nMethod tracing is on by default. \n**Note:** On some Android OS and ART versions, method tracing is off by default. In these cases, Android Studio outputs a warning.\n\nStackSampling\n\nSample tracing can also help identify expensive methods without the\nperformance overhead of method tracing. However, if your app enters a method\nafter a call stack has been captured and the method exits before the next\ncapture, then the method call is not logged. To properly track methods with\nshort life cycles, use method tracing instead of sample tracing.\n\nWith stack sampling, the benchmark samples call stacks after the warmup is\ncomplete. You can control sampling behavior such as the\n[sample frequency](#profiling-samplefrequency)\nand [duration of sampling](#profiling-sampleduration) using instrumentation\narguments.\n\nOn Android 10 (API 29) and higher, stack sampling uses [Simpleperf](/ndk/guides/simpleperf) to sample\napp callstacks, including C++ code. On Android 9 (API 28) and lower, it uses\n[`Debug.startMethodTracingSampling`](/reference/kotlin/android/os/Debug#startMethodTracingSampling(kotlin.String,%20kotlin.Int,%20kotlin.Int)) to capture stack samples.\n\nYou can configure this profiling mode by adding another instrumentation\narguments:\n\n- `androidx.benchmark.profiling.sampleFrequency`\n\n - Number of stack samples to capture per second.\n - Argument type: integer\n - Defaults to 1000 samples per second.\n- `androidx.benchmark.profiling.sampleDurationSeconds`\n\n - Duration of benchmark to run.\n - Argument type: integer\n - Defaults to 5 seconds.\n- `androidx.benchmark.profiling.skipWhenDurationRisksAnr`\n\n - Skips method tracing when it's likely to cause an ANR. You should keep this enabled for CI runs, since ANRs can cause problems during long CI runs.\n - Argument type: boolean\n - Defaults to `true`\n\nNone\n\nThis argument doesn't capture a profiling file. Information about timing and\nallocations are still measured.\n\nRecommended for you\n\n- Note: link text is displayed when JavaScript is off\n- [Microbenchmark Instrumentation Arguments](/topic/performance/benchmarking/microbenchmark-instrumentation-args)\n- [Run benchmarks in Continuous Integration](/topic/performance/benchmarking/benchmarking-in-ci)"]]