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:
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
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.