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...

Full description

Saved in:
Bibliographic Details
Published inIEEE transactions on software engineering Vol. 47; no. 12; pp. 2644 - 2666
Main Authors Ali, Karim, Lai, Xiaoni, Luo, Zhaoyi, Lhotak, Ondrej, Dolby, Julian, Tip, Frank
Format Journal Article
LanguageEnglish
Published New York IEEE 01.12.2021
IEEE Computer Society
Subjects
Online AccessGet full text
ISSN0098-5589
1939-3520
2326-3881
1939-3520
DOI10.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