An Empirical Analysis of the Java Collections Framework Versus the C++ Standard Template Library
|
|
|
- Vernon Hunter
- 10 years ago
- Views:
Transcription
1 An Empirical Analysis of the Java Collections Framework Versus the C++ Standard Template Library Sean Wentworth: David Langan: Thomas Hain: Abstract School of Computer and Information Sciences University of South Alabama Mobile, AL The choice of a programming language involves a tradeoff between run-time performance and factors that are more important during implementation and maintenance. In the case of two specific object-oriented languages, Java and C++, performance has favored C++. On the other hand, design-time factors such as platformindependence, flexibility, safety, and security are characteristics of Java that have made it increasingly popular. This paper presents an empirical analysis of the operation and application-level performance of two libraries supporting these languages, the Java Collections Framework and the C++ Standard Template Library. The performance of the libraries is also taken to be indicative of the performance of their respective languages, and a goal of this study is to aid in the evaluation of the above-mentioned tradeoff. The results found are consistent with other Java and C++ performance comparisons found in the literature. However, compiling Java to native machine code narrows the performance gap between C++ and Java, signaling that this may be Java's best hope for performance gains. Keywords: Performance benchmarks, STL performance, CF performance, Java versus C++. 1 Introduction The developer s choice of a programming language, after other constraints have narrowed the field, involves a tradeoff between run-time performance and design-time factors that impact implementation and maintenance. In the case of two specific objectoriented languages, Java and C++, performance has favored C++. On the other hand, design-time factors such as platform-independence, flexibility, safety, and security are characteristics of Java that have made it increasingly popular over the last seven years. Sun Microsystems write once, run anywhere marketing line for Java quickly caught developers attention. Java s early evolution coincided with the rapid growth of 1
2 the Internet, which was the first proving ground for Java s claims of platform independence. Although platform independence may have been the initial hook that lured programmers to Java, it does not account for the sustained interest. Java s widespread acceptance comes from its flexibility, simplicity, and safety relative to other object-oriented programming languages [10]. As Tyma states, [Java] takes the best ideas developed over the past 10 years and incorporates them into one powerful and highly supported language [24]. Java s rich set of packages has enticed many programmers to select the language for its handling of run-time exceptions, its support for writing network code and its support for creating multithreaded applications. Not only does Java simplify the design process, but it also ensures a high degree of safety that is not found in languages like C++. Optional thread synchronization, for example, is guaranteed and managed by the language and array bounds checking is automatically done at run-time. While borrowing much from C++, Java deliberately omits many of the error-prone features that arise from explicit memory management in C++ [9]. Java's memory management model provides both programmer convenience and run-time safety. The Java Run-time Environment (JRE) includes an asynchronous garbage collector that is responsible for deallocating heap memory thus relieving the programmer of concerns about memory leaks [12] and dangling references. It has been shown that Java is a highly productive programming environment, generating less than half the bugs per line of code than programming in C++ [16]. However, the features that make this possible in Java come at the cost of performance. For example, the run-time performance cost of worry-free garbage collection can be substantial, especially for applications with a high rate of object creation [8]. Initially, performance degradation was not a big concern, since Java was found suitable for Internet computing tasks such as writing applets, where bandwidth and platform independence are more important than program performance. More recently, there has been increased use of Java for performance-sensitive applications, such as server applications and scientific computing, which have typically been written in languages like C++ [11]. The October 2001 issue of the Communications of the ACM 2
3 documents several ongoing projects aimed at the use of Java in the domain of highperformance computing. This paper presents an empirical analysis of the operation and application-level performance of two libraries supporting these languages, the Java Collections Framework and the Standard Template Library. The performance of the libraries is also taken to be indicative of the performance of their respective languages, and a goal of this study is to aid in the evaluation of the tradeoff between run-time performance and design-time factors. Section 2 will outline the technological history of Java performance enhancements, and outline the characteristics of the libraries used in this study. Section 3 reviews other performance comparison studies that have been conducted. Section 4 presents the approach for performance measurement and the results of these tests. Conclusions are drawn in Section 5. 2 Background Java is a young language and its rapid evolution is motivated by its growing popularity. Its previous performance disadvantage has been documented by numerous studies comparing the performance of Java against C/C++, however these suffer from aiming at a moving target. Section 2.1 outlines this moving target. Section 2.2 characterizes the libraries that are used in this study. 2.1 The Technological Evolution of Java Java programs are compiled into class files composed of Java bytecode. The Java virtual machine (JVM) is a process running on a particular physical machine that interprets and executes the bytecode instructions. Initially JVMs were purely interpreted. Later, the interpreted model was improved with just-in-time (JIT) compilers that compiled Java bytecode to native machine code at method load-time. Depending on the application, a JIT-enabled JVM can boost execution performance from a factor of 2 to 20 [10][12][26]. Building on the JIT concept, Sun improved Java s performance further in its HotSpot Performance Engine, which incorporated several performance enhancing technologies [23]. In both JIT and HotSpot, optimizations are performed during program execution. To avoid this run-time overhead, native-code compilers such as Excelsior's 3
4 JET [5] were developed for Java. The Marmot optimizing compiler for Java has yielded "application performance approaching that of C++" [6]. As the performance gap between Java and natively compiled languages has narrowed, many companies are promoting Java as a general-purpose high level computing language [1]. There is an emerging trend to use Java in place of C++ to implement large-scale applications [3]. In 1997, it was estimated that as many as 60% of C++ developers were learning Java [7]. In addition, many computer science curriculums have replaced C++ with Java as the language used to teach introductory programming concepts [24]. This growing language shift has created the need for a better understanding of Java's performance relative to more traditional object-oriented languages, particularly C++. In the literature, Java is most often compared to C++ [12]. This is probably due to their syntactical and semantic similarities, and because C++ has become the de facto standard among general-purpose, object-oriented languages. 2.2 The Libraries What follows is a brief overview of the libraries that were compared: the Java Collections Framework (CF) and the C++ Standard template Library (STL) The Standard Template Library (STL) The STL became part of the ANSI/ISO standard definition of the C++ language in It is organized around three fundamental components: containers, algorithms and iterators. Supporting these fundamental components are three additional components: allocators, adaptors and function objects. As the name implies, containers are objects that hold other objects. The seven containers provided in the STL are grouped into sequence containers (vector, list, deque) and associative containers (set, multiset, map, multimap). Interestingly, containers are not accessed via references (or pointers) as might be expected in C++, but rather using copy semantics, thereby providing both efficiency and type safety [15]. In addition, containers free the programmer from allocation and deallocation concerns by generally controlling these aspects using default allocators [21]. 4
5 Algorithms perform the manipulation of elements in containers. However, algorithms are decoupled from container implementations in a completely orthogonal way by the use of iterators, thus providing genericity. Algorithm templates are loosely grouped into seven functional categories: non-mutating sequence algorithms, mutating sequence algorithms, sorting and searching algorithms, set operations, heap operations, numeric algorithms and miscellaneous/other functions [15] The Java Collections Framework (CF) Sun s initial releases of the SDK included very limited support for data collections and algorithms (only the vector, stack, hashtable and bitset classes). It was not until the release of SDK 1.2 in 1998, that Sun introduced an extended generic container library called the Collections Framework (CF). The primary conceptual difference between the CF and the STL is that the former is focused on containers rather than on the combination of containers and algorithms [25]. The STL defines both containers and algorithms as relatively equal entities that can be mixed and matched in useful ways. The CF, on the other hand, defines algorithms as methods of either the collection interface or class. Because of this singular focus, the CF does not fully support generic programming as defined by Musser and Stepanov [14] since the algorithms are tightly coupled with the containers on which they operate. The CF defines only a small number of algorithms that perform basic operations such as sorting, searching, filling, copying and removing, while the STL offers these and many additional ones such as heap operations, numeric algorithms, find operations, and transformations. The CF containers are defined in a hierarchy of Java interfaces. Interestingly, the interfaces do not derive from a single "super-interface," since the CF does not treat maps as true collections of objects as does the STL. The CF designers decided to differentiate between a Collection, as a group of related objects, and a Map, as a mapping of key/value pairs. However, the map interfaces have "collection view" operations, or wrappers, that allow them to be manipulated as collections. That is, a Map can return a Set of its keys, a Collection of its values or a Set of its pairs [4]. The CF also supplies six concrete classes based upon these interfaces (shown in parentheses with its associated interface in Figure 5
6 1). In addition, an abstract class definition of each of the interfaces is provided, giving programmers a partial implementation from which custom implementations can be built. Collection Map (HashMap) List (ArrayList & LinkedList) Set (HashSet) SortedSet (TreeSet) SortedMap (TreeMap) Figure 1 Collections Framework interface hierarchy with concrete implementations in parentheses 3 Previous Performance Comparisons Previous performance comparisons between Java and C or C++ fall into three general categories. The languages are compared using full-scale applications, smaller application kernels, and low-level microbenchmarks. Although they provide mostly anecdotal data, the full-scale application comparisons offer valuable insight into the language differences on real world applications. Application kernels test a language's ability to perform certain general types of operations, such as the calculation of linear equations. Microbenchmarks are used to analyze specific low-level language operations, such as method calling, variable assignment, or integer addition. Interestingly, the majority of these studies show similar results: Java code running on a JIT-enabled JVM requires about 3 times the run-time of corresponding C or C++ code. 3.1 Full-Scale Applications Jain et al. designed an image processing application called MedJava and compared it to xv, an equivalent image processing application written in C [10]. Eight image filtering operations, each applied to images of various sizes, were timed with each application. Although MedJava met or exceeded the performance of xv in two of the filters, for the remaining six filters, xv executed from 1.5 to 5 times faster than MedJava. This rather large range can be attributed to the designs of the eight image filtering operations. For example, the authors point out that the Java version of the sharpen filter 6
7 performs better than the xv version because this filter is dominated by floating point to integer conversions, which are less efficient in C/C++. A second comparison was performed using transport interface applications over a high speed ATM network to transfer image files. This comparison showed C++ outperforming Java by only 15-20% over a range of sending-buffer sizes. Another large-scale comparison between Java and C++ analyzed a parallel multipass image rendering system in both languages [26]. Based on the same algorithm, the two versions were tested on three images using machines with a varying number of CPUs. The C++ version executed 3 to 5 times faster than the Java version. The I/O capabilities of the two versions were also examined by measuring the elapsed time for each to read the modeling data into memory. The C++ version read the data about 5 times faster than the Java version for the three images. Prechelt compared Java to C and C++ by having 38 different programmers write 40 implementations (24 written in Java, 11 in C++, and 5 in C) of a program that converts a telephone number into a word string based upon a dictionary file [17]. Similar to the previous two studies, his results showed that the median execution time of the C and C++ codes were just over 3 times faster than the Java implementations. 3.2 Application Kernels Bernardin compared Java to both C and C++ using application kernels that multiply univariate polynomials of varying degrees [1]. In the Java to C comparison, the polynomials were represented as arrays of 32-bit integers. The C version was compiled two ways: with standard compilation options, and with powerful, machine-specific optimizations. The heavily optimized C code executed 2.3 times faster than the Java code. However, against the standard C compilation, the Java version performed better, averaging 21% faster. The Java to C++ comparison represented the polynomials as arrays of pointers to generic coefficient objects. Using this design, the C++ version executed an average of 2.6 times faster than the Java version. The Linpack benchmark a standard application kernel benchmark was performed in both Java and C using a problem size of [3]. This benchmark is a matrix multiplication of linear equations used to measure floating-point numeric 7
8 performance. The results, measured in floating point operations per second, showed C running about 2.3 times faster than Java. 3.3 Microbenchmarks In Roulo's analysis, several microbenchmarks were performed comparing Java to both C and C++ [18]. He showed that across methods accepting from 1 to 11 parameters, Java s method calls are approximately one clock cycle longer than the same C++ function calls. He also showed that explicit object creation in Java is roughly equivalent to using the malloc operation in C or creating objects with the new operator in C++. This is due to the fact that in all three of these instances, the memory allocation occurs on the heap. However, such user-defined objects are not the only objects that Java and C++ must create and manage. Many common operations require the creation of implicit, temporary objects. Java uses the heap for all object creation, whereas C++ creates temporary objects on the system stack, which is almost always in the on-board Level 1 cache [18]. Therefore, temporary object creation in C++ occurs about 10 to 12 times faster than it does in Java. Furthermore, the use of JIT seems to have little impact on the Java performance penalty for object creation [18]. Mangione also used microbenchmarks to compare Java and C++ [12]. Several fundamental computational tasks, such as method calls, integer division and float division, were performed in loops that executed 10 million times. In six of the loops, the Java versions executed as fast as the C++ versions. At first glance, these results seem hard to believe, given the other timings presented so far. There is good reason for skepticism here. Such simple looping microbenchmarks can yield widely varying results between runs due to the behavior of cache memory and the size of internal write buffers [2]. Even when such factors are taken into account, conclusions drawn solely from microbenchmark results should be carefully qualified. 4 Performance Comparisons This paper presents a comparison of the support offered to Java and C++ for data collections. More specifically, it compares the performance of the CF and the STL. The performance tests are done at two levels: a microbenchmark compares equivalent 8
9 algorithm/method operations on the various containers, and a combination benchmark compares overall performance given various execution profiles. This two-tiered approach to performance testing is modeled after the methodology used in several other empirical performance comparisons [10] [19] [20]. 4.1 Microbenchmarks Comparable Library Features As described in Section 2.2, the approaches used by the STL and the CF differ in several significant ways. In order to compare operations on containers of each library, it is necessary to identify the overlap in their functionality, since this will provide the basis for the microbenchmark tests conducted. For each library, the functionality of the implemented container classes was compared. This analysis yielded six functionally comparable container classes (highlighted in Table 1). Since the CF does not contain a queue container, and because queues are nonetheless commonly used data structures, a queue class was created by extending the LinkedList class and adding enqueue and dequeue operations. For the set and map container types, the CF provides two possible container classes an "ordered" and a "hashed" version. Currently, the STL only provides an ordered set implementation. Because its functionality more closely matches that of the STL, the ordered set of the CF (TreeSet) was chosen for comparison against the STL's set container. Non-standard hashed set templates are available for C++ in libraries such as STLport [22]. It is expected that the next version of the STL will contain a hashed set implementation [13]. 9
10 Tests Performed Table 1: Microbenchmark containers and timed operations. Dynamic Array List Ordered Set Ordered Map Stack Queue Create & Fill Create & Fill Create & Fill Create & Fill Equal Create & Fill Copy Sequential Search Equal, min/max Equal, min/max Push & Pop Sequential Search Sort Increment values of each element Sort Binary Search Subset relationship Binary Search Shuffle, reverse, equal, min/max Increment values of each element Reverse, equal, min/max Increment values of each element Set Union Set Intersection & Set Difference Increment values of each element Equal Enqueue & Dequeue The initial analysis of algorithms/methods available for these six containers yielded a set of comparable algorithms/methods across both libraries that represented approximately 47% of the total. However, not all of the comparable methods were included in the final benchmark design. Some were deemed computationally insignificant. For example, the method to obtain a container's size simply returns the value of the container's privately stored size counter. Some methods were not included because they were not functionally equivalent in both libraries. For example, the CF ArrayList constructor, ArrayList(int n), creates an empty ArrayList container and pre-allocates room for n elements. Although space has been allocated, the container is empty after the constructor is called (the size() method returns 0). The syntactically comparable constructor in the STL, however, fills the container with n constructed elements in addition to allocating space (so size() returns n). Although the constructors appear to be functionally equivalent, they are not. Adding an element to the front of the CF s ArrayList after this constructor is called is much faster than in the STL version, because the STL must shift all n elements currently in the vector before adding the new element. After removing such methods from the initial list, the set of usable methods represented about 35% of the total available methods. If both a member method and a 10
11 generic algorithm were available for a particular operation, the member method was chosen for the benchmark since they are generally more efficient than generic algorithms by having access to a container's internal structure. The tested containers were filled with objects consisting of an integer and two floating point numbers. These data elements were initialized with random values and were subsequently used in operations done to each item in a container. Each test begins by creating and filling either four or five containers with 200,000 elements each and recording the execution time for this process. Additional tests that vary by container are performed and the execution time for each test is recorded. Table 1 identifies the containers and timed tests that make up the microbenchmark portion of the suite. There are two advantages to designing the microbenchmarks in the suite around common library operations. First, using such a high level of granularity helps to ensure that the suite is robust. The difficulty with many microbenchmarks comes from the fact that they typically measure performance on the order of source-code-level instructions (e.g., arithmetic operations or assignment). Therefore, results can be highly susceptible to variation due to architectural implementations such as cache performance and read buffers [2], as well as to compiler optimizations. Any of these factors may result in microbenchmark performance that does not correlate with performance in actual applications. Building microbenchmarks from high-level library operations avoids such threats to the validity of the results. Second, the microbenchmark results serve a dual purpose. In addition to being merely interpretive tools for larger scale testing, the microbenchmark results provide valuable data in their own right. Being aware of the performance ratios for specific library operations is helpful to potential users of the libraries, especially if one is considering porting code from one language to the other. Measures were taken to minimize variability among the Java microbenchmarks. The System.gc() method was called before each timed test to attempt to force garbage collection to take place outside of the timings. This minimized the possibility that garbage collection would occur in the middle of a test yielding misleading results. Since garbage collection is an inherent part of Java, one might argue that attempting to exclude it from the microbenchmark timings invalidates the comparison between the CF and the STL. This is not the case. The attempt to control garbage collection is only done in the 11
12 microbenchmark part of the suite. No such adjustments were made in the combination benchmark. Also, microbenchmarks are intended to measure the performance of specific, limited operations. Garbage collection occurs "as needed" at unpredictable times during the execution of a Java program. If a garbage collection cycle occurred during a microbenchmark test, it would likely be reclaiming space from some previous test in the microbenchmark. This would result in the garbage collection overhead being attributed to the wrong test. Thus, attempting to keep garbage collection out of the timings helps to insure the accuracy of the microbenchmark results Microbenchmark Results Figure 2 shows the microbenchmark performance ratios for the CF with HotSpot enabled and the compiled CF versus the STL (normalized to 1). The majority (22) of the CF with HotSpot to STL ratios fall in the range from 1.0 to 7.7. Three of the ratios, list binary search, set union and set intersection & difference, are extremely outside of this range due to the results from these STL microbenchmark operations (see Table 2 for a complete listing of microbenchmark ratios). The STL set union test and set intersection & difference test ran exceedingly long (nearly 40 times longer than the Java versions). The reason for this lies in the differences between how these operations are performed in the CF and the STL. The CF performs these operations and merges the results into one of the original sets. For example, performing set union on set1 and set2 results in set2 being unchanged and set1 now being the union of set1 and set2. The STL, on the other hand, performs these operations by creating a third container to receive the result of the operation. Since several of these operations are performed in the microbenchmark, many new sets are created. The memory requirements for these containers quickly exceeds the 128 Mb of physical memory on the test machine, which results in a good deal of memory swapping to the disk (noticed during the execution of these tests). Interestingly, compiling this "problematic" STL code with Borland's compiler yielded results that were 25 times faster than Microsoft's for set union and 15 times faster for set intersection & difference. 12
13 Relative Ratios (STL normalized to 1) Ratio of CF with HotSpot vs. STL Ratio of compiled CF vs. STL ARRAY: Create & Fill 2 - ARRAY: Copy 3 - ARRAY: Sequential Search 4 - ARRAY: Sort 5 - ARRAY: Binary Search 6 - ARRAY: Shuffle, Reverse, Equal & Min/Max 7 - ARRAY: Increment Each Value 8 - LIST: Create & Fill 9 - LIST: Sequential Search 10 - LIST: Sort 11 - LIST: Equal, Reverse & Min/Max 12 - LIST: Increment Each Value 13 - SET: Create & Fill 14 - SET: Equal & Min/Max 15 - SET: Increment Each Value 16 - SET: Subset Relationship 17 - SET: Union 18 - SET: Intersection & Difference 19 - MAP: Create & Fill 20 - MAP: Equal & Min/Max 21 - MAP: Increment Each Value 22 - STACK: Equal 23 - STACK: Push & Pop 24 - QUEUE: Create & Fill 25 - QUEUE: Equal 26 - QUEUE: Enqueue & Dequeue Figure 2 Graph of microbenchmark results for the CF with HotSpot enabled, the CF compiled and the STL. 13
14 Table 2: Microbenchmark performance ratios. Containers and Operations Java to Java Ratios Java to C++ Ratios Interpreted vs Hotspot Hotspot vs compiled Hotspot vs STL Compiled vs STL D Y N A M I C A R R A Y 1 Create, fill Copy Sequential Search Sort Binary Search Shuffle, reverse, equal, min/max Reset all values L I S T 8 Create, fill, copy Sequential Search Sort Shuffle, reverse, equal, min/max Reset all values S E T 13 Create, fill Equal, min/max Reset all values Subset Relationship Set Union Set Intersection & Difference M A P 19 Create, fill Equal, min/max Find, reset, remove S T A C K 22 Equal Push & pop Q U E U E 24 Create, fill Equal Enqueue & Dequeue R A T I O A V E R A G E S These averages are excluding tests 17 &
15 In order to get a composite understanding of the microbenchmark results, the performance ratios were given equal weight and averaged together. It would have been better to weigh the operations based upon their relative frequency of use, but no data was found that supported an analysis of this type. Before calculating the average ratio, it is important to exclude the three tests described above as outliers. Including them results in an average ratio that is representative of neither the outlier ratios nor the more consistently grouped ratios. The average of the remaining 24 CF with HotSpot to STL microbenchmark ratios is This ratio is consistent with the performance comparisons between Java and C++ found in the literature. Compiling the CF to native machine code improved the performance of the CF microbenchmarks by an average factor of Thus the compiled CF performed better against the STL than the CF with HotSpot. The average of the 24 compiled CF to STL microbenchmark ratios is This is slightly better than what was seen in the literature. It is interesting to note that the CF with HotSpot versus the purely interpreted CF improved the performance of the microbenchmark results by an average factor of It's no surprise that some form of JIT technology like HotSpot has become the norm for Java execution. 4.2 Combination Benchmark The combination benchmark is the second part of the suite. A tool was designed to facilitate the creation of these tests. The tool provides the ability to mix and match containers and algorithms tested in the microbenchmark part of the suite to create a single combination test profile. The resulting profile can then be tested with each library. The combination benchmark provides a more realistic simulation of containers specific algorithmic functionality than the microbenchmarks. This is because these tests are performed on a larger scale analogous to application kernels. Normal program overhead, such as Java's garbage collector, is present. For testing purposes, four combination benchmark profiles were selected that represented a range of possible profiles. At one extreme, a profile was created that 15
16 performs every available operation for each of the six containers an equal number of times. At the other extreme, a profile was created that performed none of the container operations. It simply read the data files and filled a dynamic array container with elements and then moved these elements from one container to the next until each of the six container types had been filled and emptied. The remaining two profiles represent two points within the spectrum bounded by these first two profiles. They were defined by dividing the available operations into categories borrowed from the STL specification of mutating and non-mutating [19]. Mutating operations are operations that modify the elements of the container in some way, either by changing the order of the elements or by changing the values of the elements. Conversely, non-mutating operations do not modify the elements of the container. The profile of mutating operations includes all six containers. The profile of non-mutating operations includes only four containers, because there are not any non-mutating operations available for the Stack and Queue containers. The binary search operation was left out of the non-mutating profile, because a mutating operation (sort) is required before a binary search can be performed. Across the four profiles, container sizes were held constant and each selected operation was performed an equal number times. Also, the order in which the containers were selected for a profile remained constant for each of the four profiles Combination Benchmark Results Figure 4 shows the combination benchmark performance ratios for the CF with HotSpot enabled and the compiled CF versus the STL (normalized to 1). The results generally reflect the overall results of the microbenchmarks. The average of four HotSpot combination ratios is As was the case with the microbenchmarks, this ratio is consistent with the performance comparisons between Java and C++ found in the literature. The compiled CF combination benchmark was faster than the CF with HotSpot by an average factor of The average of the compiled CF to STL combination The combination benchmark was designed to operate on one container at a time, so binary operations found in the microbenchmarks, such as equality, are not present in the combination benchmark. 16
17 Relative Run-times (STL normalized to 1) benchmark ratios is Again, compiling Java narrows the performance gap between Java and C Ratios of CF with HotSpot vs. STL Ratios of compiled CF vs. STL All Operations Mutating Operations Non-mutating Operations No Operations Figure 4: Graph of the combination benchmark performance ratios for the CF with HotSpot enabled and the compiled CF (the STL is normalized to 1) Caveats A few caveats need to be addressed at this point regarding the interpretation of the results reported here. An effort was made to make all tests as equal as possible, but there are some inherent differences in the languages that affect the flexibility and efficient use of the containers described here. For example, the decision to use objects as the type of data stored in the benchmark containers was made to ensure an "apples to apples" comparison of performance. The STL container classes can be used to hold either objects or primitive data types. The CF classes are designed only to hold objects, thus if primitive data type values need to be stored in a container the programmer would be required to perform type conversions and to use wrapper classes, incurring additional 17
18 overhead. Thus the STL template approach offers some flexibility not available in the Java approach. The C++ code used in the benchmarking was written to be as efficient as possible, not to just mimic Java s behavior. For example, in the C++ code many of the objects created were on the data stack as opposed to being created dynamically on the heap as is done in Java. While it would have been possible to force the C++ solution to mimic the Java behavior, doing so would have artificially degraded the C++ performance and would not have represented best practice in using C++. Programmers generally do not need to know any of the internal details of the STL or CF implementations to use those libraries. However, to use those libraries at maximum efficiency such knowledge may be needed in some cases. The designers of these libraries made tradeoff decisions in the process of selecting their representation techniques. Often their choices may improve the efficiency of one operation at the expense of another. Thus in both languages an awareness of best practice rules is needed to achieve optimal results. 5 Summary and Conclusions Previously reported performance comparisons showed that C++ programs tend to be faster than equivalent JIT-enabled Java programs by a factor of about three. The results presented here showed that the performance of the Collection Framework compared to the STL, based on using HotSpot, had a similar ratio. The degree of variation seen between tests in the microbenchmarks are likely to be due to differences in algorithmic implementations of the library operations and data representations. Although the results of running Java with HotSpot matched the ratios found in other comparisons, the tests revealed that compiled Java code yielded ratios relative to C++ averaging between 2.0 and 2.5. These results are promising for those who do not require code portability, but who do desire the other advantages offered by Java. Furthermore, compared to C++ compilers, the development of static Java compilers is relatively immature. Currently, only a few static compilers are available for Java. As the concept of statically compiling Java applications becomes more popular, there are likely to be significant improvements in static Java compilation technology. 18
19 This study extends the body of knowledge regarding the performance of JIT enabled Java compared to C++ by providing a methodical comparison of the performance of their respective collection classes. It also provides a data point regarding the performance of compiled Java code to C++ code. References [1] Bernardin, L., Char, B. & Kaltofen, E. (1999). Symbolic Computation in Java: An Appraisement. Proceedings of the 1999 International Symposium on Symbolic and Algebraic Computation, pp [2] Bershad, B. K., Draves, R. P., & Forin, A. (1992). Using Microbenchmarks to Evaluate System Performance. Proceedings of the Third Workshop on Workstation Operating Systems, IEEE Computer Society Press, Los Alamitos, CA, pp [3] Bull, J. M., Smith, L. A., Westhead, M. D., Henty, D. S. & Davey, R. A. (1999). A Methodology for Benchmarking Java Grande Applications. Proceedings of the ACM, 1999 Conference on Java Grande, June, pp [4] Eckel, B. (2000). Thinking in Java, 2nd ed., rev. 9. Upper Saddle River, NJ: Prentice-Hall, Inc. [5] Excelsior, LLC (2001). [6] Fitzgerald, R., Knoblock, T., Ruf, E., Steensgaard, B. & Tarditi, D. (1999). Marmot: An Optimizing Compiler for Java. Microsoft Research, Technical Report MSR-TR-99-33, June 16. [7] Gaudin, S. (1997). Microsoft tries to reel in Java jumpers. Computerworld, July 7, vol. 31, no. 27, p. 20. [8] Heydon, A. & Najork, M. (1999). Performance Limitations of the Java Core Libraries. Proceedings of the ACM, 1999 Conference on Java Grande, June, pp [9] Jain, P., Schmidt, D. C. (1997). Experiences Converting a C++ Communication Software Framework to Java. C++ Report, January, vol. 9, no. 1, pp [10] Jain, P., Widoff, S. & Schmidt, D. C. (1998). The Design and Performance of MedJava. Proceedings of the 4th USENIX Conference on Object Oriented Technologies and Systems (COOTS), April, pp [11] Klemm, R. (1999). Practical Guidelines for Boosting Java Server Performance. Proceedings of the ACM, 1999 Conference on Java Grande, June, pp [12] Mangione, C. (1998). Performance Tests Show Java as Fast as C++. JavaWorld, February, vol. 3, no. 2. Available at 19
20 [13] Meyers, S. (2001). Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library. Boston, MA: Addison-Wesley. [14] Musser, D. R. & Stepanov A. (1989). Generic Programming. Invited paper, in P. Gianni, Ed., ISSAC '88 Symbolic and Algebraic Computation Proceedings, Lecture Notes in Computer Science, Springer-Verlag, vol. 358, pp [15] Nelson, M. (1995). C++ Programmer's Guide to the Standard Template Library. Foster City, CA: IDG Books Worldwide, Inc. [16] Phipps, G. (1999). Comparing Observed Bug and Productivity Rates for Java and C++ (abstract only). Software Practice and Experience, vol. 29, no. 4, pp [17] Prechelt, L. (1999). Comparing Java vs. C/C++ Efficiency Differences to Interpersonal Differences. Communications of the ACM, October, vol. 42, no. 10. [18] Roulo, M. (1998). Accelerate your Java apps! JavaWorld, September, vol. 3, no. 9. Available at [19] Saavedra, R. H. & Smith, A. J. (1996). Analysis of Benchmark Characteristics and Benchmark Performance Prediction. ACM Transactions on Computer Systems, November, vol. 14, no. 4, pp [20] Seltzer, M., Krinsky, D., Smith, K. & Zhang, X. (1999). The Case for Application- Specific Benchmarking. Proceedings of the Seventh Workshop on Hot Topics in Operating Systems, IEEE Computer Society Press, Los Alamitos, CA, pp [21] Stepanov, A. & Lee, M. (1994). The Standard Template Library. Technical Report HPL-94-34, Hewlett-Packard Laboratories. [22] STLport. (2002). [23] Sun Microsystems. (1999). The Java HotSpot Performance Engine Architecture. Whitepaper from Sun Microsystems, Inc. Available at [24] Tyma, P. (1998). Why are we using Java again? Communications of the ACM, June, vol. 41, no. 6, pp [25] Vanhelsuwé, L. (1999). The battle of the container frameworks: which should you use? JavaWorld, January, vol. 4, no. 1. Available at [26] Yamauchi, H., Maeda, A. & Kobayashi, H. (2000). Developing a Practical Parallel Multi-pass Renderer in Java and C++. Proceedings of the ACM, 2000 Conference on Java Grande, June, pp
Java Coding Practices for Improved Application Performance
1 Java Coding Practices for Improved Application Performance Lloyd Hagemo Senior Director Application Infrastructure Management Group Candle Corporation In the beginning, Java became the language of the
Characteristics of Java (Optional) Y. Daniel Liang Supplement for Introduction to Java Programming
Characteristics of Java (Optional) Y. Daniel Liang Supplement for Introduction to Java Programming Java has become enormously popular. Java s rapid rise and wide acceptance can be traced to its design
Java Virtual Machine: the key for accurated memory prefetching
Java Virtual Machine: the key for accurated memory prefetching Yolanda Becerra Jordi Garcia Toni Cortes Nacho Navarro Computer Architecture Department Universitat Politècnica de Catalunya Barcelona, Spain
Validating Java for Safety-Critical Applications
Validating Java for Safety-Critical Applications Jean-Marie Dautelle * Raytheon Company, Marlborough, MA, 01752 With the real-time extensions, Java can now be used for safety critical systems. It is therefore
Garbage Collection in the Java HotSpot Virtual Machine
http://www.devx.com Printed from http://www.devx.com/java/article/21977/1954 Garbage Collection in the Java HotSpot Virtual Machine Gain a better understanding of how garbage collection in the Java HotSpot
Interpreters and virtual machines. Interpreters. Interpreters. Why interpreters? Tree-based interpreters. Text-based interpreters
Interpreters and virtual machines Michel Schinz 2007 03 23 Interpreters Interpreters Why interpreters? An interpreter is a program that executes another program, represented as some kind of data-structure.
Evolution of the Major Programming Languages
142 Evolution of the Major Programming Languages Object Oriented Programming: Smalltalk Object-Oriented: It s fundamental characteristics are: Data abstraction, Inheritance and Dynamic Binding. The essence
Lecture 2: Data Structures Steven Skiena. http://www.cs.sunysb.edu/ skiena
Lecture 2: Data Structures Steven Skiena Department of Computer Science State University of New York Stony Brook, NY 11794 4400 http://www.cs.sunysb.edu/ skiena String/Character I/O There are several approaches
Glossary of Object Oriented Terms
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
1. Overview of the Java Language
1. Overview of the Java Language What Is the Java Technology? Java technology is: A programming language A development environment An application environment A deployment environment It is similar in syntax
Performance Measurement of Dynamically Compiled Java Executions
Performance Measurement of Dynamically Compiled Java Executions Tia Newhall and Barton P. Miller University of Wisconsin Madison Madison, WI 53706-1685 USA +1 (608) 262-1204 {newhall,bart}@cs.wisc.edu
Chapter 1. Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705. CS-4337 Organization of Programming Languages
Chapter 1 CS-4337 Organization of Programming Languages Dr. Chris Irwin Davis Email: [email protected] Phone: (972) 883-3574 Office: ECSS 4.705 Chapter 1 Topics Reasons for Studying Concepts of Programming
CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards
CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards Course Title: TeenCoder: Java Programming Course ISBN: 978 0 9887070 2 3 Course Year: 2015 Note: Citation(s) listed may represent
Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding
Compiling Object Oriented Languages What is an Object-Oriented Programming Language? Last time Dynamic compilation Today Introduction to compiling object oriented languages What are the issues? Objects
picojava TM : A Hardware Implementation of the Java Virtual Machine
picojava TM : A Hardware Implementation of the Java Virtual Machine Marc Tremblay and Michael O Connor Sun Microelectronics Slide 1 The Java picojava Synergy Java s origins lie in improving the consumer
Hardware/Software Co-Design of a Java Virtual Machine
Hardware/Software Co-Design of a Java Virtual Machine Kenneth B. Kent University of Victoria Dept. of Computer Science Victoria, British Columbia, Canada [email protected] Micaela Serra University of Victoria
Fundamentals of Java Programming
Fundamentals of Java Programming This document is exclusive property of Cisco Systems, Inc. Permission is granted to print and copy this document for non-commercial distribution and exclusive use by instructors
Reconfigurable Architecture Requirements for Co-Designed Virtual Machines
Reconfigurable Architecture Requirements for Co-Designed Virtual Machines Kenneth B. Kent University of New Brunswick Faculty of Computer Science Fredericton, New Brunswick, Canada [email protected] Micaela Serra
JAVA COLLECTIONS FRAMEWORK
http://www.tutorialspoint.com/java/java_collections.htm JAVA COLLECTIONS FRAMEWORK Copyright tutorialspoint.com Prior to Java 2, Java provided ad hoc classes such as Dictionary, Vector, Stack, and Properties
Data Structures in the Java API
Data Structures in the Java API Vector From the java.util package. Vectors can resize themselves dynamically. Inserting elements into a Vector whose current size is less than its capacity is a relatively
General Introduction
Managed Runtime Technology: General Introduction Xiao-Feng Li ([email protected]) 2012-10-10 Agenda Virtual machines Managed runtime systems EE and MM (JIT and GC) Summary 10/10/2012 Managed Runtime
Overlapping Data Transfer With Application Execution on Clusters
Overlapping Data Transfer With Application Execution on Clusters Karen L. Reid and Michael Stumm [email protected] [email protected] Department of Computer Science Department of Electrical and Computer
11.1 inspectit. 11.1. inspectit
11.1. inspectit Figure 11.1. Overview on the inspectit components [Siegl and Bouillet 2011] 11.1 inspectit The inspectit monitoring tool (website: http://www.inspectit.eu/) has been developed by NovaTec.
CSCI E 98: Managed Environments for the Execution of Programs
CSCI E 98: Managed Environments for the Execution of Programs Draft Syllabus Instructor Phil McGachey, PhD Class Time: Mondays beginning Sept. 8, 5:30-7:30 pm Location: 1 Story Street, Room 304. Office
CHAPTER 4 ESSENTIAL DATA STRUCTRURES
CHAPTER 4 ESSENTIAL DATA STRUCTURES 72 CHAPTER 4 ESSENTIAL DATA STRUCTRURES In every algorithm, there is a need to store data. Ranging from storing a single value in a single variable, to more complex
INTRODUCTION TO JAVA PROGRAMMING LANGUAGE
INTRODUCTION TO JAVA PROGRAMMING LANGUAGE Today Java programming language is one of the most popular programming language which is used in critical applications like stock market trading system on BSE,
The C Programming Language course syllabus associate level
TECHNOLOGIES The C Programming Language course syllabus associate level Course description The course fully covers the basics of programming in the C programming language and demonstrates fundamental programming
Programming Languages & Tools
4 Programming Languages & Tools Almost any programming language one is familiar with can be used for computational work (despite the fact that some people believe strongly that their own favorite programming
Basic Programming and PC Skills: Basic Programming and PC Skills:
Texas University Interscholastic League Contest Event: Computer Science The contest challenges high school students to gain an understanding of the significance of computation as well as the details of
On Benchmarking Popular File Systems
On Benchmarking Popular File Systems Matti Vanninen James Z. Wang Department of Computer Science Clemson University, Clemson, SC 2963 Emails: {mvannin, jzwang}@cs.clemson.edu Abstract In recent years,
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General
Virtual Machine Learning: Thinking Like a Computer Architect
Virtual Machine Learning: Thinking Like a Computer Architect Michael Hind IBM T.J. Watson Research Center March 21, 2005 CGO 05 Keynote 2005 IBM Corporation What is this talk about? Virtual Machines? 2
ADVANCED SCHOOL OF SYSTEMS AND DATA STUDIES (ASSDAS) PROGRAM: CTech in Computer Science
ADVANCED SCHOOL OF SYSTEMS AND DATA STUDIES (ASSDAS) PROGRAM: CTech in Computer Science Program Schedule CTech Computer Science Credits CS101 Computer Science I 3 MATH100 Foundations of Mathematics and
Expansion of a Framework for a Data- Intensive Wide-Area Application to the Java Language
Expansion of a Framework for a Data- Intensive Wide-Area Application to the Java Sergey Koren Table of Contents 1 INTRODUCTION... 3 2 PREVIOUS RESEARCH... 3 3 ALGORITHM...4 3.1 APPROACH... 4 3.2 C++ INFRASTRUCTURE
Online Recruitment System 1. INTRODUCTION
1. INTRODUCTION This project Online Recruitment System is an online website in which jobseekers can register themselves online and apply for job and attend the exam. Online Recruitment System provides
Developing MapReduce Programs
Cloud Computing Developing MapReduce Programs Dell Zhang Birkbeck, University of London 2015/16 MapReduce Algorithm Design MapReduce: Recap Programmers must specify two functions: map (k, v) * Takes
Java in Education. Choosing appropriate tool for creating multimedia is the first step in multimedia design
Java in Education Introduction Choosing appropriate tool for creating multimedia is the first step in multimedia design and production. Various tools that are used by educators, designers and programmers
C Compiler Targeting the Java Virtual Machine
C Compiler Targeting the Java Virtual Machine Jack Pien Senior Honors Thesis (Advisor: Javed A. Aslam) Dartmouth College Computer Science Technical Report PCS-TR98-334 May 30, 1998 Abstract One of the
Control 2004, University of Bath, UK, September 2004
Control, University of Bath, UK, September ID- IMPACT OF DEPENDENCY AND LOAD BALANCING IN MULTITHREADING REAL-TIME CONTROL ALGORITHMS M A Hossain and M O Tokhi Department of Computing, The University of
Computer Programming I
Computer Programming I COP 2210 Syllabus Spring Semester 2012 Instructor: Greg Shaw Office: ECS 313 (Engineering and Computer Science Bldg) Office Hours: Tuesday: 2:50 4:50, 7:45 8:30 Thursday: 2:50 4:50,
Developing Embedded Software in Java Part 1: Technology and Architecture
Developing Embedded Software in Java Part 1: Technology and Architecture by Michael Barr Embedded Systems Conference Europe The Netherlands November 16-18, 1999 Course #300 Sun s introduction of the Java
Object Oriented Database Management System for Decision Support System.
International Refereed Journal of Engineering and Science (IRJES) ISSN (Online) 2319-183X, (Print) 2319-1821 Volume 3, Issue 6 (June 2014), PP.55-59 Object Oriented Database Management System for Decision
IMPROVING PERFORMANCE OF RANDOMIZED SIGNATURE SORT USING HASHING AND BITWISE OPERATORS
Volume 2, No. 3, March 2011 Journal of Global Research in Computer Science RESEARCH PAPER Available Online at www.jgrcs.info IMPROVING PERFORMANCE OF RANDOMIZED SIGNATURE SORT USING HASHING AND BITWISE
Resource Utilization of Middleware Components in Embedded Systems
Resource Utilization of Middleware Components in Embedded Systems 3 Introduction System memory, CPU, and network resources are critical to the operation and performance of any software system. These system
Hardware Acceleration for Just-In-Time Compilation on Heterogeneous Embedded Systems
Hardware Acceleration for Just-In-Time Compilation on Heterogeneous Embedded Systems A. Carbon, Y. Lhuillier, H.-P. Charles CEA LIST DACLE division Embedded Computing Embedded Software Laboratories France
Can You Trust Your JVM Diagnostic Tools?
Can You Trust Your JVM Diagnostic Tools? Isaac Sjoblom, Tim S. Snyder, and Elena Machkasova Computer Science Discipline University of Minnesota Morris Morris, MN 56267 [email protected], [email protected],
Replication on Virtual Machines
Replication on Virtual Machines Siggi Cherem CS 717 November 23rd, 2004 Outline 1 Introduction The Java Virtual Machine 2 Napper, Alvisi, Vin - DSN 2003 Introduction JVM as state machine Addressing non-determinism
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages. Nicki Dell Spring 2014
CSE 373: Data Structure & Algorithms Lecture 25: Programming Languages Nicki Dell Spring 2014 What is a Programming Language? A set of symbols and associated tools that translate (if necessary) collections
Practical Performance Understanding the Performance of Your Application
Neil Masson IBM Java Service Technical Lead 25 th September 2012 Practical Performance Understanding the Performance of Your Application 1 WebSphere User Group: Practical Performance Understand the Performance
02 B The Java Virtual Machine
02 B The Java Virtual Machine CS1102S: Data Structures and Algorithms Martin Henz January 22, 2010 Generated on Friday 22 nd January, 2010, 09:46 CS1102S: Data Structures and Algorithms 02 B The Java Virtual
1. The memory address of the first element of an array is called A. floor address B. foundation addressc. first address D.
1. The memory address of the first element of an array is called A. floor address B. foundation addressc. first address D. base address 2. The memory address of fifth element of an array can be calculated
Last Class: OS and Computer Architecture. Last Class: OS and Computer Architecture
Last Class: OS and Computer Architecture System bus Network card CPU, memory, I/O devices, network card, system bus Lecture 3, page 1 Last Class: OS and Computer Architecture OS Service Protection Interrupts
El Dorado Union High School District Educational Services
El Dorado Union High School District Course of Study Information Page Course Title: ACE Computer Programming II (#495) Rationale: A continuum of courses, including advanced classes in technology is needed.
Language Evaluation Criteria. Evaluation Criteria: Readability. Evaluation Criteria: Writability. ICOM 4036 Programming Languages
ICOM 4036 Programming Languages Preliminaries Dr. Amirhossein Chinaei Dept. of Electrical & Computer Engineering UPRM Spring 2010 Language Evaluation Criteria Readability: the ease with which programs
RevoScaleR Speed and Scalability
EXECUTIVE WHITE PAPER RevoScaleR Speed and Scalability By Lee Edlefsen Ph.D., Chief Scientist, Revolution Analytics Abstract RevoScaleR, the Big Data predictive analytics library included with Revolution
Monitoring Java enviroment / applications
Monitoring Java enviroment / applications Uroš Majcen [email protected] Java is Everywhere You Can Expect More. Java in Mars Rover With the help of Java Technology, and the Jet Propulsion Laboratory (JPL),
THE NAS KERNEL BENCHMARK PROGRAM
THE NAS KERNEL BENCHMARK PROGRAM David H. Bailey and John T. Barton Numerical Aerodynamic Simulations Systems Division NASA Ames Research Center June 13, 1986 SUMMARY A benchmark test program that measures
Lecture 1 Introduction to Android
These slides are by Dr. Jaerock Kwon at. The original URL is http://kettering.jrkwon.com/sites/default/files/2011-2/ce-491/lecture/alecture-01.pdf so please use that instead of pointing to this local copy
Fachbereich Informatik und Elektrotechnik SunSPOT. Ubiquitous Computing. Ubiquitous Computing, Helmut Dispert
Ubiquitous Computing Ubiquitous Computing The Sensor Network System Sun SPOT: The Sun Small Programmable Object Technology Technology-Based Wireless Sensor Networks a Java Platform for Developing Applications
16.1 MAPREDUCE. For personal use only, not for distribution. 333
For personal use only, not for distribution. 333 16.1 MAPREDUCE Initially designed by the Google labs and used internally by Google, the MAPREDUCE distributed programming model is now promoted by several
Jonathan Worthington Scarborough Linux User Group
Jonathan Worthington Scarborough Linux User Group Introduction What does a Virtual Machine do? Hides away the details of the hardware platform and operating system. Defines a common set of instructions.
1 The Java Virtual Machine
1 The Java Virtual Machine About the Spec Format This document describes the Java virtual machine and the instruction set. In this introduction, each component of the machine is briefly described. This
1/20/2016 INTRODUCTION
INTRODUCTION 1 Programming languages have common concepts that are seen in all languages This course will discuss and illustrate these common concepts: Syntax Names Types Semantics Memory Management We
Eclipse Visualization and Performance Monitoring
Eclipse Visualization and Performance Monitoring Chris Laffra IBM Ottawa Labs http://eclipsefaq.org/chris Chris Laffra Eclipse Visualization and Performance Monitoring Page 1 Roadmap Introduction Introspection
Structural Design Patterns Used in Data Structures Implementation
Structural Design Patterns Used in Data Structures Implementation Niculescu Virginia Department of Computer Science Babeş-Bolyai University, Cluj-Napoca email address: [email protected] November,
Efficiency Considerations of PERL and Python in Distributed Processing
Efficiency Considerations of PERL and Python in Distributed Processing Roger Eggen (presenter) Computer and Information Sciences University of North Florida Jacksonville, FL 32224 [email protected] 904.620.1326
Eastern Washington University Department of Computer Science. Questionnaire for Prospective Masters in Computer Science Students
Eastern Washington University Department of Computer Science Questionnaire for Prospective Masters in Computer Science Students I. Personal Information Name: Last First M.I. Mailing Address: Permanent
Language Based Virtual Machines... or why speed matters. by Lars Bak, Google Inc
Language Based Virtual Machines... or why speed matters by Lars Bak, Google Inc Agenda Motivation for virtual machines HotSpot V8 Dart What I ve learned Background 25+ years optimizing implementations
Chapter 3 Operating-System Structures
Contents 1. Introduction 2. Computer-System Structures 3. Operating-System Structures 4. Processes 5. Threads 6. CPU Scheduling 7. Process Synchronization 8. Deadlocks 9. Memory Management 10. Virtual
From Faust to Web Audio: Compiling Faust to JavaScript using Emscripten
From Faust to Web Audio: Compiling Faust to JavaScript using Emscripten Myles Borins Center For Computer Research in Music and Acoustics Stanford University Stanford, California United States, [email protected]
Java Garbage Collection Basics
Java Garbage Collection Basics Overview Purpose This tutorial covers the basics of how Garbage Collection works with the Hotspot JVM. Once you have learned how the garbage collector functions, learn how
Computing Concepts with Java Essentials
2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Computing Concepts with Java Essentials 3rd Edition Cay Horstmann
Curriculum Map. Discipline: Computer Science Course: C++
Curriculum Map Discipline: Computer Science Course: C++ August/September: How can computer programs make problem solving easier and more efficient? In what order does a computer execute the lines of code
Binary search tree with SIMD bandwidth optimization using SSE
Binary search tree with SIMD bandwidth optimization using SSE Bowen Zhang, Xinwei Li 1.ABSTRACT In-memory tree structured index search is a fundamental database operation. Modern processors provide tremendous
Java Software Structures
INTERNATIONAL EDITION Java Software Structures Designing and Using Data Structures FOURTH EDITION John Lewis Joseph Chase This page is intentionally left blank. Java Software Structures,International Edition
PERFORMANCE ENHANCEMENTS IN TreeAge Pro 2014 R1.0
PERFORMANCE ENHANCEMENTS IN TreeAge Pro 2014 R1.0 15 th January 2014 Al Chrosny Director, Software Engineering TreeAge Software, Inc. [email protected] Andrew Munzer Director, Training and Customer
Habanero Extreme Scale Software Research Project
Habanero Extreme Scale Software Research Project Comp215: Java Method Dispatch Zoran Budimlić (Rice University) Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead
Java Programming Fundamentals
Lecture 1 Part I Java Programming Fundamentals Topics in Quantitative Finance: Numerical Solutions of Partial Differential Equations Instructor: Iraj Kani Introduction to Java We start by making a few
Mobile Application Languages XML, Java, J2ME and JavaCard Lesson 04 Java
Mobile Application Languages XML, Java, J2ME and JavaCard Lesson 04 Java Oxford University Press 2007. All rights reserved. 1 C and C++ C and C++ with in-line-assembly, Visual Basic, and Visual C++ the
AP Computer Science A - Syllabus Overview of AP Computer Science A Computer Facilities
AP Computer Science A - Syllabus Overview of AP Computer Science A Computer Facilities The classroom is set up like a traditional classroom on the left side of the room. This is where I will conduct my
DATA STRUCTURES USING C
DATA STRUCTURES USING C QUESTION BANK UNIT I 1. Define data. 2. Define Entity. 3. Define information. 4. Define Array. 5. Define data structure. 6. Give any two applications of data structures. 7. Give
PC Based Escape Analysis in the Java Virtual Machine
PC Based Escape Analysis in the Java Virtual Machine Manfred Jendrosch, Gerhard W. Dueck, Charlie Gracie, and AndréHinkenjann Abstract Current computer architectures are multi-threaded and make use of
CHAPTER 1 INTRODUCTION
1 CHAPTER 1 INTRODUCTION 1.1 MOTIVATION OF RESEARCH Multicore processors have two or more execution cores (processors) implemented on a single chip having their own set of execution and architectural recourses.
What is a programming language?
Overview Introduction Motivation Why study programming languages? Some key concepts What is a programming language? Artificial language" Computers" Programs" Syntax" Semantics" What is a programming language?...there
Cloud Computing. Up until now
Cloud Computing Lecture 11 Virtualization 2011-2012 Up until now Introduction. Definition of Cloud Computing Grid Computing Content Distribution Networks Map Reduce Cycle-Sharing 1 Process Virtual Machines
Instruction Set Architecture (ISA)
Instruction Set Architecture (ISA) * Instruction set architecture of a machine fills the semantic gap between the user and the machine. * ISA serves as the starting point for the design of a new machine
Amadeus SAS Specialists Prove Fusion iomemory a Superior Analysis Accelerator
WHITE PAPER Amadeus SAS Specialists Prove Fusion iomemory a Superior Analysis Accelerator 951 SanDisk Drive, Milpitas, CA 95035 www.sandisk.com SAS 9 Preferred Implementation Partner tests a single Fusion
A generic framework for game development
A generic framework for game development Michael Haller FH Hagenberg (MTD) AUSTRIA [email protected] Werner Hartmann FAW, University of Linz AUSTRIA [email protected] Jürgen Zauner FH
Information management software solutions White paper. Powerful data warehousing performance with IBM Red Brick Warehouse
Information management software solutions White paper Powerful data warehousing performance with IBM Red Brick Warehouse April 2004 Page 1 Contents 1 Data warehousing for the masses 2 Single step load
System Structures. Services Interface Structure
System Structures Services Interface Structure Operating system services (1) Operating system services (2) Functions that are helpful to the user User interface Command line interpreter Batch interface
Java (12 Weeks) Introduction to Java Programming Language
Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short
The Classical Architecture. Storage 1 / 36
1 / 36 The Problem Application Data? Filesystem Logical Drive Physical Drive 2 / 36 Requirements There are different classes of requirements: Data Independence application is shielded from physical storage
Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition
Java 6 'th edition Concepts INTERNATIONAL STUDENT VERSION CONTENTS PREFACE vii SPECIAL FEATURES xxviii chapter i INTRODUCTION 1 1.1 What Is Programming? 2 J.2 The Anatomy of a Computer 3 1.3 Translating
Write Barrier Removal by Static Analysis
Write Barrier Removal by Static Analysis Karen Zee and Martin Rinard Laboratory for Computer Science Massachusetts Institute of Technology Cambridge, MA 02139 {kkz, [email protected] ABSTRACT We present
New Hash Function Construction for Textual and Geometric Data Retrieval
Latest Trends on Computers, Vol., pp.483-489, ISBN 978-96-474-3-4, ISSN 79-45, CSCC conference, Corfu, Greece, New Hash Function Construction for Textual and Geometric Data Retrieval Václav Skala, Jan
