A Study of Call Graph Construction for JVM-Hosted Languages
Call graphs have many applications in software engineering, including bug-finding, security analysis, and code navigation in IDEs. However, the construction of call graphs requires significant investment in program analysis infrastructure. An increasing number of programming languages compile to the...
        Saved in:
      
    
          | Published in | IEEE transactions on software engineering Vol. 47; no. 12; pp. 2644 - 2666 | 
|---|---|
| Main Authors | , , , , , | 
| Format | Journal Article | 
| Language | English | 
| Published | 
        New York
          IEEE
    
        01.12.2021
     IEEE Computer Society  | 
| Subjects | |
| Online Access | Get full text | 
| ISSN | 0098-5589 1939-3520 2326-3881 1939-3520  | 
| DOI | 10.1109/TSE.2019.2956925 | 
Cover
| Abstract | Call graphs have many applications in software engineering, including bug-finding, security analysis, and code navigation in IDEs. However, the construction of call graphs requires significant investment in program analysis infrastructure. An increasing number of programming languages compile to the Java Virtual Machine (JVM), and program analysis frameworks such as WALA and SOOT support a broad range of program analysis algorithms by analyzing JVM bytecode. This approach has been shown to work well when applied to bytecode produced from Java code. In this paper, we show that it also works well for diverse other JVM-hosted languages: dynamically-typed functional Scheme, statically-typed object-oriented Scala, and polymorphic functional OCaml. Effectively, we get call graph construction for these languages for free, using existing analysis infrastructure for Java, with only minor challenges to soundness. This, in turn, suggests that bytecode-based analysis could serve as an implementation vehicle for bug-finding, security analysis, and IDE features for these languages. We present qualitative and quantitative analyses of the soundness and precision of call graphs constructed from JVM bytecodes for these languages, and also for Groovy, Clojure, Python, and Ruby. However, we also show that implementation details matter greatly. In particular, the JVM-hosted implementations of Groovy, Clojure, Python, and Ruby produce very unsound call graphs, due to the pervasive use of reflection, invokedynamic instructions, and run-time code generation. Interestingly, the dynamic translation schemes employed by these languages, which result in unsound static call graphs, tend to be correlated with poor performance at run time. | 
    
|---|---|
| AbstractList | Call graphs have many applications in software engineering, including bug-finding, security analysis, and code navigation in IDEs. However, the construction of call graphs requires significant investment in program analysis infrastructure. An increasing number of programming languages compile to the Java Virtual Machine (JVM), and program analysis frameworks such as WALA and SOOT support a broad range of program analysis algorithms by analyzing JVM bytecode. This approach has been shown to work well when applied to bytecode produced from Java code. In this paper, we show that it also works well for diverse other JVM-hosted languages: dynamically-typed functional Scheme, statically-typed object-oriented Scala, and polymorphic functional OCaml. Effectively, we get call graph construction for these languages for free, using existing analysis infrastructure for Java, with only minor challenges to soundness. This, in turn, suggests that bytecode-based analysis could serve as an implementation vehicle for bug-finding, security analysis, and IDE features for these languages. We present qualitative and quantitative analyses of the soundness and precision of call graphs constructed from JVM bytecodes for these languages, and also for Groovy, Clojure, Python, and Ruby. However, we also show that implementation details matter greatly. In particular, the JVM-hosted implementations of Groovy, Clojure, Python, and Ruby produce very unsound call graphs, due to the pervasive use of reflection, invokedynamic instructions, and run-time code generation. Interestingly, the dynamic translation schemes employed by these languages, which result in unsound static call graphs, tend to be correlated with poor performance at run time. | 
    
| Author | Tip, Frank Dolby, Julian Ali, Karim Luo, Zhaoyi Lhotak, Ondrej Lai, Xiaoni  | 
    
| Author_xml | – sequence: 1 givenname: Karim orcidid: 0000-0002-5516-1376 surname: Ali fullname: Ali, Karim email: karim.ali@ualberta.ca organization: Department of Computing Science, University of Alberta, Edmonton, AB, Canada – sequence: 2 givenname: Xiaoni orcidid: 0000-0001-8881-1278 surname: Lai fullname: Lai, Xiaoni email: xlai@google.com organization: Google, Waterloo, ON, Canada – sequence: 3 givenname: Zhaoyi surname: Luo fullname: Luo, Zhaoyi email: zhaoyi.luo@microsoft.com organization: Microsoft, Redmond, WA, USA – sequence: 4 givenname: Ondrej orcidid: 0000-0001-9066-1889 surname: Lhotak fullname: Lhotak, Ondrej email: olhotak@uwaterloo.ca organization: David R. Cheriton School of Computer Science, University of Waterloo, Waterloo, ON, Canada – sequence: 5 givenname: Julian surname: Dolby fullname: Dolby, Julian email: dolby@us.ibm.com organization: IBM Research, Yorktown Heights, NY, USA – sequence: 6 givenname: Frank orcidid: 0000-0002-1862-3498 surname: Tip fullname: Tip, Frank email: f.tip@northeastern.edu organization: Khoury College of Computer Sciences, Northeastern University, Boston, MA, USA  | 
    
| BookMark | eNptkM9LwzAYhoNMcJveBS8Bz5350bQJnkaZmzLxsOk1pGk6O2pTkxTZf29Hh4fh6bu8z8v7fBMwamxjALjFaIYxEg_bzWJGEBYzIlgiCLsAYyyoiCgjaATGCAkeMcbFFZh4v0cIsTRlY_A4h5vQFQdoS5ipuoZLp9pPmNnGB9fpUNkGltbBl4_XaGV9MAVcq2bXqZ3x1-CyVLU3N6c7Be9Pi222itZvy-dsvo40pTRECSMUY54wWjAiqFaEKq5xUcRC64LikmuVEpQookWikM5VmpM8JkjoHMcc0SnAQ2_XtOrw06-Urau-lDtIjOTRXgZv5NFenux75n5gWme_O-OD3NvONf1MSRLEGUtjTPtUMqS0s947U0pdBXWUDk5V9V99_9zzenQGni_6B7kbkMoY8xfnIo5xLOgvzimC5Q | 
    
| CODEN | IESEDJ | 
    
| CitedBy_id | crossref_primary_10_1145_3622833 | 
    
| Cites_doi | 10.1007/3-540-49538-X_2 10.1145/2048066.2048118 10.1145/1985793.1985827 10.1145/2500828.2500833 10.1145/1565824.1565829 10.1145/1640089.1640108 10.1145/2614628.2614630 10.1145/355045.355059 10.1145/2644805 10.1145/263699.263715 10.1109/ICSE.2007.72 10.1145/2500828.2500837 10.1145/3213846.3213864 10.1145/53990.54007 10.1145/1287624.1287653 10.1145/1869459.1869517 10.1145/2532642 10.1145/1411732.1411742 10.1145/360204.360228 10.1007/3-540-46423-9_2 10.1145/1167473.1167488 10.1145/1251535.1251542 10.1145/1565824.1565830 10.1145/2483760.2483786 10.1007/978-3-662-44202-9_3 10.1145/3236454.3236503 10.1145/1542476.1542486 10.1145/506315.506316 10.1145/349299.349344 10.1145/2542142.2542144 10.1145/1806596.1806598 10.1007/11688839_5 10.1145/1353482.1353488 10.1007/978-3-030-02768-1_4 10.1145/2509578.2509581 10.1145/2500828.2500838 10.1109/ICSE.2013.6606621  | 
    
| ContentType | Journal Article | 
    
| Copyright | Copyright IEEE Computer Society 2021 | 
    
| Copyright_xml | – notice: Copyright IEEE Computer Society 2021 | 
    
| DBID | 97E ESBDL RIA RIE AAYXX CITATION JQ2 K9. ADTOC UNPAY  | 
    
| DOI | 10.1109/TSE.2019.2956925 | 
    
| DatabaseName | IEEE All-Society Periodicals Package (ASPP) 2005–Present IEEE Xplore Open Access Journals IEEE All-Society Periodicals Package (ASPP) 1998–Present IEEE Xplore (NTUSG) CrossRef ProQuest Computer Science Collection ProQuest Health & Medical Complete (Alumni) Unpaywall for CDI: Periodical Content Unpaywall  | 
    
| DatabaseTitle | CrossRef ProQuest Health & Medical Complete (Alumni) ProQuest Computer Science Collection  | 
    
| DatabaseTitleList | ProQuest Health & Medical Complete (Alumni)  | 
    
| Database_xml | – sequence: 1 dbid: RIE name: IEEE Xplore (NTUSG) url: https://proxy.k.utb.cz/login?url=https://ieeexplore.ieee.org/ sourceTypes: Publisher – sequence: 2 dbid: UNPAY name: Unpaywall url: https://proxy.k.utb.cz/login?url=https://unpaywall.org/ sourceTypes: Open Access Repository  | 
    
| DeliveryMethod | fulltext_linktorsrc | 
    
| Discipline | Computer Science | 
    
| EISSN | 1939-3520 | 
    
| EndPage | 2666 | 
    
| ExternalDocumentID | 10.1109/tse.2019.2956925 10_1109_TSE_2019_2956925 8944149  | 
    
| Genre | orig-research | 
    
| GrantInformation_xml | – fundername: Ontario Ministry of Research and Innovation funderid: 10.13039/501100015668 – fundername: Office of Naval Research grantid: N00014-17-1-2945 funderid: 10.13039/100000006 – fundername: National Science Foundation grantid: CCF-1715153 funderid: 10.13039/100000001 – fundername: Natural Sciences and Engineering Research Council of Canada funderid: 10.13039/501100000038  | 
    
| GroupedDBID | --Z -DZ -~X .DC 0R~ 29I 4.4 5GY 6IK 85S 8R4 8R5 97E AAJGR AARMG AASAJ AAWTH ABAZT ABPPZ ABQJQ ABVLG ACGFO ACGOD ACIWK ACNCT AENEX AGQYO AHBIQ AKJIK AKQYR ALMA_UNASSIGNED_HOLDINGS ASUFR ATWAV BEFXN BFFAM BGNUA BKEBE BKOMP BPEOZ CS3 DU5 EBS EDO EJD ESBDL HZ~ I-F IEDLZ IFIPE IPLJI JAVBF LAI M43 MS~ O9- OCL P2P Q2X RIA RIE RNS RXW S10 TAE TN5 TWZ UHB UPT WH7 YZZ AAYXX CITATION JQ2 K9. .4S 3EH 5VS 7WY 7X7 88E 88I 8FE 8FG 8FI 8FJ 8FL 8G5 9M8 ABFSI ABJCF ABUWG ADBBV ADTOC AETIX AFKRA AGSQL AI. AIBXA ALLEH ARAPS ARCSS AZQEC BENPR BEZIV BGLVJ BPHCQ BVXVI CCPQU DWQXO E.L FRNLG FYUFA GNUQQ GROUPED_ABI_INFORM_RESEARCH GUQSH HCIFZ HMCUK H~9 IBMZZ ICLAB IFJZH ITG ITH K60 K6V K6~ K7- L6V M0C M1P M1Q M2O M2P M7S OHT P62 PHGZM PHGZT PJZUB PPXIY PQBIZ PQBZA PQGLB PQQKQ PROAC PSQYO PTHSS PUEGO RNI RZB UKHRP UNPAY UQL VH1 XOL YYP ZCG  | 
    
| ID | FETCH-LOGICAL-c333t-6523118653d5293ca23a8c1dd49ccd31f8ca7206a2c96a0cba7b2b4209cb14803 | 
    
| IEDL.DBID | RIE | 
    
| ISSN | 0098-5589 1939-3520 2326-3881  | 
    
| IngestDate | Wed Oct 01 15:13:11 EDT 2025 Fri Oct 03 03:51:34 EDT 2025 Wed Oct 01 02:36:04 EDT 2025 Thu Apr 24 23:00:37 EDT 2025 Wed Aug 27 05:11:49 EDT 2025  | 
    
| IsDoiOpenAccess | true | 
    
| IsOpenAccess | true | 
    
| IsPeerReviewed | true | 
    
| IsScholarly | true | 
    
| Issue | 12 | 
    
| Language | English | 
    
| License | https://creativecommons.org/licenses/by/4.0/legalcode cc-by  | 
    
| LinkModel | DirectLink | 
    
| MergedId | FETCHMERGED-LOGICAL-c333t-6523118653d5293ca23a8c1dd49ccd31f8ca7206a2c96a0cba7b2b4209cb14803 | 
    
| Notes | ObjectType-Article-1 SourceType-Scholarly Journals-1 ObjectType-Feature-2 content type line 14  | 
    
| ORCID | 0000-0001-9066-1889 0000-0002-5516-1376 0000-0002-1862-3498 0000-0001-8881-1278  | 
    
| OpenAccessLink | https://proxy.k.utb.cz/login?url=https://ieeexplore.ieee.org/document/8944149 | 
    
| PQID | 2608557413 | 
    
| PQPubID | 21418 | 
    
| PageCount | 23 | 
    
| ParticipantIDs | unpaywall_primary_10_1109_tse_2019_2956925 proquest_journals_2608557413 crossref_citationtrail_10_1109_TSE_2019_2956925 crossref_primary_10_1109_TSE_2019_2956925 ieee_primary_8944149  | 
    
| ProviderPackageCode | CITATION AAYXX  | 
    
| PublicationCentury | 2000 | 
    
| PublicationDate | 2021-12-01 | 
    
| PublicationDateYYYYMMDD | 2021-12-01 | 
    
| PublicationDate_xml | – month: 12 year: 2021 text: 2021-12-01 day: 01  | 
    
| PublicationDecade | 2020 | 
    
| PublicationPlace | New York | 
    
| PublicationPlace_xml | – name: New York | 
    
| PublicationTitle | IEEE transactions on software engineering | 
    
| PublicationTitleAbbrev | TSE | 
    
| PublicationYear | 2021 | 
    
| Publisher | IEEE IEEE Computer Society  | 
    
| Publisher_xml | – name: IEEE – name: IEEE Computer Society  | 
    
| References | ref57 ref13 thomas (ref5) 2013 ref12 ref15 ref14 ref53 ref55 ref54 ref10 fourtounis (ref39) 2019 ref17 ref16 ref19 (ref31) 0 odersky (ref6) 2011 ref51 ref50 odersky (ref52) 1998 ref45 halloway (ref1) 2012 ref48 ref42 ref41 castaños (ref56) 2012 ref43 (ref34) 0 barclay (ref2) 2006 ref49 schinz (ref46) 2005 ref9 (ref58) 0 dragos (ref47) 2010 savrun-yeniçeri (ref59) 2014; 11 ref40 minsky (ref3) 2013 lutz (ref4) 2013 (ref23) 0 ref35 (ref18) 0 ref37 ref36 ref30 ref38 (ref33) 0 (ref24) 0 ref26 dybvig (ref7) 2009 ref20 ref22 ref21 (ref11) 0 (ref8) 0 ref28 ref27 ref29 juneau (ref32) 2013 ref60 ref61 richards (ref44) 2011 (ref25) 0  | 
    
| References_xml | – ident: ref30 doi: 10.1007/3-540-49538-X_2 – ident: ref27 doi: 10.1145/2048066.2048118 – year: 0 ident: ref11 – year: 2013 ident: ref3 publication-title: Real-World OCaml Functional Programming for the Masses (1 ed ) – year: 0 ident: ref33 – ident: ref21 doi: 10.1145/1985793.1985827 – year: 0 ident: ref34 – year: 2006 ident: ref2 publication-title: Groovy Programming An Introduction for Java Developers (1 Ed ) – ident: ref28 doi: 10.1145/2500828.2500833 – year: 0 ident: ref31 – ident: ref48 doi: 10.1145/1565824.1565829 – year: 2011 ident: ref6 publication-title: Programming in Scala (2 ed ) – ident: ref9 doi: 10.1145/1640089.1640108 – ident: ref12 doi: 10.1145/2614628.2614630 – ident: ref16 doi: 10.1145/355045.355059 – ident: ref22 doi: 10.1145/2644805 – ident: ref51 doi: 10.1145/263699.263715 – ident: ref60 doi: 10.1109/ICSE.2007.72 – ident: ref50 doi: 10.1145/2500828.2500837 – ident: ref38 doi: 10.1145/3213846.3213864 – ident: ref19 doi: 10.1145/53990.54007 – ident: ref13 doi: 10.1145/1287624.1287653 – year: 2013 ident: ref4 publication-title: Learning Python (5 ed ) – ident: ref55 doi: 10.1145/1869459.1869517 – volume: 11 year: 2014 ident: ref59 article-title: Efficient hosted interpreters on the JVM publication-title: ACM Trans Archit Code Optim doi: 10.1145/2532642 – ident: ref53 doi: 10.1145/1411732.1411742 – year: 2005 ident: ref46 article-title: Compiling Scala for the Java virtual machine – year: 2009 ident: ref7 publication-title: The Scheme Programming Language (4 ed ) – start-page: 15:1 year: 2019 ident: ref39 article-title: Deep static modeling of invokedynamic publication-title: Proc Europ Conf Object-Oriented Programming – ident: ref54 doi: 10.1145/360204.360228 – ident: ref10 doi: 10.1007/3-540-46423-9_2 – year: 2012 ident: ref1 publication-title: Programming Clojure (2 Ed ) – year: 0 ident: ref23 – ident: ref42 doi: 10.1145/1167473.1167488 – ident: ref20 doi: 10.1145/1251535.1251542 – year: 2013 ident: ref5 publication-title: Programming Ruby 1 9 & 2 0 The Pragmatic Programmer's Guide (4 ed ) – ident: ref49 doi: 10.1145/1565824.1565830 – ident: ref45 doi: 10.1145/2483760.2483786 – ident: ref26 doi: 10.1007/978-3-662-44202-9_3 – ident: ref36 doi: 10.1145/3236454.3236503 – ident: ref14 doi: 10.1145/1542476.1542486 – ident: ref35 doi: 10.1145/506315.506316 – ident: ref17 doi: 10.1145/349299.349344 – year: 0 ident: ref8 – year: 2010 ident: ref47 article-title: Compiling Scala for performance – start-page: 195 year: 2012 ident: ref56 article-title: On the benefits and pitfalls of extending a statically typed language JIT compiler for dynamic scripting languages publication-title: Proc ACM Int Conf Object Oriented Program Syst Lang Appl – ident: ref41 doi: 10.1145/2542142.2542144 – ident: ref43 doi: 10.1145/1806596.1806598 – start-page: 52 year: 2011 ident: ref44 article-title: The eval that men do - A large-scale study of the use of eval in JavaScript applications publication-title: Proc Eur Conf Object-Oriented Program – ident: ref29 doi: 10.1007/11688839_5 – year: 0 ident: ref25 – year: 0 ident: ref24 – year: 2013 ident: ref32 article-title: Polyglot programmer: Jython 101-A refreshing look at a mature alternative publication-title: Oracle Java Magazine – year: 0 ident: ref58 – ident: ref61 doi: 10.1145/1353482.1353488 – ident: ref37 doi: 10.1007/978-3-030-02768-1_4 – ident: ref57 doi: 10.1145/2509578.2509581 – year: 0 ident: ref18 – start-page: 114 year: 1998 ident: ref52 article-title: Two ways to bake your Pizza - Translating parameterised types into Java publication-title: Proc Generic Program – ident: ref40 doi: 10.1145/2500828.2500838 – ident: ref15 doi: 10.1109/ICSE.2013.6606621  | 
    
| SSID | ssj0005775 ssib053395008  | 
    
| Score | 2.433434 | 
    
| Snippet | Call graphs have many applications in software engineering, including bug-finding, security analysis, and code navigation in IDEs. However, the construction of... | 
    
| SourceID | unpaywall proquest crossref ieee  | 
    
| SourceType | Open Access Repository Aggregation Database Enrichment Source Index Database Publisher  | 
    
| StartPage | 2644 | 
    
| SubjectTerms | Algorithms Applications programs Call graphs Clojure compilation Compilers Computer security Graphs Groovy Infrastructure Java JVM OCaml Python Qualitative analysis Ruby Run time (computers) Scala Scheme Security Software engineering Soot Static analysis Virtual environments  | 
    
| SummonAdditionalLinks | – databaseName: Unpaywall dbid: UNPAY link: http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwnV3PT9swFH4a5QCXsfFDK2PIBy5MSuLYsRNrpwoBFRoIaRQBl8h2Egmtaiu1aLC_fs-uUxWQkNgtB0d2_Jy874ufvw_ggPMKs6JwW_42R4LSiMjUaR3xzHJleCWbyh0UPr-Q_UF2diNulqy-nMOJLz6rY3fp9_Lv6-FjnnCWKOkFqBJaKMzimYonVbMCq1IgDO_A6uDisnfbamQK4e3vEJ-oCEEG9SZzTEa8KNJ2u5KqZDZ1WpmpihkSBeUMs5fSk_dbeQY91x5GE_30Rw-HS1noZAPu2vHPi09-xw8zE9u_L6Qd_-sBP8HHgE1Jb76YPsOHerQJG63vAwmfgS340SOu_PCJjBtyhIMkp071mjjvz1aNliAWJmfX51HfHyIhP8Nv0ek2DE6Or476UTBhiCznfBZJZKpIQqTglUBoYDXjurBpVWXK2oqnTWF1zqjUzCqpqTU6N8xkjCprkGpRvgOd0XhUfwFSyybnOs2ELYpMydTkttHz072KIu7pQtLOfWmDQrkzyhiWnqlQVV79Oi5dtMoQrS4cLu6YzNU53mi75SZ80S5McRf22vCW4fWdlkjyCiEQbPEufF-E_FUXuHiedbH7nsZfYZ25-hhfGrMHHQxQ_Q0Bzszsh6X8D6X07Pc priority: 102 providerName: Unpaywall  | 
    
| Title | A Study of Call Graph Construction for JVM-Hosted Languages | 
    
| URI | https://ieeexplore.ieee.org/document/8944149 https://www.proquest.com/docview/2608557413 https://ieeexplore.ieee.org/ielx7/32/9646454/08944149.pdf  | 
    
| UnpaywallVersion | publishedVersion | 
    
| Volume | 47 | 
    
| hasFullText | 1 | 
    
| inHoldings | 1 | 
    
| isFullTextHit | |
| isPrint | |
| journalDatabaseRights | – providerCode: PRVIEE databaseName: IEEE Xplore (NTUSG) customDbUrl: eissn: 1939-3520 dateEnd: 99991231 omitProxy: false ssIdentifier: ssj0005775 issn: 0098-5589 databaseCode: RIE dateStart: 19750101 isFulltext: true titleUrlDefault: https://ieeexplore.ieee.org/ providerName: IEEE  | 
    
| link | http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwjV1LSwMxEB6sHvTiW1wfJQcvitvubjbZDZ6KWIvYIthKPS157cXSCm0R_fUm-7JVEW97yDLJTMLMl3wzA3CGsTJekdgnfxkZgJISV2hfuziUmAmsaKpsonC3RzuD8G5IhitwWeXCaK0z8plu2M_sLV9N5NxelTVjZpx3yGpQi2Ka52p90TmiiJT1MQmJWfkk6bFm__HGcrhYIzBggNmm2AsuKOupshRers_Hr_z9jY9GC56mvQXdco45weSlMZ-Jhvz4Vr7xv4vYhs0i5EStfI_swIoe78JW2c4BFad7D65ayLIK39EkRddmXujWFrNGtqVnWWQWmRAX3T113U6WG4Lui9vO6T4M2jf9645b9FZwJcZ45lIDQA22oAQrYjy-5AHmsfSVCpmUCvtpLHkUeJQHklHuScEjEYgw8JgUBkF5-ABWx5OxPgSkaRph7odExnHIqC8imfI8aZd5JpxxoFmqO5FF4XHb_2KUZADEY4kxUGINlBQGcuC8-uM1L7rxx9g9q-NqXKFeB05KiybFqZwmBrvFhJgYCjtwUVn5h4jZVC-JOPpdxDFsBJbgknFbTmDVmEKfmghlJurZ1qzD2qD30Hr-BF0n36Y | 
    
| linkProvider | IEEE | 
    
| linkToHtml | http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwjV3PT8IwFH5BPOBFVDSiqD140TjY1nZb44kYFRG8CMbb0nbdRTJIgBj86233A0GN8bZDl9e-1-a9r_3eewDnGEfaK1Lz5C99DVBiagnlKAsTiZnAkRdHJlG4_-R1hqT7Sl9LcLXMhVFKpeQz1TSf6Vt-NJZzc1XWCph23oRtwCYlhNAsW-uL0OH7tKiQSWnAikdJm7UGz7eGxcWaroYDzLTFXnFCaVeVtQCzMk8mfPHOR6MVX3NXhX4xy4xi8tacz0RTfnwr4PjfZezAdh50ona2S3ahpJI9qBYNHVB-vmtw3UaGV7hA4xjd6Hmhe1POGpmmnkWZWaSDXNR96VudNDsE9fL7zuk-DO9uBzcdK--uYEmM8czyNATV6MKjOKLa50vuYh5IJ4oIkzLCThxI7ru2x13JPG5LwX3hCuLaTAqNoWx8AOVknKhDQMqLfcwdQmUQEOY5wpcxz9J2ma0Dmjq0CnWHMi89bjpgjMIUgtgs1AYKjYHC3EB1uFj-McnKbvwxtmZ0vByXq7cOjcKiYX4up6FGbwGlOorCdbhcWvmHiNlUrYk4-l3EGVQ6g34v7D08PR7DlmvoLinTpQFlbRZ1ouOVmThNt-knM2ThQw | 
    
| linkToUnpaywall | http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwnV3PT9swFH4a5QCXsfFDK2PIBy5MSuLYsRNrpwoBFRoIaRQBl8h2Egmtaiu1aLC_fs-uUxWQkNgtB0d2_Jy874ufvw_ggPMKs6JwW_42R4LSiMjUaR3xzHJleCWbyh0UPr-Q_UF2diNulqy-nMOJLz6rY3fp9_Lv6-FjnnCWKOkFqBJaKMzimYonVbMCq1IgDO_A6uDisnfbamQK4e3vEJ-oCEEG9SZzTEa8KNJ2u5KqZDZ1WpmpihkSBeUMs5fSk_dbeQY91x5GE_30Rw-HS1noZAPu2vHPi09-xw8zE9u_L6Qd_-sBP8HHgE1Jb76YPsOHerQJG63vAwmfgS340SOu_PCJjBtyhIMkp071mjjvz1aNliAWJmfX51HfHyIhP8Nv0ek2DE6Or476UTBhiCznfBZJZKpIQqTglUBoYDXjurBpVWXK2oqnTWF1zqjUzCqpqTU6N8xkjCprkGpRvgOd0XhUfwFSyybnOs2ELYpMydTkttHz072KIu7pQtLOfWmDQrkzyhiWnqlQVV79Oi5dtMoQrS4cLu6YzNU53mi75SZ80S5McRf22vCW4fWdlkjyCiEQbPEufF-E_FUXuHiedbH7nsZfYZ25-hhfGrMHHQxQ_Q0Bzszsh6X8D6X07Pc | 
    
| openUrl | ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fsummon.serialssolutions.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=A+Study+of+Call+Graph+Construction+for+JVM-Hosted+Languages&rft.jtitle=IEEE+transactions+on+software+engineering&rft.au=Ali%2C+Karim&rft.au=Lai%2C+Xiaoni&rft.au=Luo%2C+Zhaoyi&rft.au=Lhotak%2C+Ondrej&rft.date=2021-12-01&rft.issn=0098-5589&rft.eissn=1939-3520&rft.volume=47&rft.issue=12&rft.spage=2644&rft.epage=2666&rft_id=info:doi/10.1109%2FTSE.2019.2956925&rft.externalDBID=n%2Fa&rft.externalDocID=10_1109_TSE_2019_2956925 | 
    
| thumbnail_l | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/lc.gif&issn=0098-5589&client=summon | 
    
| thumbnail_m | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/mc.gif&issn=0098-5589&client=summon | 
    
| thumbnail_s | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/sc.gif&issn=0098-5589&client=summon |