Performance Analysis and Optimization of the Java Memory System Carl Stephen Lebsack Iowa State University

Total Page:16

File Type:pdf, Size:1020Kb

Performance Analysis and Optimization of the Java Memory System Carl Stephen Lebsack Iowa State University Iowa State University Capstones, Theses and Retrospective Theses and Dissertations Dissertations 2008 Performance analysis and optimization of the Java memory system Carl Stephen Lebsack Iowa State University Follow this and additional works at: https://lib.dr.iastate.edu/rtd Part of the Computer Sciences Commons Recommended Citation Lebsack, Carl Stephen, "Performance analysis and optimization of the Java memory system" (2008). Retrospective Theses and Dissertations. 15792. https://lib.dr.iastate.edu/rtd/15792 This Dissertation is brought to you for free and open access by the Iowa State University Capstones, Theses and Dissertations at Iowa State University Digital Repository. It has been accepted for inclusion in Retrospective Theses and Dissertations by an authorized administrator of Iowa State University Digital Repository. For more information, please contact [email protected]. Performance analysis and optimization of the Java memory system by Carl Stephen Lebsack A dissertation submitted to the graduate faculty in partial fulfillment of the requirements for the degree of DOCTOR OF PHILOSOPHY Major: Computer Engineering Program of Study Committee: J. Morris Chang, Major Professor Arun K. Somani Akhilesh Tyagi Zhao Zhang Donna S. Kienzler Iowa State University Ames, Iowa 2008 Copyright c Carl Stephen Lebsack, 2008. All rights reserved. 3307127 3307127 2008 ii DEDICATION I would first like to dedicate this thesis to God by whom all things were made and in whom they are held together. Only by His grace and mercy through the gift of His Son, Jesus Christ, was I afforded the opportunity to live and work and play. I would also like to dedicate this thesis to my parents, Stephen and Debra Lebsack, whose support was pivotal in the completion of this work. I want to thank my siblings, Mary and her husband, Aaron Hudlemeyer, David and Laurel, and the rest of my family for their unwavering belief in my ability to complete PhD study and their continual love and support during my unbelief. I also thank Mary for her help in proofing and editing the thesis text. I, am, terrible, with, commas. Laurel deserves an extra thanks for enduring the front lines of battle while living with me during her own transition into college. I would also like to thank my fiancee, Tegwin Taylor, who, although she came along near the end of my study, was extremely uplifting and provided significant motivation to finish at long last. Thanks also goes out to the rest of my friends and family for their continued encouragement and prayers. I could not have done this alone. iii TABLE OF CONTENTS LIST OF TABLES ................................... vii LIST OF FIGURES .................................. viii CHAPTER 1 Introduction ............................. 1 CHAPTER 2 Constructing a Memory Hierarchy Simulation Environment 7 2.1 Abstract ........................................ 7 2.2 Introduction ...................................... 7 2.3 Environment Construction .............................. 9 2.3.1 Components ................................. 9 2.3.2 Integration .................................. 11 2.3.3 Cluster Deployment ............................. 13 2.4 Experimental Measurement ............................. 15 2.4.1 Object Accesses ............................... 15 2.4.2 Scratchpad Modeling ............................. 17 2.5 Related Work ..................................... 18 2.5.1 bochs ..................................... 19 2.5.2 Dynamic Simple Scalar ........................... 19 2.5.3 Simics ..................................... 19 2.5.4 Vertical Profiling ............................... 20 2.6 Conclusion ...................................... 20 CHAPTER 3 Access Density: A Locality Metric for Objects ........ 21 3.1 Abstract ........................................ 21 iv 3.2 Introduction ...................................... 21 3.3 Theory ......................................... 24 3.4 Experimental Setup ................................. 28 3.4.1 Calculating Access Density ......................... 28 3.4.2 Measuring Memory Traffic .......................... 30 3.5 Results ......................................... 31 3.5.1 Access Density Calculations ......................... 31 3.5.2 Access Density Analysis ........................... 38 3.5.3 Memory Traffic Measurements ....................... 39 3.6 Related Work ..................................... 42 3.7 Conclusion ...................................... 45 CHAPTER 4 Using Scratchpad to Exploit Object Locality in Java ..... 46 4.1 Abstract ........................................ 46 4.2 Introduction ...................................... 46 4.3 Experimental Setup ................................. 49 4.3.1 Experiments ................................. 50 4.4 Results ......................................... 51 4.4.1 Generational Garbage Collection Results .................. 51 4.4.2 Memory Traffic Results ........................... 55 4.5 Related Work ..................................... 61 4.6 Conclusions ...................................... 62 CHAPTER 5 Cache Prefetching and Replacement for Java Allocation .. 63 5.1 Abstract ........................................ 63 5.2 Introduction ...................................... 64 5.3 Cache Management Techniques ........................... 67 5.3.1 Hardware Prefetching ............................ 67 5.3.2 Software Prefetching ............................. 68 5.3.3 Cache Replacement Policy .......................... 69 v 5.4 Experimental Framework .............................. 73 5.5 Experimental Evaluation ............................... 76 5.5.1 Hardware Prefetching for Java Applications ................ 76 5.5.2 Software Prefetching on Allocation for Java Applications ........ 77 5.5.3 Biased Cache Replacement for Java Applications ............. 79 5.5.4 Memory Read Traffic ............................. 81 5.5.5 Prefetch Accuracy .............................. 83 5.5.6 Prefetch Coverage .............................. 83 5.5.7 Bandwidth Aware Performance Model ................... 85 5.6 Related Work ..................................... 89 5.7 Conclusions ...................................... 91 CHAPTER 6 Real Machine Performance Evaluation of Java and the Mem- ory System ..................................... 93 6.1 Abstract ........................................ 93 6.2 Introduction ...................................... 94 6.3 Background ...................................... 96 6.4 Experimental Framework and Methodology .................... 98 6.4.1 Page Coloring Details ............................ 99 6.4.2 Paging and Swap Space ........................... 100 6.4.3 Java Environment .............................. 100 6.4.4 Measurement Methodology ......................... 101 6.4.5 Metrics .................................... 102 6.5 Experimental Results ................................. 103 6.5.1 Java minimum heap values ......................... 103 6.5.2 Java user and system time .......................... 104 6.5.3 Java runtime sensitivity heap size ...................... 105 6.5.4 Java runtime sensitivity to nursery size .................. 106 6.5.5 Java runtime sensitivity to cache performance ............... 110 vi 6.5.6 Java runtime sensitivity to L2 cache size .................. 114 6.6 Related Work ..................................... 118 6.7 Conclusions ...................................... 119 Appendix: Java runtime sensitivity to nursery L2 cache partitioning ......... 120 CHAPTER 7 Conclusion .............................. 128 BIBLIOGRAPHY ................................... 130 ACKNOWLEDGEMENTS .............................. 137 vii LIST OF TABLES Table 3.1 Object parameters and access density ................... 27 Table 4.1 Reduced memory traffic using scratchpad (Bytes) ............ 59 Table 5.1 Memory parameters for select processors ................. 75 Table 6.1 Minimum heap values on JDK 1.6 for DaCapo and SPECjvm98 bench- marks .................................... 104 Table 6.2 Breakdown of user and system time for DaCapo and SPECjvm98 bench- marks .................................... 105 Table 6.3 Runtime increase at 2X heap over 5.5X heap with a half-heap nursery for DaCapo and SPECjvm98 benchmarks ................ 106 Table 6.4 Runtime increase at 2X heap with optimal nursery over 5.5X heap with a half-heap nursery for DaCapo and SPECjvm98 benchmarks ..... 109 Table 6.5 Linear correlation between cache misses and runtime for DaCapo and SPECjvm98 ................................. 112 Table 6.6 Predicted runtime with no cache misses, best achievable runtime and ratio for DaCapo and SPECjvm98 .................... 113 Table 6.7 Cache size sensitivity for DaCapo and SPECjvm98 ........... 117 Table 6.8 Best and worst partitioning runtime ratios for DaCapo and SPECjvm98 126 viii LIST OF FIGURES Figure 1.1 Java System ................................. 2 Figure 1.2 Full Java System .............................. 2 Figure 2.1 Simulation environment components ................... 9 Figure 2.2 Mirrored Java heap in simulator ...................... 16 Figure 2.3 Memory hierarchy with cache and scratchpad .............. 18 Figure 3.1 Object arrangements in scratchpad .................... 26 Figure 3.2 Access density for javac ........................... 32 Figure 3.3 Average and weighted access density vs. object size and vs. object lifetime for javac .............................. 32 Figure 3.4 Follow size trend - Average and weighted access density vs. object size - Small objects have best locality ....................
Recommended publications
  • Real-Time Java for Embedded Devices: the Javamen Project*
    REAL-TIME JAVA FOR EMBEDDED DEVICES: THE JAVAMEN PROJECT* A. Borg, N. Audsley, A. Wellings The University of York, UK ABSTRACT: Hardware Java-specific processors have been shown to provide the performance benefits over their software counterparts that make Java a feasible environment for executing even the most computationally expensive systems. In most cases, the core of these processors is a simple stack machine on which stack operations and logic and arithmetic operations are carried out. More complex bytecodes are implemented either in microcode through a sequence of stack and memory operations or in Java and therefore through a set of bytecodes. This paper investigates the Figure 1: Three alternatives for executing Java code (take from (6)) state-of-the-art in Java processors and identifies two areas of improvement for specialising these processors timeliness as a key issue. The language therefore fails to for real-time applications. This is achieved through a allow more advanced temporal requirements of threads combination of the implementation of real-time Java to be expressed and virtual machine implementations components in hardware and by using application- may behave unpredictably in this context. For example, specific characteristics expressed at the Java level to whereas a basic thread priority can be specified, it is not drive a co-design strategy. An implementation of these required to be observed by a virtual machine and there propositions will provide a flexible Ravenscar- is no guarantee that the highest priority thread will compliant virtual machine that provides better preempt lower priority threads. In order to address this performance while still guaranteeing real-time shortcoming, two competing specifications have been requirements.
    [Show full text]
  • Zing:® the Best JVM for the Enterprise
    PRODUCT DATA SHEET Zing:® ZING The best JVM for the enterprise Zing Runtime for Java A JVM that is compatible and compliant The Performance Standard for Low Latency, with the Java SE specification. Zing is a Memory-Intensive or Interactive Applications better alternative to your existing JVM. INTRODUCING ZING Zing Vision (ZVision) Today Java is ubiquitous across the enterprise. Flexible and powerful, Java is the ideal choice A zero-overhead, always-on production- for development teams worldwide. time monitoring tool designed to support rapid troubleshooting of applications using Zing. Zing builds upon Java’s advantages by delivering a robust, highly scalable Java Virtual Machine ReadyNow! Technology (JVM) to match the needs of today’s real time enterprise. Zing is the best JVM choice for all Solves Java warm-up problems, gives Java workloads, including low-latency financial systems, SaaS or Cloud-based deployments, developers fine-grained control over Web-based eCommerce applications, insurance portals, multi-user gaming platforms, Big Data, compilation and allows DevOps to save and other use cases -- anywhere predictable Java performance is essential. and reuse accumulated optimizations. Zing enables developers to make effective use of memory -- without the stalls, glitches and jitter that have been part of Java’s heritage, and solves JVM “warm-up” problems that can degrade ZING ADVANTAGES performance at start up. With improved memory-handling and a more stable, consistent runtime Takes advantage of the large memory platform, Java developers can build and deploy richer applications incorporating real-time data and multiple CPU cores available in processing and analytics, driving new revenue and supporting new business innovations.
    [Show full text]
  • Apache Harmony Project Tim Ellison Geir Magnusson Jr
    The Apache Harmony Project Tim Ellison Geir Magnusson Jr. Apache Harmony Project http://harmony.apache.org TS-7820 2007 JavaOneSM Conference | Session TS-7820 | Goal of This Talk In the next 45 minutes you will... Learn about the motivations, current status, and future plans of the Apache Harmony project 2007 JavaOneSM Conference | Session TS-7820 | 2 Agenda Project History Development Model Modularity VM Interface How Are We Doing? Relevance in the Age of OpenJDK Summary 2007 JavaOneSM Conference | Session TS-7820 | 3 Agenda Project History Development Model Modularity VM Interface How Are We Doing? Relevance in the Age of OpenJDK Summary 2007 JavaOneSM Conference | Session TS-7820 | 4 Apache Harmony In the Beginning May 2005—founded in the Apache Incubator Primary Goals 1. Compatible, independent implementation of Java™ Platform, Standard Edition (Java SE platform) under the Apache License 2. Community-developed, modular architecture allowing sharing and independent innovation 3. Protect IP rights of ecosystem 2007 JavaOneSM Conference | Session TS-7820 | 5 Apache Harmony Early history: 2005 Broad community discussion • Technical issues • Legal and IP issues • Project governance issues Goal: Consolidation and Consensus 2007 JavaOneSM Conference | Session TS-7820 | 6 Early History Early history: 2005/2006 Initial Code Contributions • Three Virtual machines ● JCHEVM, BootVM, DRLVM • Class Libraries ● Core classes, VM interface, test cases ● Security, beans, regex, Swing, AWT ● RMI and math 2007 JavaOneSM Conference | Session TS-7820 |
    [Show full text]
  • Java in Embedded Linux Systems
    Java in Embedded Linux Systems Java in Embedded Linux Systems Thomas Petazzoni / Michael Opdenacker Free Electrons http://free-electrons.com/ Created with OpenOffice.org 2.x Java in Embedded Linux Systems © Copyright 2004-2007, Free Electrons, Creative Commons Attribution-ShareAlike 2.5 license http://free-electrons.com Sep 15, 2009 1 Rights to copy Attribution ± ShareAlike 2.5 © Copyright 2004-2008 You are free Free Electrons to copy, distribute, display, and perform the work [email protected] to make derivative works to make commercial use of the work Document sources, updates and translations: Under the following conditions http://free-electrons.com/articles/java Attribution. You must give the original author credit. Corrections, suggestions, contributions and Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license translations are welcome! identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. License text: http://creativecommons.org/licenses/by-sa/2.5/legalcode Java in Embedded Linux Systems © Copyright 2004-2007, Free Electrons, Creative Commons Attribution-ShareAlike 2.5 license http://free-electrons.com Sep 15, 2009 2 Best viewed with... This document is best viewed with a recent PDF reader or with OpenOffice.org itself! Take advantage of internal
    [Show full text]
  • Solution Brief JVM Performance Monitoring
    Solution Brief Monitoring the Health & Performance of Java Virtual Machines (JVM) Total Performance Visibility JVM: The Cornerstone of Java Enterprise Applications The Java Virtual Machine (JVM) forms the core of the Java application architecture. It plays the crucial role of interpreting and translating Java byte code into operations on the host platform. Since Java middleware (application servers such as Tomcat, JBoss EAP, JBoss AS, WildFly, WebSphere, and WebLogic) runs on the JVM, a performance issue at the JVM level has a major impact on business services supported by it. Monitoring of the JVM must be an integral part of any Java application performance monitoring strategy. IT Ops and DevOps teams use JVM Key Benefits performance metrics to troubleshoot server-side bottlenecks. Developers and architects can also benefit from JVM monitoring by uncovering code- Proactively detect and resolve level issues. Java application problems to ensure high service uptime and business continuity Key JVM Performance Questions to Answer Troubleshoot faster: Real-time • Is there any runaway thread hogging the CPU? Which line of code is it alerts pinpoint the exact line executing, in which class, and which method? of code that is impacting Java • Is the JVM heap and non-heap memory sized correctly? applications • Are there any out-of-memory-exceptions or memory leaks? In-depth analytics enable architects to optimize Java • When does garbage collection happen, and how much memory is applications to scale and support freed up each time? additional users • Are there any thread deadlocks happening that are causing Single pane of glass to monitor application processing to be hung? everything Java—from application server, JVM and database, all the way down to server and storage End-to-End JVM Monitoring with eG Enterprise infrastructure eG Enterprise is a comprehensive performance monitoring, diagnosis and reporting solution for Java application infrastructures.
    [Show full text]
  • A Study of Cache Performance in Java Virtual Machines, the University of Texas at Austin, 2002
    Cache Performance in Java Virtual Machines: A Study of Constituent Phases Anand S. Rajan, Juan Rubio and Lizy K. John Laboratory for Computer Architecture Department of Electrical & Computer Engineering The University of Texas at Austin (arajan, jrubio,[email protected]) Abstract This paper studies the cache performance of Java programs in the interpreted and just-in- time (JIT) modes by analyzing memory reference traces of the SPECjvm98 applications with the Latte JVM. Specifically, we study the cache performance of the different components of the JVM (class loader, the execution engine and the garbage collector). Poor data cache performance in JITs is caused by code installation, and the data write miss rate can be as high as 70% in the execution engine. In addition, this code installation also causes deterioration in performance of the instruction cache during execution of translated code. We also believe that there is considerable interference between data accesses of the garbage collector and that of the compiler-translator execution engine of the JIT mode. We observe that the miss percentages in the garbage collection phase are of the order of 60% for the JIT mode; we believe that interference between data accesses of the garbage collector and the JIT execution engine lead to further deterioration of the data cache performance wherever the contribution of the garbage collector is significant. We observe that an increase in cache sizes does not substantially improve performance in the case of data cache writes, which is identified to be the principal performance bottleneck in JITs. 1 1. Introduction Java[1] is a widely used programming language due to the machine independent nature of bytecodes.
    [Show full text]
  • Java and C I CSE 351 Autumn 2016
    L26: JVM CSE351, Spring 2018 Java Virtual Machine CSE 351 Spring 2018 Model of a Computer “Showing the Weather” Pencil and Crayon on Paper Matai Feldacker-Grossman, Age 4 May 22, 2018 L26: JVM CSE351, Spring 2018 Roadmap C: Java: Memory & data Integers & floats car *c = malloc(sizeof(car)); Car c = new Car(); x86 assembly c->miles = 100; c.setMiles(100); c->gals = 17; c.setGals(17); Procedures & stacks float mpg = get_mpg(c); float mpg = Executables free(c); c.getMPG(); Arrays & structs Memory & caches Assembly get_mpg: Processes language: pushq %rbp Virtual memory movq %rsp, %rbp ... Memory allocation popq %rbp Java vs. C ret OS: Machine 0111010000011000 code: 100011010000010000000010 1000100111000010 110000011111101000011111 Computer system: 2 L26: JVM CSE351, Spring 2018 Implementing Programming Languages Many choices in how to implement programming models We’ve talked about compilation, can also interpret Interpreting languages has a long history . Lisp, an early programming language, was interpreted Interpreters are still in common use: . Python, Javascript, Ruby, Matlab, PHP, Perl, … Interpreter Your source code implementation Your source code Binary executable Interpreter binary Hardware Hardware 3 L26: JVM CSE351, Spring 2018 An Interpreter is a Program Execute (something close to) the source code directly Simpler/no compiler – less translation More transparent to debug – less translation Easier to run on different architectures – runs in a simulated environment that exists only inside the interpreter process . Just port the interpreter (program), not the program-intepreted Slower and harder to optimize 4 L26: JVM CSE351, Spring 2018 Interpreter vs. Compiler An aspect of a language implementation . A language can have multiple implementations . Some might be compilers and other interpreters “Compiled languages” vs.
    [Show full text]
  • Java Performance Mysteries
    ITM Web of Conferences 7 09015 , (2016) DOI: 10.1051/itmconf/20160709015 ITA 2016 Java Performance Mysteries Pranita Maldikar, San-Hong Li and Kingsum Chow [email protected], {sanhong.lsh, kingsum.kc}@alibaba-inc.com Abstract. While assessing software performance quality in the cloud, we noticed some significant performance variation of several Java applications. At a first glance, they looked like mysteries. To isolate the variation due to cloud, system and software configurations, we designed a set of experiments and collected set of software performance data. We analyzed the data to identify the sources of Java performance variation. Our experience in measuring Java performance may help attendees in selecting the trade-offs in software configurations and load testing tool configurations to obtain the software quality measurements they need. The contributions of this paper are (1) Observing Java performance mysteries in the cloud, (2) Identifying the sources of performance mysteries, and (3) Obtaining optimal and reproducible performance data. 1 Introduction into multiple tiers like, client tier, middle-tier and data tier. For testing a Java EE workload theclient tier would Java is both a programming language and a platform. be a load generator machine using load generator Java as a programming language follows object-oriented software like Faban [2]. This client tier will consist of programming model and it requires Java Virtual users that will send the request to the application server Machine (Java Interpreter) to run Java programs. Java as or the middle tier.The middle tier contains the entire a platform is an environment on which we can deploy business logic for the enterprise application.
    [Show full text]
  • Effective Inline-Threaded Interpretation of Java Bytecode
    Effective Inline-Threaded Interpretation of Java Bytecode Using Preparation Sequences Etienne Gagnon1 and Laurie Hendren2 1 Sable Research Group Universit´eduQu´ebec `a Montr´eal, [email protected] 2 McGill University Montreal, Canada, [email protected] Abstract. Inline-threaded interpretation is a recent technique that im- proves performance by eliminating dispatch overhead within basic blocks for interpreters written in C [11]. The dynamic class loading, lazy class initialization, and multi-threading features of Java reduce the effective- ness of a straight-forward implementation of this technique within Java interpreters. In this paper, we introduce preparation sequences, a new technique that solves the particular challenge of effectively inline-threa- ding Java. We have implemented our technique in the SableVM Java virtual machine, and our experimental results show that using our tech- nique, inline-threaded interpretation of Java, on a set of benchmarks, achieves a speedup ranging from 1.20 to 2.41 over switch-based inter- pretation, and a speedup ranging from 1.15 to 2.14 over direct-threaded interpretation. 1 Introduction One of the main advantages of interpreters written in high-level languages is their simplicity and portability, when compared to static and dynamic compiler-based systems. One of their main drawbacks is poor performance, due to a high cost for dispatching interpreted instructions. In [11], Piumarta and Riccardi introduced a technique called inlined-threading which reduces this overhead by dynamically inlining instruction sequences within basic blocks, leaving a single instruction dispatch at the end of each sequence. To our knowledge, inlined-threading has not been applied to Java interpreters before.
    [Show full text]
  • Java Virtual Machine Is a Virtual Machine, an Abstract Computer That Has Its Own ISA, Own Memory, Stack, Heap, Etc
    Java Virtual Machine i Java Virtual Machine About the Tutorial Java Virtual Machine is a virtual machine, an abstract computer that has its own ISA, own memory, stack, heap, etc. It is an engine that manages system memory and drives Java code or applications in run-time environment. It runs on the host Operating system and places its demands for resources to it. Audience This tutorial is designed for software professionals who want to run their Java code and other applications on any operating system or device, and to optimize and manage program memory. Prerequisites Before you start to learn this tutorial, we assume that you have a basic understanding of Java Programming. If you are new to these concepts, we suggest you to go through the Java programming tutorial first to get a hold on the topics mentioned in this tutorial. Copyright & Disclaimer Copyright 2019 by Tutorials Point (I) Pvt. Ltd. All the content and graphics published in this e-book are the property of Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish any contents or a part of contents of this e-book in any manner without written consent of the publisher. We strive to update the contents of our website and tutorials as timely and as precisely as possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy, timeliness or completeness of our website or its contents including this tutorial. If you discover any errors on our website or in this tutorial, please notify us at [email protected] ii Java Virtual Machine Table of Contents About the Tutorial ..........................................................................................................................................
    [Show full text]
  • Performance Comparison of Java and C++ When Sorting Integers and Writing/Reading Files
    Bachelor of Science in Computer Science February 2019 Performance comparison of Java and C++ when sorting integers and writing/reading files. Suraj Sharma Faculty of Computing, Blekinge Institute of Technology, 371 79 Karlskrona, Sweden This thesis is submitted to the Faculty of Computing at Blekinge Institute of Technology in partial fulfilment of the requirements for the degree of Bachelor of Science in Computer Sciences. The thesis is equivalent to 20 weeks of full-time studies. The authors declare that they are the sole authors of this thesis and that they have not used any sources other than those listed in the bibliography and identified as references. They further declare that they have not submitted this thesis at any other institution to obtain a degree. Contact Information: Author(s): Suraj Sharma E-mail: [email protected] University advisor: Dr. Prashant Goswami Department of Creative Technologies Faculty of Computing Internet : www.bth.se Blekinge Institute of Technology Phone : +46 455 38 50 00 SE-371 79 Karlskrona, Sweden Fax : +46 455 38 50 57 ii ABSTRACT This study is conducted to show the strengths and weaknesses of C++ and Java in three areas that are used often in programming; loading, sorting and saving data. Performance and scalability are large factors in software development and choosing the right programming language is often a long process. It is important to conduct these types of direct comparison studies to properly identify strengths and weaknesses of programming languages. Two applications were created, one using C++ and one using Java. Apart from a few syntax and necessary differences, both are as close to being identical as possible.
    [Show full text]
  • Java Virtual Machine Guide
    Java Platform, Standard Edition Java Virtual Machine Guide Release 14 F23572-02 May 2021 Java Platform, Standard Edition Java Virtual Machine Guide, Release 14 F23572-02 Copyright © 1993, 2021, Oracle and/or its affiliates. This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited. The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing. If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, then the following notice is applicable: U.S. GOVERNMENT END USERS: Oracle programs (including any operating system, integrated software, any programs embedded, installed or activated on delivered hardware, and modifications of such programs) and Oracle computer documentation or other Oracle data delivered to or accessed by U.S. Government end users are "commercial computer software" or "commercial computer software documentation" pursuant to the applicable Federal Acquisition
    [Show full text]