Knowledge

Criticism of Java

Source 📝

652:, and the lack of these types prevents direct data interchange between C and Java. Unsigned large numbers are also used in a number of numeric processing fields, including cryptography, which can make Java more inconvenient to use for these tasks. Although it is possible to get around this problem using conversion code and larger data types, it makes using Java cumbersome for handling unsigned data. While a 32-bit signed integer may be used to hold a 16-bit unsigned value losslessly, and a 64-bit signed integer a 32-bit unsigned integer, there is no larger type to hold a 64-bit unsigned integer. In all cases, the memory consumed may double, and typically any logic relying on 2493: 832:'s Center Software Technology Support published an article in the "Journal of Defense Software Engineering" discussing the unsuitability of Java as the first language taught. Disadvantages were that students "had no feeling for the relationship between the source program and what the hardware would actually do" and the impossibility "to develop a sense of the run-time cost of what is written because it is extremely hard to know what any method call will eventually execute". In 2005 2871: 2883: 1006: 778:, where an object can be represented as a sequence of bytes that includes its data fields, together with type information about itself and its fields. After an object is serialized, it can later be deserialized; that is, the type information and bytes that represent its data can be used to recreate the object in memory. This raises very serious theoretical and actual security risks. 952:. Pistoia observed that when a security-sensitive resource is accessed, the code responsible for acquiring the resource may no longer be on the stack. For example, a method executed in the past may have modified the value of an object field that determines which resource to use. That method call may no longer be on the stack when it is inspected. 35:. Software written in Java, especially its early versions, has been criticized for its performance compared to software written in other programming languages. Developers have also remarked that differences in various Java implementations must be taken into account when writing complex Java programs that must work with all of them. 1938:
exceptions and use status returns, but you can also try really hard to avoid pointers. Does that mean you should? So Joel's got the concepts he likes (pointers and recursion), and laments their decline, but doesn't seem to notice that there are newer concepts that he's never caught on to, which the Java kiddies feel at home with.
1934:
Why does Joel pick out pointers and recursion as the two gatekeeper concepts? Because he found them difficult? As Tim Bray points out, Java is perfectly adept at recursion, and concurrency may be a more important and difficult concept to master in any case. The emphasis on recursion in Lisp languages
1901:
It's bad enough that JavaSchools fail to weed out the kids who are never going to be great programmers, which the schools could justifiably say is not their problem. Industry, or, at least, the recruiters-who-use-grep, are surely clamoring for Java to be taught. But JavaSchools also fail to train the
979:
Before Java 7, the installers would not remove older Java installations. It was common on a Windows system to see multiple installations of Java on the same computer. Multiple installations were permitted and could be used by programs that rely on specific versions, including malicious programs. This
921:
In 2010, there was a significant rise in malicious software targeting security flaws in the sandboxing mechanisms used by Java implementations, including Oracle's. These flaws allow untrusted code to bypass the sandbox restrictions, exposing the user to attacks. Flaws were fixed by security updates,
879:
can either be interpreted at run time by a virtual machine, or be compiled at load time or run time into native code which runs directly on the computer's hardware. Interpretation is slower than native execution, but compilation at load time or run time has an initial performance penalty. Modern JVM
737:
Supporting large arrays would also require changes to the JVM. This limitation manifests itself in areas such as collections being limited to 2 billion elements and the inability to memory map continuous file segments larger than 2 GB. Java also lacks (outside of its 2D arrays) multidimensional
1937:
While we're hunting around for tough concepts that separate the men from the boys, what about the one that got Joel and I into a tussle two years ago: Exceptions. He doesn't like them, basically, because they confuse him. Is this any different than a Java guy not liking pointers? Yes, you can avoid
1935:
is a bit over the top, and doesn't carry into other programming cultures. Why do people think it's so important for software engineering? Don't get me wrong: I love recursion when it's the right tool for the job, but that is just not that often to warrant Joel's focus on it as a fundamental concept.
932:
has been criticized for not promptly providing updates for known security bugs. When Oracle finally released a patch for widely-exploited flaws in Java 7, it removed Java 6 from users' machines, despite it being widely used by enterprise applications that Oracle had stated were not impacted by the
891:: "The biggest problem is that Java is really slow. On a pure cpu / memory / display / communications level, most modern cell phones should be considerably better gaming platforms than a Game Boy Advance. With Java, on most phones you are left with about the CPU power of an original 4.77 mhz (sic) 1868:
The Pitfalls of Java as a First Programming Language Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of
959:. These include the permission to change the current security manager (and replace it with one that could potentially bypass the stack inspection), the permission to instantiate and use a custom class loader (which could choose to associate 232:
Additionally, in 2016, the following example was found revealing Java to be unsound and in turn making JVMs which threw ClassCastExceptions or any other kind of runtime error technically non-conforming. This was corrected in Java 10.
925:
Critics have suggested that users do not update their Java installations because they don't know they have them, or how to update them. Many organisations restrict software installation by users, but are slow to deploy updates.
944:. When a security-sensitive resource is accessed, the security manager triggers code that walks the call stack, to verify that the codebase of each method on it has authority to access the resource. This is done to prevent 913:
in a "sandboxed" manner to protect against malicious or poorly written software. This "sandboxing" feature is intended to protect the user by restricting access to platform features and APIs which could be exploited by
676:
improves readability, so its absence can make Java code less readable, especially for classes representing mathematical objects, such as complex numbers and matrices. Java has only one non-numerical use of an operator:
616:
argues that this causes an unnecessary restriction on language expressiveness because a class can have multiple functions that operate on it, but a function is bound to a class and can never operate on multiple types.
1083:
So far, the "write-once, run-everywhere" promise of Java hasn't come true. The bulk of a Java application will migrate between most Java implementations, but taking advantage of a VM-specific feature causes porting
611:
By design, Java encourages programmers to think of a solution in terms of nouns (classes) interacting with each other, and to think of verbs (methods) as operations that can be performed on or by that noun.
746:
Arrays and primitives are somewhat special and need to be treated differently from classes. This has been criticized because it requires many variants of functions when creating general-purpose libraries.
840:. Others, like Ned Batchelder, disagree with Spolsky for criticizing the parts of the language that he found difficult to understand, claiming that Spolsky's commentary was more of a 'subjective rant'. 656:
overflow must be rewritten. If abstracted, function calls become necessary for many operations which are native to some other languages. Alternatively, it is possible to use Java's signed integers to
697:
in C, bundles of data that are manipulated directly instead of indirectly via references. Value types can sometimes be faster and smaller than classes with references. For example, Java's
685:
for string concatenation. However, this is implemented by the compiler, which generates code to create StringBuilder instances. It is impossible to create user-defined operator overloads.
1517: 27:
have been criticized for design choices including the implementation of generics, forced object-oriented programming, the handling of unsigned numbers, the implementation of
858:
was implemented in Java 1.3, there were many criticisms of its performance. Java has been demonstrated to run at a speed comparable with optimized native code, and modern
762:
in particular, does not provide the guarantees and enforcements required for secure and reliable parallel programming. While a programmer can establish design and coding
948:, which take place every time a legitimate, more privileged program is tricked by another into misusing its authority. The confused-deputy problem is a specific type of 2101: 738:
arrays (contiguously allocated single blocks of memory accessed by a single indirection), which limits performance for scientific and technical computing.
2182:
Pistoia, Marco; Banerjee, Anindya; Naumann, David A. (May 2007). "Beyond Stack Inspection: A Unified Access-Control and Information-Flow Security Model".
2042: 1922: 2426: 1368:
Moreira, J.E.; S. P. Midkiff; M. Gupta; P. V. Artigas; M. Snir; R. D. Lawrence (2000). "Java programming for high-performance numerical computing".
1302: 1065: 2393: 2300: 1914: 1843: 717:. Further, if Java supported generic primitive types, keys and values could be stored in the array directly, removing both levels of indirection. 937: 632:(one verb, a family of nouns with certain properties), the programmer can decide whether to solve a specific problem in terms of nouns or verbs. 1123: 2911: 733:
Arrays must be indexed by int values... An attempt to access an array component with a long index value results in a compile-time error.
725:
Java has been criticized for not supporting arrays of 2 (about 2.1 billion) or more elements. This is a limitation of the language; the
2021: 705:
objects, which in turn contain references to key and value objects. Looking something up requires inefficient double dereferencing. If
664:. Some support for unsigned integer types was provided in JDK 8, but not for unsigned bytes and with no support in the Java language. 55: 49: 1525: 1029: 1950: 963:
to a malicious class upon loading it), and the permission to create a custom permission (which could declare itself as powerful as
2419: 2274: 880:
implementations all use the compilation approach, so after the initial startup time the performance is similar to native code.
99:
the actual type of a template parameter E is unavailable at run time. Thus, the following operations are not possible in Java:
58:
where a method must declare the checked exceptions it throws in the method signature. This can result in unnecessarily verbose
2257: 2232: 2199: 2071: 1732: 1490: 863: 2906: 2875: 1329: 1670: 1851: 1396:
True rectangular multidimensional arrays are the most important data structures for scientific and engineering computing.
829: 766:, the compiler can make no attempt to enforce them, so the programmer may unwittingly write insecure or unreliable code. 714: 1097: 2412: 1984: 866:
as one of the fastest language platforms available – typically no more than three times slower than C and C++.
92:
and re-use of these existing classes. This limited the features that could be provided, compared to other languages.
2105: 820:, resulting in a proliferation of third-party implementations which must be imported and handled by the programmer. 606: 2460: 709:
were a value type, the array could store key-value pairs directly, eliminating the first indirection, increasing
694: 1918: 2753: 2477: 2050: 1773: 1024: 1219: 994:
JIT compilation fundamentally uses executable data, and thus poses security challenges and possible exploits.
85: 2823: 2733: 2718: 989: 2748: 2454: 1409: 1044: 1019: 2887: 2703: 2583: 1571: 1306: 1261:"Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)" 1069: 1011: 20: 1855: 1796:"Java theory and practice: Where's your point? Tricks and traps with floating point and decimal numbers" 980:
issue was addressed in Java 7: with the user's permission, the installer removes earlier installations.
2799: 2743: 2685: 1885: 1596: 1430: 1149: 855: 759: 32: 28: 2399: 2127: 1621: 1548: 1473: 2435: 1382: 1039: 649: 80:
were added to Java 5.0, there was already a large framework of classes (many of which were already
24: 2351: 2325: 2770: 2155: 1457: 945: 624:
languages support functions as a top-level construct. When combined with other features such as
2809: 2675: 2532: 2507: 2387: 1468: 1377: 1127: 909:
The Java platform provides a security architecture which is designed to allow the user to run
2695: 2624: 1647: 1233: 710: 2018: 1795: 2670: 2563: 2522: 2512: 2449: 949: 775: 673: 625: 621: 8: 1954: 873:
relative to native compilers has been shown to be quite similar in some optimized tests.
653: 629: 77: 2087: 1980: 1260: 808:
types defined by IEEE 754 (and supported by many processors) are not supported by Java.
2814: 2804: 2614: 2604: 2227:. ITSO networking series (2. ed.). Upper Saddle River, New Jersey: Prentice Hall. 2205: 1817: 1698: 1496: 929: 805: 661: 2253: 2228: 2195: 1728: 1486: 1186: 755: 1710: 1500: 1281: 1165:"Java and scala's type systems are unsound: the existential crisis of null pointers" 918:, such as accessing the local filesystem or network, or running arbitrary commands. 2854: 2819: 2680: 2639: 2383: 2209: 2187: 1478: 1387: 1176: 1034: 849: 645: 71: 59: 31:, and a history of security vulnerabilities in the primary Java VM implementation, 1749: 2844: 2553: 2038: 2025: 1902:
brains of kids to be adept, agile, and flexible enough to do good software design
1869:
pointers at all, which made the use of C in systems programming very challenging.
1465:
2009 33rd Annual IEEE International Computer Software and Applications Conference
2379: 1340: 1282:"Unsigned Integer Arithmetic API now in JDK 8 (Joseph D. Darcy's Oracle Weblog)" 2649: 2619: 2599: 2573: 1889: 1713:
Security issues and problems with serialization of random objects. by dzone.com
910: 836:
criticized Java as an overfocused part of universities' curricula in his essay
787: 971:
method). These issues are documented in Pistoia's two books on Java Security.
2900: 2839: 2644: 2609: 2568: 1190: 904: 876: 2849: 2492: 1687: 1482: 1181: 1101: 869:
Performance has improved substantially since early versions. Performance of
660:
unsigned integers of the same size, but this requires detailed knowledge of
2404: 2160: 2132: 1881: 1844:"Computer Science Education: Where Are the Software Engineers of Tomorrow?" 884: 870: 833: 96: 2394:
Computer Science Education: Where Are the Software Engineers of Tomorrow?
1164: 62:. No major language has followed Java in implementing checked exceptions. 2548: 1367: 798:), some mandated standard features are not supported even when using the 758:
argued in 1999 that Java's implementation of parallelism in general, and
613: 81: 1505:...it is not possible in Java to have arrays with more than 2 entries... 1391: 983: 2738: 2466: 2191: 1546: 1234:"Java libraries should provide support for unsigned integer arithmetic" 1204: 888: 2708: 2472: 16:
Criticism of the Java programming language and Java software platform
2882: 1005: 940:
exposed another important flaw of the Java security model, based on
823: 672:
Java has been criticized for not supporting user-defined operators.
2301:"Oracle urges removal of older Java versions due to security risks" 2156:"'Silent but deadly' Java security update breaks legacy apps - dev" 1330:"Java Grande Forum Report: Making Java Work for High-End Computing" 800: 791: 657: 2778: 2713: 2654: 2634: 2629: 2578: 2517: 2482: 1998: 1841: 915: 648:
types. Unsigned data is often generated from programs written in
2783: 2728: 2558: 2527: 2326:"Why should I uninstall older versions of Java from my system?" 2088:"Researchers Highlight Recent Uptick in Java Security Exploits" 1047:, a programming language designed to address criticisms of Java 892: 633: 804:
modifier, such as Exception Flags and Directed Roundings. The
2723: 817: 2250:
Enterprise Java security: building secure J2EE applications
1456:
Arndt, Holger; Bundschus, Markus; Naegele, Andreas (2009).
922:
but were still exploited on machines without the updates.
50:
Exception handling (programming) § Checked exceptions
859: 1645: 1327: 741: 2181: 1842:
Robert B.K. Dewar; Edmond Schonberg (1 January 2008).
1699:
Serialization and Deserialization in Java with Example
1750:"How Java's Floating-Point Hurts Everyone Everywhere" 1455: 984:
JIT related security challenges and possible exploits
955:
Some permissions are implicitly equivalent to Java's
2184:
2007 IEEE Symposium on Security and Privacy (SP '07)
1951:"Computer Language Benchmarks Game: Java vs Gnu C++" 1747: 1626:
Java™ Platform, Standard Edition 7 API Specification
1601:
Java™ Platform, Standard Edition 7 API Specification
1001: 2128:"Oracle knew about critical Java flaws since April" 1978: 1650:. Java Report, November, 1998 (Volume 3, Number 11) 1547:James Gosling; Bill Joy; Guy Steele; Gilad Bracha. 1458:"Towards a Next-Generation Matrix Library for Java" 1953:. benchmarksgame.alioth.debian.org. Archived from 1854:Software Technology Support Center. Archived from 1518:"Why does Java's Collection.size() return an int?" 824:Abstracted relationship between code and hardware 636:introduced some functional programming features. 2898: 1818:"What's Wrong in Java 8, Part V: Tuples - DZone" 38: 2275:"Old Java versions breed new security exploits" 2037: 1974: 1972: 1913: 1886:"Joel on Software - The Perils of JavaSchools" 2420: 1668: 796:Standard for Binary Floating-Point Arithmetic 2434: 1969: 1880: 781: 701:is implemented as an array of references to 607:Object-oriented programming § Criticism 1748:Kahan, W.; Joseph D. Darcy (1 March 1998). 2427: 2413: 2082: 2080: 1407: 1363: 1361: 1321: 1163:Amin, Nada; Tate, Ross (19 October 2016). 2028:, Willie Walker, Paul Lamere, Philip Kwok 1983:. Graphics and Immersive Technology Lab, 1810: 1472: 1381: 1328:Java Grande Forum Panel (November 1998). 1180: 1030:Comparison of the Java and .NET platforms 974: 693:Java lacks compound value types, such as 639: 2252:. Boston, Mass. Munich: Addison-Wesley. 2049:. armadilloaerospace.com. Archived from 1162: 990:Just-in-time compilation § Security 2247: 2222: 2077: 1358: 1100:. Object Computing, Inc. Archived from 688: 667: 95:Because generics are implemented using 2899: 2272: 2072:Java SE Platform Security Architecture 1569: 1124:"What's Wrong With Java: Type Erasure" 1068:. electronicdesign.com. Archived from 895:, and lousy control over everything." 84:), so generics were implemented using 2408: 2298: 2273:Grimes, Roger A. (15 November 2011). 1919:"Joel Spolsky is a crotchety old man" 1722: 43: 1999:"The Java Faster than C++ Benchmark" 1727:. Addison-Wesley. pp. 339–345. 1648:"Primitive Types Considered Harmful" 1258: 1063: 742:Integration of primitives and arrays 600: 2912:Criticisms of programming languages 1572:"Proposal: Large arrays (take two)" 1238:Bug Database, Sun Developer Network 1220:"Execution in the Kingdom of Nouns" 830:United States Department of Defense 13: 2019:FreeTTS - A Performance Case Study 14: 2923: 2380:Free But Shackled - The Java Trap 2373: 1985:University of Southern California 1549:"The Java Language Specification" 1259:Owen, Sean R. (5 November 2009). 1217: 1126:. 6 December 2006. Archived from 811: 2881: 2870: 2869: 2491: 1981:"Performance of Java versus C++" 1979:J.P.Lewis & Ulrich Neumann. 1646:Sherman R. Alpert (IBM) (1998). 1551:(Third ed.). Addison Wesley 1408:Hutchinson, Ben (14 June 2008). 1004: 936:In 2007, a research team led by 887:concluded in 2005 about Java on 769: 2888:Computer programming portal 2400:What are Bad features of Java? 2344: 2318: 2292: 2266: 2241: 2216: 2175: 2148: 2120: 2094: 2074:. Oracle. Retrieved 2013-04-23. 2065: 2031: 2012: 1991: 1943: 1907: 1874: 1835: 1788: 1766: 1741: 1716: 1704: 1692: 1662: 1639: 1614: 1589: 1570:Lowden, James (24 March 2009). 1563: 1540: 1510: 1449: 1431:"java.util.HashMap Source Code" 1423: 1401: 1295: 1274: 816:Java does not natively support 790:arithmetic is largely based on 720: 628:(one verb, multiple nouns) and 2593:Major third-party technologies 2352:"Java 6 Auto-Update to Java 7" 1774:"Types, Values, and Variables" 1576:Java.net coin-dev mailing list 1305:. 7 April 2016. Archived from 1252: 1226: 1211: 1197: 1156: 1142: 1116: 1090: 1066:"Write Once, Debug Everywhere" 1057: 843: 774:Java provides a mechanism for 750: 1: 2824:Sun Microsystems Laboratories 1671:"Java's Insecure Parallelism" 1064:Wong, William (27 May 2002). 883:Game designer and programmer 729:, Section 10.4, states that: 39:Language syntax and semantics 2248:Pistoia, Marco, ed. (2004). 2223:Pistoia, Marco, ed. (1999). 2102:"Have you checked the Java?" 1669:Brinch Hansen (April 1999). 713:and reducing memory use and 7: 2907:Java (programming language) 1410:"The JVM needs Value Types" 1012:Computer programming portal 997: 898: 727:Java Language Specification 65: 10: 2928: 2800:Apache Software Foundation 2299:Krill, Paul (4 May 2012). 2186:. IEEE. pp. 149–163. 1303:"C++ Operator Overloading" 1020:Comparison of Java and C++ 987: 902: 847: 604: 69: 47: 2867: 2832: 2792: 2769: 2762: 2694: 2686:Free Java implementations 2663: 2592: 2541: 2500: 2489: 2442: 1025:Comparison of Java and C# 838:The Perils of JavaSchools 782:Floating point arithmetic 29:floating-point arithmetic 21:Java programming language 2436:Java (software platform) 1701:by geeksforgeeks website 1205:"Java SE Specifications" 1051: 1040:Write once, run anywhere 235: 101: 2396:(dated January 8, 2008) 2225:Java 2 network security 2043:"Cell phone adventures" 1483:10.1109/compsac.2009.67 1182:10.1145/3022671.2984004 975:Parallel installations 946:confused deputy attacks 90:migration compatibility 2810:Java Community Process 2676:Java Community Process 2390:(dated April 12, 2004) 2388:free software movement 1723:Bloch, Joshua (2018). 1711:Serialization Must Die 1597:"java.util.Collection" 854:Before 2000, when the 735: 640:Unsigned integer types 25:Java software platform 2542:Platform technologies 2024:25 March 2009 at the 1798:. IBM. 1 January 2003 1622:"java.nio.ByteBuffer" 988:Further information: 903:Further information: 864:regularly benchmarked 848:Further information: 731: 711:locality of reference 70:Further information: 48:Further information: 2671:Java version history 2523:Java virtual machine 2513:Java Development Kit 2108:on 21 September 2012 1884:(29 December 2005). 1467:. pp. 460–467. 950:privilege escalation 862:implementations are 776:object serialization 689:Compound value types 674:Operator overloading 668:Operator overloading 626:function overloading 2501:Oracle technologies 2358:. 10 September 2023 2332:. 10 September 2023 2053:on 24 November 2015 2047:John Carmack's Blog 1392:10.1147/sj.391.0021 1370:IBM Systems Journal 1169:ACM SIGPLAN Notices 2815:Oracle Corporation 2805:Eclipse Foundation 2192:10.1109/sp.2007.10 1957:on 13 January 2015 1917:(1 January 2006). 1848:CrossTalk Jan 2008 1776:. Sun Microsystems 1309:on 5 February 2020 1098:"Generics in Java" 911:untrusted bytecode 806:extended precision 715:heap fragmentation 662:bitwise operations 644:Java lacks native 56:checked exceptions 44:Checked exceptions 2894: 2893: 2863: 2862: 2259:978-0-321-11889-9 2234:978-0-13-015592-4 2201:978-0-7695-2848-9 2041:(27 March 2005). 1923:nedbatchelder.com 1734:978-0-13-468599-1 1492:978-0-7695-3726-9 1104:on 2 January 2007 756:Per Brinch Hansen 630:generic functions 601:Noun-orientedness 2919: 2886: 2885: 2873: 2872: 2855:Patrick Naughton 2820:Sun Microsystems 2767: 2766: 2681:Sun Microsystems 2574:Web Start (JNLP) 2495: 2429: 2422: 2415: 2406: 2405: 2384:Richard Stallman 2368: 2367: 2365: 2363: 2348: 2342: 2341: 2339: 2337: 2322: 2316: 2315: 2313: 2311: 2296: 2290: 2289: 2287: 2285: 2270: 2264: 2263: 2245: 2239: 2238: 2220: 2214: 2213: 2179: 2173: 2172: 2170: 2168: 2152: 2146: 2145: 2143: 2141: 2136:. 30 August 2012 2124: 2118: 2117: 2115: 2113: 2104:. Archived from 2098: 2092: 2091: 2084: 2075: 2069: 2063: 2062: 2060: 2058: 2035: 2029: 2016: 2010: 2009: 2007: 2005: 1995: 1989: 1988: 1976: 1967: 1966: 1964: 1962: 1947: 1941: 1940: 1931: 1929: 1911: 1905: 1904: 1898: 1896: 1878: 1872: 1871: 1865: 1863: 1858:on 12 April 2009 1839: 1833: 1832: 1830: 1828: 1814: 1808: 1807: 1805: 1803: 1792: 1786: 1785: 1783: 1781: 1770: 1764: 1763: 1761: 1759: 1754: 1745: 1739: 1738: 1720: 1714: 1708: 1702: 1696: 1690: 1685: 1683: 1681: 1675: 1666: 1660: 1659: 1657: 1655: 1643: 1637: 1636: 1634: 1632: 1618: 1612: 1611: 1609: 1607: 1593: 1587: 1586: 1584: 1582: 1567: 1561: 1560: 1558: 1556: 1544: 1538: 1537: 1535: 1533: 1528:on 26 March 2013 1524:. Archived from 1514: 1508: 1507: 1476: 1462: 1453: 1447: 1446: 1444: 1442: 1427: 1421: 1420: 1418: 1416: 1405: 1399: 1398: 1385: 1365: 1356: 1355: 1353: 1351: 1345: 1339:. Archived from 1334: 1325: 1319: 1318: 1316: 1314: 1299: 1293: 1292: 1290: 1288: 1278: 1272: 1271: 1269: 1267: 1256: 1250: 1249: 1247: 1245: 1230: 1224: 1223: 1215: 1209: 1208: 1201: 1195: 1194: 1184: 1160: 1154: 1153: 1146: 1140: 1139: 1137: 1135: 1120: 1114: 1113: 1111: 1109: 1094: 1088: 1087: 1079: 1077: 1072:on 21 March 2009 1061: 1035:Java performance 1014: 1009: 1008: 970: 966: 962: 958: 942:stack inspection 850:Java performance 803: 786:Although Java's 708: 704: 700: 684: 680: 654:two's complement 646:unsigned integer 596: 593: 590: 587: 584: 581: 578: 575: 572: 569: 566: 563: 560: 557: 554: 551: 548: 545: 542: 539: 536: 533: 530: 527: 524: 521: 518: 515: 512: 509: 506: 503: 500: 497: 494: 491: 488: 485: 482: 479: 476: 473: 470: 467: 464: 461: 458: 455: 452: 449: 446: 443: 440: 437: 434: 431: 428: 425: 422: 419: 416: 413: 410: 407: 404: 401: 398: 395: 392: 389: 386: 383: 380: 377: 374: 371: 368: 365: 362: 359: 356: 353: 350: 347: 344: 341: 338: 335: 332: 329: 326: 323: 320: 317: 314: 311: 308: 305: 302: 299: 296: 293: 290: 287: 284: 281: 278: 275: 272: 269: 266: 263: 260: 257: 254: 251: 248: 245: 242: 239: 228: 225: 222: 221://Compiler error 219: 216: 213: 210: 207: 204: 201: 200://Compiler error 198: 195: 192: 189: 186: 183: 180: 177: 174: 173://Compiler error 171: 168: 165: 162: 159: 156: 153: 150: 147: 144: 141: 138: 135: 132: 129: 126: 123: 120: 117: 114: 111: 108: 105: 72:Generics in Java 60:boilerplate code 54:Java introduced 2927: 2926: 2922: 2921: 2920: 2918: 2917: 2916: 2897: 2896: 2895: 2890: 2880: 2859: 2845:Arthur van Hoff 2828: 2788: 2758: 2690: 2659: 2588: 2537: 2496: 2487: 2438: 2433: 2376: 2371: 2361: 2359: 2350: 2349: 2345: 2335: 2333: 2324: 2323: 2319: 2309: 2307: 2297: 2293: 2283: 2281: 2271: 2267: 2260: 2246: 2242: 2235: 2221: 2217: 2202: 2180: 2176: 2166: 2164: 2154: 2153: 2149: 2139: 2137: 2126: 2125: 2121: 2111: 2109: 2100: 2099: 2095: 2086: 2085: 2078: 2070: 2066: 2056: 2054: 2039:John D. Carmack 2036: 2032: 2026:Wayback Machine 2017: 2013: 2003: 2001: 1997: 1996: 1992: 1977: 1970: 1960: 1958: 1949: 1948: 1944: 1936: 1927: 1925: 1912: 1908: 1894: 1892: 1879: 1875: 1861: 1859: 1840: 1836: 1826: 1824: 1816: 1815: 1811: 1801: 1799: 1794: 1793: 1789: 1779: 1777: 1772: 1771: 1767: 1757: 1755: 1752: 1746: 1742: 1735: 1721: 1717: 1709: 1705: 1697: 1693: 1679: 1677: 1673: 1667: 1663: 1653: 1651: 1644: 1640: 1630: 1628: 1620: 1619: 1615: 1605: 1603: 1595: 1594: 1590: 1580: 1578: 1568: 1564: 1554: 1552: 1545: 1541: 1531: 1529: 1516: 1515: 1511: 1493: 1474:10.1.1.471.7567 1460: 1454: 1450: 1440: 1438: 1429: 1428: 1424: 1414: 1412: 1406: 1402: 1366: 1359: 1349: 1347: 1343: 1332: 1326: 1322: 1312: 1310: 1301: 1300: 1296: 1286: 1284: 1280: 1279: 1275: 1265: 1263: 1257: 1253: 1243: 1241: 1232: 1231: 1227: 1216: 1212: 1203: 1202: 1198: 1175:(10): 838–848. 1161: 1157: 1148: 1147: 1143: 1133: 1131: 1130:on 22 July 2012 1122: 1121: 1117: 1107: 1105: 1096: 1095: 1091: 1075: 1073: 1062: 1058: 1054: 1010: 1003: 1000: 992: 986: 977: 968: 964: 960: 956: 907: 901: 852: 846: 826: 814: 799: 784: 772: 753: 744: 723: 706: 702: 698: 691: 682: 678: 670: 642: 609: 603: 598: 597: 594: 591: 588: 585: 582: 579: 576: 573: 570: 567: 564: 561: 558: 555: 552: 549: 546: 543: 540: 537: 534: 531: 528: 525: 522: 519: 516: 513: 510: 507: 504: 501: 498: 495: 492: 489: 486: 483: 480: 477: 474: 471: 468: 465: 462: 459: 456: 453: 450: 447: 444: 441: 438: 435: 432: 429: 426: 423: 420: 417: 414: 411: 408: 405: 402: 399: 396: 393: 390: 387: 384: 381: 378: 375: 372: 369: 366: 363: 360: 357: 354: 351: 348: 345: 342: 339: 336: 333: 330: 327: 324: 321: 318: 315: 312: 309: 306: 303: 300: 297: 294: 291: 288: 285: 282: 279: 276: 273: 270: 267: 264: 261: 258: 255: 252: 249: 246: 243: 240: 237: 230: 229: 226: 223: 220: 217: 214: 211: 208: 205: 202: 199: 196: 193: 190: 187: 184: 181: 178: 175: 172: 169: 166: 163: 160: 157: 154: 151: 148: 145: 142: 139: 136: 133: 130: 127: 124: 121: 118: 115: 112: 109: 106: 103: 74: 68: 52: 46: 41: 17: 12: 11: 5: 2925: 2915: 2914: 2909: 2892: 2891: 2868: 2865: 2864: 2861: 2860: 2858: 2857: 2852: 2847: 2842: 2836: 2834: 2830: 2829: 2827: 2826: 2817: 2812: 2807: 2802: 2796: 2794: 2790: 2789: 2787: 2786: 2781: 2775: 2773: 2764: 2760: 2759: 2757: 2756: 2751: 2746: 2741: 2736: 2731: 2726: 2721: 2716: 2711: 2706: 2700: 2698: 2692: 2691: 2689: 2688: 2683: 2678: 2673: 2667: 2665: 2661: 2660: 2658: 2657: 2652: 2647: 2642: 2637: 2632: 2627: 2622: 2617: 2612: 2607: 2602: 2596: 2594: 2590: 2589: 2587: 2586: 2581: 2576: 2571: 2566: 2561: 2556: 2551: 2545: 2543: 2539: 2538: 2536: 2535: 2530: 2525: 2520: 2515: 2510: 2504: 2502: 2498: 2497: 2490: 2488: 2486: 2485: 2480: 2475: 2470: 2464: 2458: 2452: 2446: 2444: 2440: 2439: 2432: 2431: 2424: 2417: 2409: 2403: 2402: 2397: 2391: 2382:, an essay by 2375: 2374:External links 2372: 2370: 2369: 2343: 2317: 2291: 2265: 2258: 2240: 2233: 2215: 2200: 2174: 2147: 2119: 2093: 2076: 2064: 2030: 2011: 1990: 1968: 1942: 1915:Ned Batchelder 1906: 1890:joelonsoftware 1873: 1834: 1809: 1787: 1765: 1740: 1733: 1725:Effective Java 1715: 1703: 1691: 1661: 1638: 1613: 1588: 1562: 1539: 1522:Stack Overflow 1509: 1491: 1448: 1422: 1400: 1383:10.1.1.13.1554 1357: 1346:on 18 May 2013 1320: 1294: 1273: 1251: 1225: 1218:Yegge, Steve. 1210: 1196: 1155: 1150:"Type Erasure" 1141: 1115: 1089: 1055: 1053: 1050: 1049: 1048: 1042: 1037: 1032: 1027: 1022: 1016: 1015: 999: 996: 985: 982: 976: 973: 900: 897: 845: 842: 825: 822: 813: 812:Lack of tuples 810: 788:floating point 783: 780: 771: 768: 752: 749: 743: 740: 722: 719: 690: 687: 669: 666: 641: 638: 634:Java version 8 622:multi-paradigm 602: 599: 236: 102: 67: 64: 45: 42: 40: 37: 15: 9: 6: 4: 3: 2: 2924: 2913: 2910: 2908: 2905: 2904: 2902: 2889: 2884: 2878: 2877: 2866: 2856: 2853: 2851: 2848: 2846: 2843: 2841: 2840:James Gosling 2838: 2837: 2835: 2831: 2825: 2821: 2818: 2816: 2813: 2811: 2808: 2806: 2803: 2801: 2798: 2797: 2795: 2793:Organizations 2791: 2785: 2782: 2780: 2777: 2776: 2774: 2772: 2768: 2765: 2761: 2755: 2752: 2750: 2747: 2745: 2742: 2740: 2737: 2735: 2732: 2730: 2727: 2725: 2722: 2720: 2717: 2715: 2712: 2710: 2707: 2705: 2702: 2701: 2699: 2697: 2696:JVM languages 2693: 2687: 2684: 2682: 2679: 2677: 2674: 2672: 2669: 2668: 2666: 2662: 2656: 2653: 2651: 2648: 2646: 2643: 2641: 2638: 2636: 2633: 2631: 2628: 2626: 2623: 2621: 2618: 2616: 2613: 2611: 2610:GNU Classpath 2608: 2606: 2603: 2601: 2598: 2597: 2595: 2591: 2585: 2582: 2580: 2577: 2575: 2572: 2570: 2567: 2565: 2562: 2560: 2557: 2555: 2552: 2550: 2547: 2546: 2544: 2540: 2534: 2531: 2529: 2526: 2524: 2521: 2519: 2516: 2514: 2511: 2509: 2506: 2505: 2503: 2499: 2494: 2484: 2481: 2479: 2476: 2474: 2471: 2468: 2465: 2462: 2459: 2456: 2453: 2451: 2448: 2447: 2445: 2441: 2437: 2430: 2425: 2423: 2418: 2416: 2411: 2410: 2407: 2401: 2398: 2395: 2392: 2389: 2385: 2381: 2378: 2377: 2357: 2353: 2347: 2331: 2327: 2321: 2306: 2302: 2295: 2280: 2276: 2269: 2261: 2255: 2251: 2244: 2236: 2230: 2226: 2219: 2211: 2207: 2203: 2197: 2193: 2189: 2185: 2178: 2163: 2162: 2157: 2151: 2135: 2134: 2129: 2123: 2107: 2103: 2097: 2089: 2083: 2081: 2073: 2068: 2052: 2048: 2044: 2040: 2034: 2027: 2023: 2020: 2015: 2000: 1994: 1986: 1982: 1975: 1973: 1956: 1952: 1946: 1939: 1924: 1920: 1916: 1910: 1903: 1891: 1887: 1883: 1877: 1870: 1857: 1853: 1849: 1845: 1838: 1823: 1819: 1813: 1797: 1791: 1775: 1769: 1751: 1744: 1736: 1730: 1726: 1719: 1712: 1707: 1700: 1695: 1689: 1688:alternate url 1672: 1665: 1649: 1642: 1627: 1623: 1617: 1602: 1598: 1592: 1577: 1573: 1566: 1550: 1543: 1527: 1523: 1519: 1513: 1506: 1502: 1498: 1494: 1488: 1484: 1480: 1475: 1470: 1466: 1459: 1452: 1436: 1432: 1426: 1411: 1404: 1397: 1393: 1389: 1384: 1379: 1375: 1371: 1364: 1362: 1342: 1338: 1331: 1324: 1308: 1304: 1298: 1283: 1277: 1262: 1255: 1239: 1235: 1229: 1221: 1214: 1206: 1200: 1192: 1188: 1183: 1178: 1174: 1170: 1166: 1159: 1151: 1145: 1129: 1125: 1119: 1103: 1099: 1093: 1086: 1085: 1071: 1067: 1060: 1056: 1046: 1043: 1041: 1038: 1036: 1033: 1031: 1028: 1026: 1023: 1021: 1018: 1017: 1013: 1007: 1002: 995: 991: 981: 972: 965:AllPermission 961:AllPermission 957:AllPermission 953: 951: 947: 943: 939: 938:Marco Pistoia 934: 931: 927: 923: 919: 917: 912: 906: 905:Java security 896: 894: 890: 886: 881: 878: 877:Java bytecode 874: 872: 871:JIT compilers 867: 865: 861: 857: 851: 841: 839: 835: 831: 821: 819: 809: 807: 802: 797: 793: 789: 779: 777: 770:Serialization 767: 765: 761: 757: 748: 739: 734: 730: 728: 718: 716: 712: 703:HashMap.Entry 696: 686: 675: 665: 663: 659: 655: 651: 647: 637: 635: 631: 627: 623: 618: 615: 608: 234: 100: 98: 93: 91: 88:to allow for 87: 83: 79: 73: 63: 61: 57: 51: 36: 34: 30: 26: 22: 2874: 2469:(Enterprise) 2362:10 September 2360:. Retrieved 2355: 2346: 2336:10 September 2334:. Retrieved 2329: 2320: 2310:10 September 2308:. Retrieved 2304: 2294: 2284:10 September 2282:. Retrieved 2278: 2268: 2249: 2243: 2224: 2218: 2183: 2177: 2165:. Retrieved 2161:The Register 2159: 2150: 2138:. Retrieved 2133:The Register 2131: 2122: 2110:. Retrieved 2106:the original 2096: 2067: 2055:. Retrieved 2051:the original 2046: 2033: 2014: 2002:. Retrieved 1993: 1959:. Retrieved 1955:the original 1945: 1933: 1926:. Retrieved 1909: 1900: 1893:. Retrieved 1882:Joel Spolsky 1876: 1867: 1860:. Retrieved 1856:the original 1847: 1837: 1825:. Retrieved 1821: 1812: 1800:. Retrieved 1790: 1778:. Retrieved 1768: 1756:. Retrieved 1743: 1724: 1718: 1706: 1694: 1678:. Retrieved 1664: 1652:. Retrieved 1641: 1629:. Retrieved 1625: 1616: 1604:. Retrieved 1600: 1591: 1579:. Retrieved 1575: 1565: 1553:. Retrieved 1542: 1530:. Retrieved 1526:the original 1521: 1512: 1504: 1464: 1451: 1439:. Retrieved 1434: 1425: 1413:. Retrieved 1403: 1395: 1376:(1): 21–56. 1373: 1369: 1348:. Retrieved 1341:the original 1336: 1323: 1311:. Retrieved 1307:the original 1297: 1285:. Retrieved 1276: 1264:. Retrieved 1254: 1242:. Retrieved 1237: 1228: 1213: 1199: 1172: 1168: 1158: 1144: 1132:. Retrieved 1128:the original 1118: 1106:. Retrieved 1102:the original 1092: 1082: 1081: 1074:. Retrieved 1070:the original 1059: 993: 978: 954: 941: 935: 928: 924: 920: 908: 885:John Carmack 882: 875: 868: 853: 837: 834:Joel Spolsky 828:In 2008 the 827: 815: 795: 785: 773: 763: 754: 745: 736: 732: 726: 724: 721:Large arrays 692: 671: 643: 619: 610: 499:getConstrain 364:getConstrain 231: 97:type erasure 94: 89: 86:type erasure 75: 53: 18: 2771:Conferences 2478:Android SDK 2112:25 November 2057:10 November 1961:19 November 1895:18 November 1802:19 November 1654:18 November 1606:10 February 1581:10 February 1532:10 February 1437:. zGrepCode 1350:10 February 889:cell-phones 844:Performance 764:conventions 751:Parallelism 620:Many other 614:Steve Yegge 2901:Categories 2850:Urs Hölzle 2739:Processing 2467:Jakarta EE 2463:(Standard) 1928:2 February 1780:9 December 1758:9 December 1680:13 October 1631:6 February 1555:6 February 1415:3 February 1313:5 February 1244:18 January 1134:9 December 1108:9 December 856:HotSpot VM 605:See also: 161:instanceof 82:deprecated 2763:Community 2709:BeanShell 2625:Hibernate 2600:Blackdown 2533:Maxine VM 2473:Java Card 2443:Platforms 2305:InfoWorld 2279:InfoWorld 2140:30 August 1822:dzone.com 1676:. SIGPLAN 1469:CiteSeerX 1378:CiteSeerX 1266:9 October 1191:0362-1340 1084:problems. 511:constrain 484:Constrain 469:constrain 409:constrain 397:Constrain 358:constrain 304:constrain 289:Constrain 265:Constrain 2876:Category 2554:Servlets 2022:Archived 1862:15 March 1852:U.S. DOD 1827:18 March 1501:14672978 1441:6 August 1240:. Oracle 1076:3 August 998:See also 967:via its 899:Security 801:strictfp 792:IEEE 754 760:monitors 559:Nullless 322:Nullless 241:Nullless 134:myMethod 78:generics 66:Generics 2879:  2779:JavaOne 2754:Oxygene 2714:Clojure 2664:History 2655:WildFly 2650:TopLink 2635:Jazelle 2630:IcedTea 2620:Harmony 2605:Eclipse 2584:Modules 2579:Pack200 2559:MIDlets 2549:Applets 2518:OpenJDK 2483:GraalVM 2461:Java SE 2457:(Micro) 2455:Java ME 2386:of the 2210:4112294 969:implies 933:flaws. 916:malware 699:HashMap 695:structs 658:emulate 565:Integer 379:extends 274:extends 110:MyClass 33:HotSpot 2833:People 2784:Devoxx 2734:Kotlin 2729:Jython 2719:Groovy 2645:Struts 2640:Spring 2528:JavaFX 2508:Squawk 2356:Oracle 2256:  2231:  2208:  2198:  2167:15 May 2004:15 May 1731:  1499:  1489:  1471:  1380:  1287:15 May 1189:  930:Oracle 893:IBM PC 818:tuples 571:String 547:String 535:String 523:static 520:public 508:return 463:upcast 460:return 442:coerce 427:return 391:upcast 346:coerce 206:iArray 140:Object 128:static 125:public 104:public 2749:Scala 2744:Rhino 2724:JRuby 2206:S2CID 1753:(PDF) 1674:(PDF) 1497:S2CID 1461:(PDF) 1435:JDK 8 1344:(PDF) 1333:(PDF) 1052:Notes 1045:Scala 707:Entry 490:super 487:<? 310:final 295:super 292:<? 286:final 262:class 238:class 185:item2 107:class 76:When 2704:Java 2364:2023 2338:2023 2330:Java 2312:2023 2286:2023 2254:ISBN 2229:ISBN 2196:ISBN 2169:2016 2142:2012 2114:2010 2059:2015 2006:2016 1963:2011 1930:2016 1897:2015 1864:2015 1829:2023 1804:2011 1782:2006 1760:2006 1729:ISBN 1682:2012 1656:2015 1633:2012 1608:2012 1583:2012 1557:2012 1534:2012 1487:ISBN 1443:2018 1417:2012 1352:2012 1337:SC98 1315:2020 1289:2016 1268:2010 1246:2011 1187:ISSN 1136:2006 1110:2006 1078:2008 681:and 574:> 562:< 550:zero 538:args 529:main 526:void 496:> 406:> 400:< 385:> 373:< 301:> 280:> 268:< 256:> 244:< 158:item 143:item 131:void 119:> 113:< 23:and 19:The 2615:GWT 2569:JSF 2564:JSP 2450:JVM 2188:doi 1479:doi 1388:doi 1177:doi 860:JVM 556:new 367:(); 212:new 197:(); 191:new 176:... 2903:: 2822:, 2354:. 2328:. 2303:. 2277:. 2204:. 2194:. 2158:. 2130:. 2079:^ 2045:. 1971:^ 1932:. 1921:. 1899:. 1888:. 1866:. 1850:. 1846:. 1820:. 1686:; 1624:. 1599:. 1574:. 1520:. 1503:. 1495:. 1485:. 1477:. 1463:. 1433:. 1394:. 1386:. 1374:39 1372:. 1360:^ 1335:. 1236:. 1185:. 1173:51 1171:. 1167:. 1080:. 683:+= 583:). 502:() 478:); 355:); 283:{} 152:if 2428:e 2421:t 2414:v 2366:. 2340:. 2314:. 2288:. 2262:. 2237:. 2212:. 2190:: 2171:. 2144:. 2116:. 2090:. 2061:. 2008:. 1987:. 1965:. 1831:. 1806:. 1784:. 1762:. 1737:. 1684:. 1658:. 1635:. 1610:. 1585:. 1559:. 1536:. 1481:: 1445:. 1419:. 1390:: 1354:. 1317:. 1291:. 1270:. 1248:. 1222:. 1207:. 1193:. 1179:: 1152:. 1138:. 1112:. 794:( 679:+ 650:C 595:} 592:} 589:; 586:u 580:0 577:( 568:, 553:= 544:{ 541:) 532:( 517:} 514:; 505:{ 493:T 481:} 475:t 472:, 466:( 457:{ 454:) 451:t 448:T 445:( 439:U 436:} 433:; 430:b 424:{ 421:) 418:b 415:B 412:, 403:B 394:( 388:U 382:U 376:B 370:} 361:= 352:t 349:( 343:= 340:u 337:{ 334:) 331:t 328:T 325:( 319:; 316:u 313:U 307:; 298:T 277:U 271:B 259:{ 253:U 250:, 247:T 227:} 224:} 218:; 215:E 209:= 203:E 194:E 188:= 182:E 179:} 170:{ 167:) 164:E 155:( 149:{ 146:) 137:( 122:{ 116:E

Index

Java programming language
Java software platform
floating-point arithmetic
HotSpot
Exception handling (programming) § Checked exceptions
checked exceptions
boilerplate code
Generics in Java
generics
deprecated
type erasure
type erasure
Object-oriented programming § Criticism
Steve Yegge
multi-paradigm
function overloading
generic functions
Java version 8
unsigned integer
C
two's complement
emulate
bitwise operations
Operator overloading
structs
locality of reference
heap fragmentation
Per Brinch Hansen
monitors
object serialization

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.