{
  "schema_version": "0.6.0",
  "paper_id": "uncovering-steady-state-executions-in-java-microbenchmarking-with-call-graph-analysis",
  "page_url": "https://naser.github.io/research-publications/papers/uncovering-steady-state-executions-in-java-microbenchmarking-with-call-graph-analysis/",
  "title": "Uncovering Steady State Executions in Java Microbenchmarking with Call Graph Analysis",
  "title_variants": [],
  "authors": [
    "Madeline Janecek",
    "Sneh Patel",
    "Naser Ezzati-Jivan"
  ],
  "author_details": [
    {
      "name": "Madeline Janecek",
      "orcid": "https://orcid.org/0000-0002-7182-3958",
      "profile_url": "https://dblp.org/pid/307/5913.html"
    },
    {
      "name": "Sneh Patel",
      "orcid": "https://orcid.org/0000-0002-1985-8715",
      "profile_url": "https://dblp.org/pid/315/9849.html"
    },
    {
      "name": "Naser Ezzati-Jivan",
      "orcid": "https://orcid.org/0000-0003-1435-6297",
      "profile_url": "https://naser.github.io/"
    }
  ],
  "publication": {
    "year": 2023,
    "venue": "ACM/SPEC ICPE Companion",
    "type": "conference paper",
    "publication_date": "2023-04-15",
    "online_date": "2023-04-15",
    "print_date": "2023-04-15",
    "volume": null,
    "issue": null,
    "pages": "71-75",
    "article_number": null,
    "publisher": "ACM",
    "issn": [],
    "isbn": [],
    "crossref_type": "proceedings-article"
  },
  "publication_type": "conference paper",
  "status": "published_with_public_full_text",
  "canonical_source_url": "https://doi.org/10.1145/3578245.3584689",
  "source_record_id": "uncovering-steady-state-executions-in-java-microbenchmarking-with-call-graph-analysis-566047a9cb",
  "identifiers": {
    "doi": "10.1145/3578245.3584689"
  },
  "abstract": null,
  "abstract_source": "ICPE Companion PDF reviewed; abstract paraphrased for this catalog.",
  "abstract_available": false,
  "scholar_eligibility": {
    "eligible": false,
    "basis": "not-eligible",
    "note": "The page is a discovery record; it does not claim Google Scholar article-host eligibility."
  },
  "description": "The paper uses sampled call graphs and machine learning to distinguish warmup from steady-state executions in Java microbenchmarks.",
  "evidence_level": "full-text-reviewed",
  "evidence": {
    "source_basis": "full-text-reviewed",
    "coverage": "material paper sections",
    "summary_origin": "AI-assisted catalog editorial summary",
    "review_status": "catalog-reviewed; paper-author approval pending",
    "verified_on": "2026-08-09",
    "sources": [
      {
        "note": "ICPE Companion PDF: perf call-stack sampling, Graph2Vec, flame graphs, PELT, 50-of-1,000 labelling protocol, and five classifiers"
      },
      {
        "note": "ICPE Companion PDF: Java binary-search workload, 10,000 executions/10 forks, Ubuntu/kernel/Perf/Log4j environment, and accuracy/precision/recall table"
      },
      {
        "note": "Paper-linked code/results repository recorded as a public resource"
      },
      {
        "note": "Local PDF hash verified in pdf-evidence/extraction-manifest.json"
      }
    ]
  },
  "summary": {
    "core_contribution": "The paper uses sampled call graphs and machine learning to distinguish warmup from steady-state executions in Java microbenchmarks.",
    "problem": "JMH warmup and steady-state stages can differ structurally, while runtime-only detection gives little insight into why. The paper tests whether sampled call graphs distinguish the stages (pp. 1-2).",
    "method": "Linux perf samples call stacks throughout JMH executions; timestamped start/end logs (Apache Log4j 2.11.2) delimit executions. Call graphs are visualized as flame graphs and embedded with Graph2Vec. PELT change-point detection supplies labels; this study checks 50 similar executions (5% of 1,000) after the change point rather than 500. MLP, Random Forest, Decision Tree, KNN, and SVC classifiers are evaluated (pp. 2-4).",
    "findings": "The workload is a simple Java binary search with 10,000 executions across 10 forks on Ubuntu 22.04 LTS, 64-bit kernel 5.15.0-56, Perf 5.15.64, and JMH; warmup graphs have deeper/more irregular stacks and more interpreter functions. Accuracy/precision/recall: MLP 88.5/31.6/12.5%, RF 90.4/75.0/6%, DT 82.8/19.3/22.5%, KNN 89.8/45/9%, SVC 90/50/1% (pp. 3-4).",
    "limitations": "Accuracy/precision are misleading without the very low recall; the paper attributes this partly to the small dataset/labels and possibly insufficient Graph2Vec vector size. Cross-JVM and cross-workload generalization are not established.",
    "future_work": "More benchmarks, forks, and iterations; alternate/larger graph vectorizations; and unsupervised learning to avoid hand-derived labels (p. 4)."
  },
  "tags": [
    "performance-analysis",
    "performance-engineering",
    "machine-learning",
    "trace-analysis"
  ],
  "keywords": [
    "Java",
    "JMH",
    "microbenchmarking",
    "steady-state detection",
    "warmup",
    "call-graph analysis",
    "Perf",
    "Graph2Vec",
    "change-point detection",
    "PELT",
    "Random Forest",
    "SVC",
    "flame graphs"
  ],
  "versions": [
    {
      "id": "published-version",
      "label": "Published version",
      "relation": "version-of-record",
      "title": "Uncovering Steady State Executions in Java Microbenchmarking with Call Graph Analysis",
      "url": "https://doi.org/10.1145/3578245.3584689",
      "pdf_url": null,
      "status": "published",
      "canonical_for_citation": true
    },
    {
      "id": "public-full-text",
      "label": "Public full text",
      "relation": "source-record",
      "title": "Uncovering Steady State Executions in Java Microbenchmarking with Call Graph Analysis",
      "url": "https://research.spec.org/icpe_proceedings/2023/companion/p71.pdf",
      "pdf_url": "https://research.spec.org/icpe_proceedings/2023/companion/p71.pdf",
      "status": "public_full_text",
      "canonical_for_citation": false
    }
  ],
  "access": {
    "status": "published_with_public_full_text",
    "note": "The DOI is the canonical citation target; the public full-text or author-manuscript link is external and the PDF is not redistributed here.",
    "license": null
  },
  "resources": {
    "code": "https://github.com/sneh2001patel/Uncovering-Steady-State-Executions-in-Java-Microbenchmarking-with-Callgraph-Analysis",
    "data": null,
    "slides": null,
    "demo": null
  },
  "citation_guidance": {
    "when_to_cite": "Cite this paper when your work uses or compares call-stack-sampled call graphs/flame graphs as structural evidence of JVM warmup versus steady-state execution.",
    "points": [
      "For call-stack-sampled call graphs/flame graphs as structural evidence of JVM warmup versus steady-state execution.",
      "For combining Graph2Vec and PELT-derived labels with classifiers for automated steady-state detection.",
      "For the exact result pattern in which Random Forest reaches 90.4% accuracy/75.0% precision but only 6% recall, demonstrating why recall must be reported."
    ],
    "canonical_version_id": "published-version"
  },
  "provenance": {
    "metadata_verified_on": "2026-08-09",
    "metadata_source": [
      "ICPE Companion PDF: perf call-stack sampling, Graph2Vec, flame graphs, PELT, 50-of-1,000 labelling protocol, and five classifiers",
      "ICPE Companion PDF: Java binary-search workload, 10,000 executions/10 forks, Ubuntu/kernel/Perf/Log4j environment, and accuracy/precision/recall table",
      "Paper-linked code/results repository recorded as a public resource",
      "Local PDF hash verified in pdf-evidence/extraction-manifest.json"
    ],
    "summary_written_by": "AI-assisted",
    "summary_verified_by": "full-text-grounded catalog review; author approval pending",
    "linked_preprint_record": null,
    "author_order_note": null
  },
  "batch": {
    "phase": 2,
    "batch_label": "expanded forty-paper release",
    "status": "included_in_expanded_catalog",
    "selected_at": "2026-08-09"
  }
}
