This is the
talk page for discussing improvements to the
Criticism of Java article. This is not a forum for general discussion of the article's subject. |
Article policies
|
Find sources: Google ( books · news · scholar · free images · WP refs) · FENS · JSTOR · TWL |
![]() | This article is rated C-class on Wikipedia's
content assessment scale. It is of interest to the following WikiProjects: | ||||||||||||||||||||
|
This also belongs in the Criticism of Java article, but it should be noted that the lawsuit Sun brought against Microsoft hurt the consumer. Since the Microsoft VM no longer ships with Windows XP (or can be downloaded), any page that contains a Java applet will be frozen for up to 3min on slow systems while the JRE loads, This has not changed with , and is a significant detriment. There are some advantages to having a VM built into the OS's structure. LaVieEntiere 16:52, 30 April 2007 (UTC)
The whole content of this article is taken from the Java criticism article, which had become very long and confusing for readers (I thought). Hervegirod 09:54, 11 June 2006 (UTC)
I'm not confident enough in my understanding of Java or Wikipedia protocol to just change this myself, but can someone please explain the following two criticims, taken from near the bottom of the article in its current format:
I assume that whoever wrote these is refering to the contents of the java.sql library (it would be helpful if this was explicitly stated). However, these aren't classes with standard implementations in the API; they're interfaces. Presumably there is no standard implementation, and the Java language can hardly be blamed if somebody happens to have written their own faulty implementations. That said, I'm also at a loss as to how any implementation of an interface specifying a method with a return type of int, can feature null as a return value for that method and still get past the compiler. As I'm more or less clueless myself, I'm not brave enough to delete the criciticms outright and potentially incur the wrath of whoever wrote them; perhaps someone can explain what I'm missing. Magicalsushi 13:52, 4 July 2006 (UTC)
Database connections and statements are not automatically closed when they fall out of scope as would be expected by a scope definition of any object oriented language => Again, this is perfectly normal. One should only look at what is done on a File stream. A Database is a resource, as is a File stream, and not only an object. It make sense to need to close explicitely a resource, this has nothing to do with the "Object oriented" notion (same in C#, for example) Hervegirod 19:43, 4 July 2006 (UTC)
Perhaps something should be said about some of the language design decisions and Sun's marketing of the language. IIRC it had within Sun been agreed upon that pointers were a common source of issues, therefore Java should not have pointers, and instead has "references". However, references has the very same syntax as pointers (initialised by new
and can be null
) and are even called pointers under the hood (f.i. "NullPointerException"). Another marketing strategy was to claim that not including multiple inheritance was because that facility was a common source of subtle errors, a claim (a
FUD strategy, according to some) that though has never been substantiated in any tests still became a taken-for-granted truism.
Mikademus 21:52, 25 July 2006 (UTC)
int *a; int b; a = &b; b = 1; *a = 5; printf("%i\n", b);
new
what the reference points to, and the allocated object is automatically deleted when no longer referenced. It is called reference counting when writing smart pointer classes in other languages too. The only real differences between Java's references and C/C++'s pointers is that pointer arithmatics is not allowed in Java and once initialised you can't reassign references in C++ (which allows you to use the assignment operator transparently on references).Integer a = new Integer(); Integer b = new Integer(); a = b; // under the hood a points the b's memory location b.set_to( 1 ); a.set_to( 5 );
Mikademus 09:47, 26 July 2006 (UTC)
Integer
syntax, you're right, the syntax is my_integer.parseInt("5");
. Anyway, since the wikiarticles define references and pointers as virtually the same things but under different restrictions then the above discussion is moot, or perhaps tautological. However, doesn't this simply goes to emphasise the handwaving involved in the marketing of Java? Sun's contention that Java conains no pointers but instead the safer references, while arguably strictly true, is manipulative since pointers and references are the same thing ("Pointers are the most primitive and error-prone but also one of the most powerful and efficient types of references, storing only the address of an object in memory" according to the
Reference (computer science) article) and seems to try to be purposely confusing. Again, I'm not criticizing the language here, especially since I'm using it myself, but I am testing the ground with you to see how a few, er... pointers about Sun's marketing would fit in the article.
Mikademus 11:29, 31 July 2006 (UTC)
“ | The most widely circulated comparisons tend to be those written by proponents of some language, Z, to prove that Z is better that other languages. Given its wide use, C++ is often top of the list of languages that the proponents of Z wants to prove inferior. Often, such papers are "published" or distributed by a company that sells Z as part of a marketing campaign. Surprisingly, many seem to take an unreviewed paper written by people working for a company selling Z "proving" that Z is best seriously. One problem is that there are always grains of truth in such comparisons. After all, no language is better than every other in all possible ways. C++ certainly isn't perfect, but selective truth can be most seductive and occasionally completely misleading.
When looking at a language comparison consider who wrote it, consider carefully if the descriptions are factual and fair, and also if the comparison criteria are themselves fair for all languages considered. This is not easy. |
” |
The garbage collection strategies used created significant application stability issues. These were noted in CMS and G1 algorithms. -- Jscorrales ( talk) 17:44, 14 April 2023 (UTC)
I realise that it might be difficult to find good, neutral sources about justified criticism of Java. I found this one, linking to a page unfortunately called "Java Sucks", but written by a self-proclamed proponent of Java and listing several items of interest. I wish it had been baptized otherwise because it's flammable by its name, but it might serve nontheless. Mikademus 09:40, 8 August 2006 (UTC)
The JSP one really has nothing to do with Java, which is why I removed it. I think it needs to be written better if it stays in (I'm assuming there isn't a Criticism of J2EE or anything). As for the iterator one, I don't see how an iterator not allowing itself to be reset is really that irregular. That being said, it's not exactly true, because ListIterator allows for back/forth movement, effectively enabling a reset. The whole section is kindof a mess to me, but FWIW, that's why I removed those two. If someonen can expand on them both, maybe we can reword them to make more sense. -- Davetron5000 21:45, 16 August 2006 (UTC)
The bullet regarding constructors is that a subclass inherits all methods of the superclass but none of the constructors, save for the no-arg constructor (which is only inherited and called if no constructor is specified I believe). Take Hashtable for example: You subclass it, and you must reimplement all of it's constructors to call the super-classes constructor. That is the point of that item in the article and that has nothing to do with the requirement that calls to the super-class constructor or another constructor in the same class must be the first line of the constructor. -- Davetron5000 14:17, 31 August 2006 (UTC)
The article currently contains the following statement, with 'citation needed' appended:
“ | When generics were added, requirements on backwards compatibility limited the features that could be provided by this addition, as compared to other languages | ” |
I think this article on my own site may be useful as a citation, but I won't add it myself (as per WP:EL#Links normally to be avoided #3, 'If your page is relevant and informative, mention it on the talk page and let unbiased Wikipedia editors decide whether to add the link.'). -- Safalra 13:42, 28 October 2006 (UTC)
I wonder if it would help to give a bit more background on JIT compilation. The first time I came across JIT was in the Borland world where they used it in Delphi (and I'm sure it was around before then, but it was with the power of the 486(!!) that it became feasible concept for general programming). The assumption was that PCs had time to spare and due to I/O, graphics drawing and whatever, there were enough spare CPU cycles that there was time to compile the code as well as executing it.
The fundamental problem with Java and JIT is not in the single user world in general, most PCs have plenty of spare CPU and such extravagance can be tolerated, but in failing to recognise that in a multi-user/multi-tasking world, those CPU cycles were not spare, they were someone else's, hence JIT is less suitable for servers.
I propose to delete this part, as Java has now become GPL, this seems not to be a problem anymore. As I understand, the problem was that opensource alternatives were lagging behind Sun's. Hervegirod 15:26, 19 November 2006 (UTC)
I didn't read the section, but this is still a problem - on phones. 155.198.65.29 ( talk) 11:22, 7 April 2009 (UTC)
I agree that the JVM's memory management strategies is a point that may be criticized. However, the article criticizes the plain fact that Java has a garbage collector, on the grounds that it may lead programmers to mess up when they move to C++. This is a bit far-fetched, as automatic garbage collection is common in a lot of languages. I personally think this part should be removed. -- 129.240.106.170 23:37, 23 October 2006 (UTC)
The first part of this section details an example of legal Java code that if written in the same way in C++ would result in a memory leak. Since Java handles it correctly how is this a criticism of Java? Surely it is a C++ problem? Criticising a language for not being valid in another language sounds absurd to me, unless I'm misunderstanding the article. Canderra 03:31, 13 December 2006 (UTC)
Automatic garbage collection certainly isn't an inherent bug, or something specific to Java, but Java is often used for teaching purposes, and it is valid to say that Java and all other managed languages are incomplete as a teaching language, so long as memory management is liable to be an important skill for a programmer. This is one of many common complaints against Java as a teaching language that circulate in academia, and it's a factually valid one. Simply put, if we assert that a well trained programmer should have the basic thought process skill and "muscle memory" to be able to write C/C++/Pascal/assembler in a pinch, without any huge learning curve, then a managed-only skill set will fall short. 70.69.42.228 20:35, 13 January 2007 (UTC)
To say that Java should be criticized because it fails to teach things like memory management and other concepts in other languages is unfounded because, like those above have said, you can say the same thing about languages such as C and C++. Also, the market isn't huge for C/C++ programming, especially in industry. The only major fields they have use in is in embedded systems and operating system development due to their ability to perform operations that would be considered low level (i.e. assigning/creating ISR, making inline assembly and directives, accessing and manipulating specific memory locations, etc.). A large portion of the industry deals with web based applications and client applications which would benefit from GC. This is why languages like C#/VB/Java are used to create these applications because they don't require the need to perform low level operations, such as manual memory management. And considering that one of the key points of academia is to prepare you for industry, why not use what a large portion of the industry is using, i.e. languages that support automatic GC. --Jake 198.102.153.2 ( talk) 17:48, 18 August 2011 (UTC)
What is this?
" This means that a Java EE server cannot limit the amount of memory that a deployed application can allocate, nor it can limit how many time a servlet can use to answer a user request."
First, the reference used to support this is not a reference to anything about Java at all, it's a reference to another language and says nothing about Java.
Secondly , the whole section does not read like an encyclopedia entry. THe English is simply broken and ungrammatical here- "nor it can limit how many time a servlet can use to answer a user request", a sentence fragment that actually makes no sense.
Third, the statement is simply false; J2EE server and the application it hosts can indeed monitor and limit the amount of memory used and it can also limit servlets in any way it sees fit.
Sorry, this is not true, not grammatical and not referenced. I am taking it out. — Preceding unsigned comment added by 71.194.197.246 ( talk) 12:55, 25 August 2012 (UTC)
I have deleted the paragraph
It must be noted, however, that it is a common case for other Virtual machine languages, as for example the .NET Framework Common Language Runtime (see Platform Invocation Services).
because 1) it is incorrect: .NET P/Invoke does not require you to maintain two codebases the way JNI does, it also provides much safer (through annotations) memory and resource management, and 2) it is irrelevant. 212.242.89.162 ( talk) 10:29, 27 May 2008 (UTC)
Sun Java is not currently open source or free software, as defined by the open source initiative and free software foundation. Referring to Java's proprietary nature in a past tense is deceptive because it's still proprietary, so I'm removing the "before xx java was proprietary" layout, but if/when the GPL release occurs, maybe it should be restored. I removed a few sentences that are factually inaccurate as well. For instance, Java is not more available or open source or free software friendly than .NET as Mono is more compatible with .NET than GNU classpath is with Java, and Mono is now in wider production use than GNU classpath. —The preceding unsigned comment was added by 70.69.42.228 ( talk) 18:30, 4 January 2007 (UTC).
Now that Java is release under GPL, should this be removed in its entirety? Les ( talk) 12:23, 9 October 2008 (UTC)
As I haven't seen any kind of edit wars nor I couldn't find anuthing in wiki rules (except IAR) I deleted the section. I hope I didn;t do anything wrong. Uzytkownik ( talk) —Preceding undated comment was added at 23:14, 20 October 2008 (UTC).
There are still issues if you need to use Java for emedded use. See Google's decision to write a VM for their Anroid platform in order to avoid some of the problems. 66.11.179.30 ( talk) 23:51, 27 October 2008 (UTC)
The statement "Running a Java program requires all supporting libraries to be on the classpath." is not entirely accurate, it is possible to have a Java application manually manage the class loading of its libraries, in some areas it is quite common for applications to function in this way, utilities that use provider pattern APIs such as generic JDBC tools often manage the loading of the vendor specific JDBC driver themselves to prevent classpath problems for users. Applications which allow users to add plugins of one sort or another using the application UI will almost always work in this way, the netbeans IDE is a good example of this.
As I understand it, the mechanism by which an application's classpath (whether on the command line used to start the virtual machine and application, or as part of the system classpath) is specific to the java VM implementation, most implementations copy Sun's command syntax almost exactly (with slight variations appropriate for their platform).
It is definately true to say that the commands used to start a localy installed application from a system console or gui environment are platform specific (and often site/machine specific) and usually a barrier to the write once run anywhere paradigm.
Java applications that are executed as Applets embeded in HTML pages or applications started using the JNLP (webstart) framework avoid the pitfalls of CLASSPATH and are both examples of the write once run anywhere paradigm in action, I am sure there are other examples of WORA working properly, EJB applications possibly? Comments please.--FifthColumnist 04:55, 12 January 2007 (UTC)
A java application executable (a jar with a Main-Class entry in its manifest), can also specify a Class-path entry. This entry can define each of the applications supporting libraries, or .jars, separated by a space, and uses forward slashes across platforms, including Windows, to delimit directories. By defining a classpath this way (rather than manipulating the system class path, it is easily possible to create a cross platform application, negating the problems in the main article. Main article should be updated with this information. Please see here: http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download —The preceding unsigned comment was added by 217.205.198.24 ( talk) 11:14, 26 April 2007 (UTC).
There are some instances in this article that use informal or inappropriate language. An example is even in the lead paragraph: "However, Java is not without flaws, and it does not universally accommodate all programming styles, environments, or requirements." —The preceding unsigned comment was added by 128.12.108.147 ( talk) 21:30, 10 May 2007 (UTC).
There is a subject-verb agreement issue in Performance section: "Sun Microsystems have taken considerable trouble to address these problems, and regularly produce white papers on this topic" should read: "Sun Microsystems has taken considerable trouble to address these problems, and regularly produce white papers on this topic." —Preceding unsigned comment added by 67.186.12.163 ( talk) 02:17, 31 May 2009 (UTC)
I'm moving this text from the article here:
It is impossible to make any generalization about the performance of Java programs, because runtime performance is affected much more by the quality of the compiler or JVM than by any intrinsic properties of the language itself.
This text or anything of the kind does not appear in the main article, Java performance. It does not have citations and is either false or at least misleading. The choice of language features does affect the amenability of a language to present-day compilation techniques (let's forget the mythical Sufficiently Smart Compiler), and Java can be effectively compiled. This is not true of e.g. Python, Ruby or Perl at present, whose very dynamic nature makes things difficult for compilers. Nobody uses compilers/JVMs today which make Java as slow as Perl, so quality of the compiler is not in practice as important as properties of the language, and one can make the generalization that in practice Java is faster than Perl (unless your code spends all its time in libraries implemented in other languages, which is how Perl is usually used, but I digress). What matters is the performance of JVMs people actually have to deal with today (because customers use them) or the best JVM one can choose (when you can choose), and these do not vary so wildly as to make generalizations about them wholly impossible. -- Coffee2theorems 14:56, 30 August 2007 (UTC)
The following sentence: However, as demonstrated in C# it is possible to allow for value types/primitive types to exhibit OO characteristics such as encapsulation, instance methods and interface implementation without compromising performance at all seems really dubious to me. I was not able to find any reference backing this. So if nobody finds a ref about that in say 2-3 days, I propose to remove it. Hervegirod ( talk) 20:07, 30 July 2008 (UTC)
I have a general problem with the content of this article. A lot of sections are not sourced, or sources are not critics at all. Not that I want to remove all unsourced sentences, but it seems to me that for now, a lot of critics are mainly WP:POV. As it is, the article seems to me more a collection of editors personal thoughts than anything else:
Hervegirod ( talk) 09:37, 30 August 2008 (UTC)
It isn't much of a criticism when there is no comparison to alternatives ··gracefool ☺ 10:58, 2 April 2009 (UTC)
Does no-one have a problem with the badly designed library? Comparing String to C++'s std::string or QString shows just how hard it is to work with. Then there's the whole lack of a decent vector class (oh for std::vector<int>!) There are other stupidities too, like the fact that Thread objects can only run once, there's no readLine() equivalent, you can't seek in files, etc. This is all J2ME I'm talking about but I doubt it is much better in J2SE. 155.198.65.29 ( talk) 11:29, 7 April 2009 (UTC)
The section about java not providing primitive types in generics should be merged into the section about generics themselves, as it is a result of type erasure. —Preceding unsigned comment added by 129.132.45.64 ( talk) 11:50, 10 August 2009 (UTC)
A new Security section has been added recently. However, the only sources are just FAQs which do not criticize the java security model and a personal blog which quotes an IBM paper. This paper concludes by these words "So is Java still secure? The short answer is yes". This section should be removed. After some days I will do it myself it I have no further valid sources about this. Hervegirod ( talk) 20:49, 3 September 2009 (UTC)
Hang on with this. Java does have some negative security issues. I will be writing more papers that will expand on these. Basically the security risks come from using a Java enabled internet browser. I know of some problems, and there are papers scattered around the internet that back up some of these issues. The article section just needs expansion and cross references made to the various articles. Here are some:
http://www.cs.princeton.edu/sip/faq/java-faq.php3 http://www.cigital.com/javasecurity/reviews.html (I haven't yet read this) http://www.nwnetworks.com/sands.htm (This links other articles, again I haven't followed this through yet)
92.232.150.252 ( talk) 08:14, 5 September 2009 (UTC)
Hervegirod ( talk) 21:34, 15 September 2009 (UTC)
This section only reference Sun's Java Language Specification and Sun's memory model specification, which can not be considered as criticisms on Java. The whole section is a original research? interpretation on parts of the Java specification, but don't link to any source criticizing Non-atomic assignment of 64-bit primitives. For these reasons it should be deleted. Hervegirod ( talk) 00:10, 3 December 2009 (UTC)
A lot of unreferenced or improperly referenced sections appeared in this article recently. Please note that on wikipedia stuff must be properly sourced. I have put a tag, and I'm allowing people to add valid sources, but if these sections are still not properly sourced in a few days, I will remove them. To be more clear:
Hervegirod ( talk) 12:46, 6 December 2009 (UTC)
How should the "Autoboxing" section be footnoted? For something so terse, surprising, and easily verifiable by any compiler, is a footnote actually necessary? I've added footnotes to some of the other new entries, and will be adding more in the near future.
JonDePlume ( talk) 03:48, 7 December 2009 (UTC)
You may have critics about Java, and you may be right, but it's not the point here. Adding footnotes is not enough if these footnotes are only improper sources. I have no problem at all with criticisms sections, but they must be properly sourced. For example, it is improper sourcing to quote Sun's documentation about something and using this as source for a critic. There were a lot of cases like that in your sourcing. Also quoting an unknown blogger or just an unreferenced page on the web is not proper sourcing.
I have to repeat what I wrote just before. You are welcome to edit and add critics, but you must properly source them. That you consider Java's lacking in certain aspects is not a valid reason by itself to add a critic on the language in this article, except if you find a reliable source which says the same ting as you think. Hervegirod ( talk) 22:50, 10 December 2009 (UTC)
Hervegirod (
talk) 22:39, 10 December 2009 (UTC)
Hervegirod,
Because you're not disputing that the criticisms of java I've listed in this article are commonly made, deleting the material I gathered does not seem appropriate... particularly when the page itself is rather skimpy. If you accept the basic premise that Wikipedia is here to help the community refine and transmit information, then a more constructive approach would be to assist in adding new references rather than wholesale removal of topical and relevant content.\
Perhaps Mark Reinhold is an unknown blogger to you, but he is the principal engineer responsible for managing Java within Sun. As such, he seems like a perfectly good person to cite, even if he makes certain announcements within the context of his blog; that's how he communicates to the world sometimes -- it *is* the primary document. Memory bloat is a fairly common concern/criticism of Java. Sometimes it's the programmer's fault, sometimes it's the way that the GC is being used, sometimes Java is the wrong choice for a particular job -- that's not what's at issue here. This article is about what the criticisms are, not whether or not they are true, who is to blame, or whether you agree. Is research conducted by the GWT team at Google not a reliable enough guide for estimating how large objects typically are in Java? If not, what is? To what standard are references in this article being held? Do you consider the opinions of the person who wrote iBATIS irrelevant? That seems implausible, given the popularity of iBATIS; his opinion matters to a great many people. You don't have to agree with it, but that doesn't take away from that fact that the criticisms have been made.
I am not out to bash java; there are many things to like about it. However the world has indeed criticized it, and those criticisms ought to be documented. A page entitled "Criticisms of Java" seems like the right place, no? For these reasons, I'm going to revert the undo operations you've performed and hope that we can have a constructive dialogue about this if you disagree (rather than going back & forth with delete/undo). I think we both want the same thing in the end: a well-sourced, useful, content-rich Wikipedia.
JonDePlume ( talk) 02:51, 11 December 2009 (UTC)
Perhaps we should begin by the first paragraph: Overall Verbosity:
Furthermore, none of these sources use the word "verbosity" or "verbose" once, so "Overall Verbosity", and "Java is widely considered to be an overly verbose programming language" (compared to what other languages?) come from nowhere here. maybe there are valid sources about this "verbosity", but as you are the one who added this paragraph, the burden of finding a valid source is yours.
AFAIK all the paragraphs you recently proposed have the same kinds of problems. Therefore they should all be deleted. Please be assured that it's not to "defend" Java from critics. Hervegirod ( talk) 00:30, 12 December 2009 (UTC)
Hervegirod,
I cited both well known and lesser known sources, but this seems entirely appropriate in the context of a wiki page that enumerates widespread criticisms (again, this isn't a page describing what's wrong with java, but rather one that describes frequent criticisms of it). If you follow the link to Mark Reinhold's blog you'll see that the reason he finally caved in was that "Working with parallel arrays in Java, unfortunately, requires lots of boilerplate code to solve even simple problems".
While Mark doesn't use the literal phrase "overly verbose", I think it's fair to say that his comments amount to an admission of just that. What's the problem with this reference then? That he didn't use the exact words "overly verbose" or "overall verbosity"? If that's it, then I don't believe that's a reasonable standard. After all, this reference isn't attached to a quotation, it's serving the role of substantiation of the summary itself. Fair?
If you'd like to spend some time helping, perhaps you might be able to find references to complaints about how much typing is required to accomplish simple things. For example, I've come across plenty of griping about System.out.println("..."). This was a problem that static imports were intended to address. Finding "authoritative" quotes on stuff like this is awfully difficult because Sun rarely comes out and says "oops". What you're left with is citing a larger number of lesser-known sources in order to document the scuttlebutt within the diverse java community itself. Maybe once in a blue moon you could get lucky and stumble upon a broad academic statistical survey of opinions. If you can find such a thing, then fantastic -- hat's off! I could not. I tried. Still, I thought the reference to Clinton Begin (the author of iBATIS) was pretty good. As for memory usage, that's still a work in progress. Clearly, it's a frequent criticism, but so far I've just gotten as far as the GWT team's quantitative listing, and haven't had time to select nice references about people in the community griping about it. Jump in there to if you'd like. :)
Aside: an interesting but difficult to calibrate tool for getting a sense of "zeitgeist" is Google's auto-completion feature. Try typing the phrase "Java is too" and pause for a moment to allow the search completion to kick in. The first completion is "Java is too verbose". The next completion is "Java is too complicated". This kind of thing is impossible to cite in a wikipedia article, but I mention it here both to substantiate the claim that this is a frequent criticism, and in the hope that you might find it an interesting and fun tool (if you don't already play with it). —Preceding unsigned comment added by 24.62.25.194 ( talk) 03:38, 12 December 2009 (UTC)
In any case, I believe the article is better and richer for the material I've added then it was before. It could be improved further by additions, clarifications, and better references, but not by removing items that are uncontroversial.
Cheers, JonDePlume ( talk) 03:13, 12 December 2009 (UTC)
A note on the proposed merge...
It strikes me that information here belongs under Java_programming_language#Criticism and other pages, not in a separate article. Wikipedia has enough "criticism of" pages without this short article on points better addressed elsewhere. The page on C++ does it correctly.
Some of the content is poorly referenced and non-neutral. For example:
Who considers? What certain features? What arguments do they cite? What are opposing viewpoints?
Some of the content is good; let's add that to Java_programming_language#Criticism and Generics_in_Java. Opposing viewpoints? dmyersturnbull ⇒ talk 00:52, 14 March 2010 (UTC)
The page on
C++ does it correctly
and let's add that to
Java_programming_language#Criticism
and that's precisely not what is done in the end. Strange a bit... --
AlainR345
Techno-Wiki-Geek 02:29, 28 April 2010 (UTC)If you think I have been overly harsh to revert, we can combine our ideas here perhaps. Stephen B Streater ( talk) 23:13, 23 March 2010 (UTC)
beside some technical effectivness, which has undebatable increased in the last years for java (defining the potential best implementation), there is an typical achieved performance by real existing programmers (mean or median effectivness of language) ... http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprt_computer2000.pdf http://portal.acm.org/citation.cfm?id=317683 maybe this analysis should be included, the metholodgy makes them still valid. 141.52.232.84 ( talk) —Preceding undated comment added 19:23, 29 November 2010 (UTC).
Microsoft owns .NET platform that is a major competitor of Java platform, and they are openly aiming to replace the competing technology with theirs. Hence there is a conflict of interest in they Java related talks and I suggest to avoid using references to Microsoft people talks in the article on Java criticism. If Microsoft is the only available source, maybe better not to include this kind of criticism at all. Audriusa ( talk) 12:23, 30 November 2010 (UTC)
The section “Unsigned integer types” states that Java lacks native unsigned integer types. This it not true since 'char' is an unsigned native 16 bit integer, 'char' is however the only unsigned native integer so native 32 bit and 64 bit integers does not exist, neither this 8 bit. —Preceding unsigned comment added by 193.150.222.25 ( talk) 00:26, 29 December 2010 (UTC)
I removed the paragraph, because as it is, it's more a POV sentence thhat anything else. The fact that this bug has been voted top of the list is not significant in itself. There is only 364 votes for it, and the last comment date from April (saying that there are other means to achieve this on Unix boxes). Besides it can be significant only if a valid source explains that it is a significant bug. Which the Bug list on Oracle's database can't say. Or else any of the other top voted bugs can be in this article, which would be ridiculous. And to be complete, the low amount of comments on the bug (else than just "google" without anything else, tend to show that the number of votes is not significant. Find a valid source saying that it is a serious bug, and there's no problem. Hervegirod ( talk) 23:45, 18 January 2011 (UTC)
It seems to me that Java is being unfairly singled out here. Sure, many other programming languages on Wikipedia have criticism sections, but Java seems to be the only one that was actually given a stand-alone article for "Criticism of Java". There are many criticisms that can be leveled against Flash, COBOL, .NET, C++, etc. But none of them actually have their own article titled "Criticism of [Insert Language X here]". — Preceding unsigned comment added by Pleo2012 ( talk • contribs) 19:32, 14 June 2011 (UTC)
I agree entirely. We should either make criticism pages for all other languages or merge this into the main Java article. I'm in the process of merging them right now. JavaAndCSharp ( talk) 14:25, 7 July 2011 (UTC)
While I do agree that having a criticism article only for Java treats Java unfairly (I doubt that criticism of Java is any more notable than criticism of C++ or many other languages), to me the far greater issue (and the reason I proposed the merge) is that criticism articles almost always, almost unavoidably devolve into mass collections of particular editors' complaints.
Moreover, this is a terrible way to categorize: a natural categorization for a programming language would be "syntax", "history", and "performance" (for example), and these can be placed into distinct articles. To a reader, seeing a criticism article is a bit like opening an encyclopaedia, flipping to the entry for "dog", and seeing two sections: "good" and "bad". It doesn't make any sense, and it's not conductive to reading and the point of an encyclopaedia.
I think there are far bigger problems contributing to the size of the Java article, such as overuse of code samples and unnecessarily in-depth discussion of syntax (which could easily be moved into the Java syntax. (Also: do we really need a "more comprehensive example" to the already long example section?)
Much of this article is already original research mixed with users' complaints, and I think it's likely to devolve from there. dmyersturnbull ⇒ talk 01:16, 3 August 2011 (UTC)
I suggest examples and textbook like segments are removed and the core of this article is merged into the Java article. The Java article is already too long and should be shortened to leave room for the content in this article. The examples in the Java article are too long and the explanations too technical. 217.209.140.211 ( talk) 20:49, 27 January 2012 (UTC)
What do Adobe Acrobat and Adobe Flash have to do with Java security weaknesses? 204.210.242.157 ( talk) 22:53, 11 January 2012 (UTC)
I cannot agree with the point in section "Large Arrays" about two dimensional arrays. I use Java(tm) for scientific/matrix applications as well and i made some rudimentary comparisons on my own machine and I found out that matrices backed by a two-dimensional array offer better performance than using one dimensional arrays. Following reasons:
* When it comes to a row majored array the row-major access was only slightly slower whith a double[][] array when its was whith a double[] array ( tested on a 4x4 and 100x100 matrices ) when it came to colum-major acces the double[] array turned out to be way slower ( on 100x100 matrices ) * double[][] (4 small arrays) arrays can be created/allocated way way faster than one contigious double[] array. * double[][] arrays allow mindblowingly fast row xor colum permutations (used for LU decompositions for example)
I am not a professional programmer and my tests were done on only one machine and might be scientific nonsense. But still my point stands: please give REASON why a java two dimensional arrays in java are bad (e.g. interfacing with native libraries but that would be another point wouldn't it). I assume that this article is trying to sum up REASONABLE criticism. -- 89.15.46.209 ( talk) 07:09, 26 May 2012 (UTC)
I removed the Robustness area, which was tagged as "OR" since June 2012. There was still no valid sources added since that time. I have of course no problem if someone re-add this part, of course providing that it is properly sourced. Hervegirod ( talk) 15:08, 19 January 2013 (UTC)
I suggest to either completely rewrite the section on "Noun-orientedness" or remove it. The current version simply does not make sense. It calls classes "nouns" and then explains that "verbs" (methods) can be performed on or by nouns. It's not wrong, but I would say that the majority of methods in a program are non-static and, hence, performed on or by objects, not classes. It continues with "Many argue that..." and only gives a reference to a blog entry. Later, it claims that "a function is bound to a class and can never operate on multiple types", ignoring that of course a method can operate on its parameters, which can be of any type (see the example of the sort method below). Finally, it gives a "likely" example of a Quicksorter class which "has a constructor taking an Object as an argument, and a single method called run()", which is rather funny because this is exactly how the sort method of the java.util.Collections class is NOT used.
I have some vague idea what the paragraph wants to critize (lack of top-level functions, the tendency to over-design Java frameworks, etc.), but I am not a native speaker. -- 130.89.103.73 ( talk) 09:07, 28 August 2014 (UTC)
Is it a good idea to have a sole article about unreflected criticism of <insert thing here> in wikipedia? While it is absolutely legitimate to criticise aspects of the Java language and the JVM (this article is about both), the critics in this article are sometimes biased by, for example, choosing a not fitting example (Noun-orientedness). This article would not read so much as a rant against Java and the JVM if there would also be some counterarguments in it, but I don't think an article with the title Criticism of Java has a place in wikipedia. It should be boiled down and made a section in the main Java article. 84.187.47.2 ( talk) 17:30, 17 January 2015 (UTC)
Hello fellow Wikipedians,
I have just modified 3 external links on Criticism of Java. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.
This message was posted before February 2018.
After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than
regular verification using the archive tool instructions below. Editors
have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the
RfC before doing mass systematic removals. This message is updated dynamically through the template {{
source check}}
(last update: 5 June 2024).
Cheers.— InternetArchiveBot ( Report bug) 16:52, 14 August 2017 (UTC)
A fragment claimed:
"However, the following is, [1] and will throw a ClassCastException on run-time, which means the type system was unable to detect any problems (however this is detected by modern IDEs like Eclipse and IntelliJ IDEA)."
class Nullless<T, U> {
class Constrain<B extends U> {}
final Constrain<? super T> constrain;
final U u;
Nullless(T t) {
u = coerce(t);
constrain = getConstrain();
}
<B extends U>
U upcast(Constrain<B> constrain, B b) {
return b;
}
U coerce(T t) {
return upcast(constrain, t);
}
Constrain<? super T> getConstrain() {
return constrain;
}
public static void main(String[] args) {
String zero = new Nullless<Integer,String>(0).u;
}
}
Since at least Java 8, this no longer compiles (haven't tested it under Java 6 or 7 to see when it stopped compiling).
error: method upcast in class Nullless<T,U> cannot be applied to given types;
return upcast(constrain, t);
^
required: Nullless<T,U>.Constrain<B>,B
found: Nullless<T,U>.Constrain<CAP#1>,T
reason: inference variable B has incompatible bounds
lower bounds: U
lower bounds: T
where B,T,U are type-variables:
B extends U declared in method <B>upcast(Nullless<T,U>.Constrain<B>,B)
T extends Object declared in class Nullless
U extends Object declared in class Nullless
where CAP#1 is a fresh type-variable:
CAP#1 extends U super: T from capture of ? super T
References
This is the
talk page for discussing improvements to the
Criticism of Java article. This is not a forum for general discussion of the article's subject. |
Article policies
|
Find sources: Google ( books · news · scholar · free images · WP refs) · FENS · JSTOR · TWL |
![]() | This article is rated C-class on Wikipedia's
content assessment scale. It is of interest to the following WikiProjects: | ||||||||||||||||||||
|
This also belongs in the Criticism of Java article, but it should be noted that the lawsuit Sun brought against Microsoft hurt the consumer. Since the Microsoft VM no longer ships with Windows XP (or can be downloaded), any page that contains a Java applet will be frozen for up to 3min on slow systems while the JRE loads, This has not changed with , and is a significant detriment. There are some advantages to having a VM built into the OS's structure. LaVieEntiere 16:52, 30 April 2007 (UTC)
The whole content of this article is taken from the Java criticism article, which had become very long and confusing for readers (I thought). Hervegirod 09:54, 11 June 2006 (UTC)
I'm not confident enough in my understanding of Java or Wikipedia protocol to just change this myself, but can someone please explain the following two criticims, taken from near the bottom of the article in its current format:
I assume that whoever wrote these is refering to the contents of the java.sql library (it would be helpful if this was explicitly stated). However, these aren't classes with standard implementations in the API; they're interfaces. Presumably there is no standard implementation, and the Java language can hardly be blamed if somebody happens to have written their own faulty implementations. That said, I'm also at a loss as to how any implementation of an interface specifying a method with a return type of int, can feature null as a return value for that method and still get past the compiler. As I'm more or less clueless myself, I'm not brave enough to delete the criciticms outright and potentially incur the wrath of whoever wrote them; perhaps someone can explain what I'm missing. Magicalsushi 13:52, 4 July 2006 (UTC)
Database connections and statements are not automatically closed when they fall out of scope as would be expected by a scope definition of any object oriented language => Again, this is perfectly normal. One should only look at what is done on a File stream. A Database is a resource, as is a File stream, and not only an object. It make sense to need to close explicitely a resource, this has nothing to do with the "Object oriented" notion (same in C#, for example) Hervegirod 19:43, 4 July 2006 (UTC)
Perhaps something should be said about some of the language design decisions and Sun's marketing of the language. IIRC it had within Sun been agreed upon that pointers were a common source of issues, therefore Java should not have pointers, and instead has "references". However, references has the very same syntax as pointers (initialised by new
and can be null
) and are even called pointers under the hood (f.i. "NullPointerException"). Another marketing strategy was to claim that not including multiple inheritance was because that facility was a common source of subtle errors, a claim (a
FUD strategy, according to some) that though has never been substantiated in any tests still became a taken-for-granted truism.
Mikademus 21:52, 25 July 2006 (UTC)
int *a; int b; a = &b; b = 1; *a = 5; printf("%i\n", b);
new
what the reference points to, and the allocated object is automatically deleted when no longer referenced. It is called reference counting when writing smart pointer classes in other languages too. The only real differences between Java's references and C/C++'s pointers is that pointer arithmatics is not allowed in Java and once initialised you can't reassign references in C++ (which allows you to use the assignment operator transparently on references).Integer a = new Integer(); Integer b = new Integer(); a = b; // under the hood a points the b's memory location b.set_to( 1 ); a.set_to( 5 );
Mikademus 09:47, 26 July 2006 (UTC)
Integer
syntax, you're right, the syntax is my_integer.parseInt("5");
. Anyway, since the wikiarticles define references and pointers as virtually the same things but under different restrictions then the above discussion is moot, or perhaps tautological. However, doesn't this simply goes to emphasise the handwaving involved in the marketing of Java? Sun's contention that Java conains no pointers but instead the safer references, while arguably strictly true, is manipulative since pointers and references are the same thing ("Pointers are the most primitive and error-prone but also one of the most powerful and efficient types of references, storing only the address of an object in memory" according to the
Reference (computer science) article) and seems to try to be purposely confusing. Again, I'm not criticizing the language here, especially since I'm using it myself, but I am testing the ground with you to see how a few, er... pointers about Sun's marketing would fit in the article.
Mikademus 11:29, 31 July 2006 (UTC)
“ | The most widely circulated comparisons tend to be those written by proponents of some language, Z, to prove that Z is better that other languages. Given its wide use, C++ is often top of the list of languages that the proponents of Z wants to prove inferior. Often, such papers are "published" or distributed by a company that sells Z as part of a marketing campaign. Surprisingly, many seem to take an unreviewed paper written by people working for a company selling Z "proving" that Z is best seriously. One problem is that there are always grains of truth in such comparisons. After all, no language is better than every other in all possible ways. C++ certainly isn't perfect, but selective truth can be most seductive and occasionally completely misleading.
When looking at a language comparison consider who wrote it, consider carefully if the descriptions are factual and fair, and also if the comparison criteria are themselves fair for all languages considered. This is not easy. |
” |
The garbage collection strategies used created significant application stability issues. These were noted in CMS and G1 algorithms. -- Jscorrales ( talk) 17:44, 14 April 2023 (UTC)
I realise that it might be difficult to find good, neutral sources about justified criticism of Java. I found this one, linking to a page unfortunately called "Java Sucks", but written by a self-proclamed proponent of Java and listing several items of interest. I wish it had been baptized otherwise because it's flammable by its name, but it might serve nontheless. Mikademus 09:40, 8 August 2006 (UTC)
The JSP one really has nothing to do with Java, which is why I removed it. I think it needs to be written better if it stays in (I'm assuming there isn't a Criticism of J2EE or anything). As for the iterator one, I don't see how an iterator not allowing itself to be reset is really that irregular. That being said, it's not exactly true, because ListIterator allows for back/forth movement, effectively enabling a reset. The whole section is kindof a mess to me, but FWIW, that's why I removed those two. If someonen can expand on them both, maybe we can reword them to make more sense. -- Davetron5000 21:45, 16 August 2006 (UTC)
The bullet regarding constructors is that a subclass inherits all methods of the superclass but none of the constructors, save for the no-arg constructor (which is only inherited and called if no constructor is specified I believe). Take Hashtable for example: You subclass it, and you must reimplement all of it's constructors to call the super-classes constructor. That is the point of that item in the article and that has nothing to do with the requirement that calls to the super-class constructor or another constructor in the same class must be the first line of the constructor. -- Davetron5000 14:17, 31 August 2006 (UTC)
The article currently contains the following statement, with 'citation needed' appended:
“ | When generics were added, requirements on backwards compatibility limited the features that could be provided by this addition, as compared to other languages | ” |
I think this article on my own site may be useful as a citation, but I won't add it myself (as per WP:EL#Links normally to be avoided #3, 'If your page is relevant and informative, mention it on the talk page and let unbiased Wikipedia editors decide whether to add the link.'). -- Safalra 13:42, 28 October 2006 (UTC)
I wonder if it would help to give a bit more background on JIT compilation. The first time I came across JIT was in the Borland world where they used it in Delphi (and I'm sure it was around before then, but it was with the power of the 486(!!) that it became feasible concept for general programming). The assumption was that PCs had time to spare and due to I/O, graphics drawing and whatever, there were enough spare CPU cycles that there was time to compile the code as well as executing it.
The fundamental problem with Java and JIT is not in the single user world in general, most PCs have plenty of spare CPU and such extravagance can be tolerated, but in failing to recognise that in a multi-user/multi-tasking world, those CPU cycles were not spare, they were someone else's, hence JIT is less suitable for servers.
I propose to delete this part, as Java has now become GPL, this seems not to be a problem anymore. As I understand, the problem was that opensource alternatives were lagging behind Sun's. Hervegirod 15:26, 19 November 2006 (UTC)
I didn't read the section, but this is still a problem - on phones. 155.198.65.29 ( talk) 11:22, 7 April 2009 (UTC)
I agree that the JVM's memory management strategies is a point that may be criticized. However, the article criticizes the plain fact that Java has a garbage collector, on the grounds that it may lead programmers to mess up when they move to C++. This is a bit far-fetched, as automatic garbage collection is common in a lot of languages. I personally think this part should be removed. -- 129.240.106.170 23:37, 23 October 2006 (UTC)
The first part of this section details an example of legal Java code that if written in the same way in C++ would result in a memory leak. Since Java handles it correctly how is this a criticism of Java? Surely it is a C++ problem? Criticising a language for not being valid in another language sounds absurd to me, unless I'm misunderstanding the article. Canderra 03:31, 13 December 2006 (UTC)
Automatic garbage collection certainly isn't an inherent bug, or something specific to Java, but Java is often used for teaching purposes, and it is valid to say that Java and all other managed languages are incomplete as a teaching language, so long as memory management is liable to be an important skill for a programmer. This is one of many common complaints against Java as a teaching language that circulate in academia, and it's a factually valid one. Simply put, if we assert that a well trained programmer should have the basic thought process skill and "muscle memory" to be able to write C/C++/Pascal/assembler in a pinch, without any huge learning curve, then a managed-only skill set will fall short. 70.69.42.228 20:35, 13 January 2007 (UTC)
To say that Java should be criticized because it fails to teach things like memory management and other concepts in other languages is unfounded because, like those above have said, you can say the same thing about languages such as C and C++. Also, the market isn't huge for C/C++ programming, especially in industry. The only major fields they have use in is in embedded systems and operating system development due to their ability to perform operations that would be considered low level (i.e. assigning/creating ISR, making inline assembly and directives, accessing and manipulating specific memory locations, etc.). A large portion of the industry deals with web based applications and client applications which would benefit from GC. This is why languages like C#/VB/Java are used to create these applications because they don't require the need to perform low level operations, such as manual memory management. And considering that one of the key points of academia is to prepare you for industry, why not use what a large portion of the industry is using, i.e. languages that support automatic GC. --Jake 198.102.153.2 ( talk) 17:48, 18 August 2011 (UTC)
What is this?
" This means that a Java EE server cannot limit the amount of memory that a deployed application can allocate, nor it can limit how many time a servlet can use to answer a user request."
First, the reference used to support this is not a reference to anything about Java at all, it's a reference to another language and says nothing about Java.
Secondly , the whole section does not read like an encyclopedia entry. THe English is simply broken and ungrammatical here- "nor it can limit how many time a servlet can use to answer a user request", a sentence fragment that actually makes no sense.
Third, the statement is simply false; J2EE server and the application it hosts can indeed monitor and limit the amount of memory used and it can also limit servlets in any way it sees fit.
Sorry, this is not true, not grammatical and not referenced. I am taking it out. — Preceding unsigned comment added by 71.194.197.246 ( talk) 12:55, 25 August 2012 (UTC)
I have deleted the paragraph
It must be noted, however, that it is a common case for other Virtual machine languages, as for example the .NET Framework Common Language Runtime (see Platform Invocation Services).
because 1) it is incorrect: .NET P/Invoke does not require you to maintain two codebases the way JNI does, it also provides much safer (through annotations) memory and resource management, and 2) it is irrelevant. 212.242.89.162 ( talk) 10:29, 27 May 2008 (UTC)
Sun Java is not currently open source or free software, as defined by the open source initiative and free software foundation. Referring to Java's proprietary nature in a past tense is deceptive because it's still proprietary, so I'm removing the "before xx java was proprietary" layout, but if/when the GPL release occurs, maybe it should be restored. I removed a few sentences that are factually inaccurate as well. For instance, Java is not more available or open source or free software friendly than .NET as Mono is more compatible with .NET than GNU classpath is with Java, and Mono is now in wider production use than GNU classpath. —The preceding unsigned comment was added by 70.69.42.228 ( talk) 18:30, 4 January 2007 (UTC).
Now that Java is release under GPL, should this be removed in its entirety? Les ( talk) 12:23, 9 October 2008 (UTC)
As I haven't seen any kind of edit wars nor I couldn't find anuthing in wiki rules (except IAR) I deleted the section. I hope I didn;t do anything wrong. Uzytkownik ( talk) —Preceding undated comment was added at 23:14, 20 October 2008 (UTC).
There are still issues if you need to use Java for emedded use. See Google's decision to write a VM for their Anroid platform in order to avoid some of the problems. 66.11.179.30 ( talk) 23:51, 27 October 2008 (UTC)
The statement "Running a Java program requires all supporting libraries to be on the classpath." is not entirely accurate, it is possible to have a Java application manually manage the class loading of its libraries, in some areas it is quite common for applications to function in this way, utilities that use provider pattern APIs such as generic JDBC tools often manage the loading of the vendor specific JDBC driver themselves to prevent classpath problems for users. Applications which allow users to add plugins of one sort or another using the application UI will almost always work in this way, the netbeans IDE is a good example of this.
As I understand it, the mechanism by which an application's classpath (whether on the command line used to start the virtual machine and application, or as part of the system classpath) is specific to the java VM implementation, most implementations copy Sun's command syntax almost exactly (with slight variations appropriate for their platform).
It is definately true to say that the commands used to start a localy installed application from a system console or gui environment are platform specific (and often site/machine specific) and usually a barrier to the write once run anywhere paradigm.
Java applications that are executed as Applets embeded in HTML pages or applications started using the JNLP (webstart) framework avoid the pitfalls of CLASSPATH and are both examples of the write once run anywhere paradigm in action, I am sure there are other examples of WORA working properly, EJB applications possibly? Comments please.--FifthColumnist 04:55, 12 January 2007 (UTC)
A java application executable (a jar with a Main-Class entry in its manifest), can also specify a Class-path entry. This entry can define each of the applications supporting libraries, or .jars, separated by a space, and uses forward slashes across platforms, including Windows, to delimit directories. By defining a classpath this way (rather than manipulating the system class path, it is easily possible to create a cross platform application, negating the problems in the main article. Main article should be updated with this information. Please see here: http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download —The preceding unsigned comment was added by 217.205.198.24 ( talk) 11:14, 26 April 2007 (UTC).
There are some instances in this article that use informal or inappropriate language. An example is even in the lead paragraph: "However, Java is not without flaws, and it does not universally accommodate all programming styles, environments, or requirements." —The preceding unsigned comment was added by 128.12.108.147 ( talk) 21:30, 10 May 2007 (UTC).
There is a subject-verb agreement issue in Performance section: "Sun Microsystems have taken considerable trouble to address these problems, and regularly produce white papers on this topic" should read: "Sun Microsystems has taken considerable trouble to address these problems, and regularly produce white papers on this topic." —Preceding unsigned comment added by 67.186.12.163 ( talk) 02:17, 31 May 2009 (UTC)
I'm moving this text from the article here:
It is impossible to make any generalization about the performance of Java programs, because runtime performance is affected much more by the quality of the compiler or JVM than by any intrinsic properties of the language itself.
This text or anything of the kind does not appear in the main article, Java performance. It does not have citations and is either false or at least misleading. The choice of language features does affect the amenability of a language to present-day compilation techniques (let's forget the mythical Sufficiently Smart Compiler), and Java can be effectively compiled. This is not true of e.g. Python, Ruby or Perl at present, whose very dynamic nature makes things difficult for compilers. Nobody uses compilers/JVMs today which make Java as slow as Perl, so quality of the compiler is not in practice as important as properties of the language, and one can make the generalization that in practice Java is faster than Perl (unless your code spends all its time in libraries implemented in other languages, which is how Perl is usually used, but I digress). What matters is the performance of JVMs people actually have to deal with today (because customers use them) or the best JVM one can choose (when you can choose), and these do not vary so wildly as to make generalizations about them wholly impossible. -- Coffee2theorems 14:56, 30 August 2007 (UTC)
The following sentence: However, as demonstrated in C# it is possible to allow for value types/primitive types to exhibit OO characteristics such as encapsulation, instance methods and interface implementation without compromising performance at all seems really dubious to me. I was not able to find any reference backing this. So if nobody finds a ref about that in say 2-3 days, I propose to remove it. Hervegirod ( talk) 20:07, 30 July 2008 (UTC)
I have a general problem with the content of this article. A lot of sections are not sourced, or sources are not critics at all. Not that I want to remove all unsourced sentences, but it seems to me that for now, a lot of critics are mainly WP:POV. As it is, the article seems to me more a collection of editors personal thoughts than anything else:
Hervegirod ( talk) 09:37, 30 August 2008 (UTC)
It isn't much of a criticism when there is no comparison to alternatives ··gracefool ☺ 10:58, 2 April 2009 (UTC)
Does no-one have a problem with the badly designed library? Comparing String to C++'s std::string or QString shows just how hard it is to work with. Then there's the whole lack of a decent vector class (oh for std::vector<int>!) There are other stupidities too, like the fact that Thread objects can only run once, there's no readLine() equivalent, you can't seek in files, etc. This is all J2ME I'm talking about but I doubt it is much better in J2SE. 155.198.65.29 ( talk) 11:29, 7 April 2009 (UTC)
The section about java not providing primitive types in generics should be merged into the section about generics themselves, as it is a result of type erasure. —Preceding unsigned comment added by 129.132.45.64 ( talk) 11:50, 10 August 2009 (UTC)
A new Security section has been added recently. However, the only sources are just FAQs which do not criticize the java security model and a personal blog which quotes an IBM paper. This paper concludes by these words "So is Java still secure? The short answer is yes". This section should be removed. After some days I will do it myself it I have no further valid sources about this. Hervegirod ( talk) 20:49, 3 September 2009 (UTC)
Hang on with this. Java does have some negative security issues. I will be writing more papers that will expand on these. Basically the security risks come from using a Java enabled internet browser. I know of some problems, and there are papers scattered around the internet that back up some of these issues. The article section just needs expansion and cross references made to the various articles. Here are some:
http://www.cs.princeton.edu/sip/faq/java-faq.php3 http://www.cigital.com/javasecurity/reviews.html (I haven't yet read this) http://www.nwnetworks.com/sands.htm (This links other articles, again I haven't followed this through yet)
92.232.150.252 ( talk) 08:14, 5 September 2009 (UTC)
Hervegirod ( talk) 21:34, 15 September 2009 (UTC)
This section only reference Sun's Java Language Specification and Sun's memory model specification, which can not be considered as criticisms on Java. The whole section is a original research? interpretation on parts of the Java specification, but don't link to any source criticizing Non-atomic assignment of 64-bit primitives. For these reasons it should be deleted. Hervegirod ( talk) 00:10, 3 December 2009 (UTC)
A lot of unreferenced or improperly referenced sections appeared in this article recently. Please note that on wikipedia stuff must be properly sourced. I have put a tag, and I'm allowing people to add valid sources, but if these sections are still not properly sourced in a few days, I will remove them. To be more clear:
Hervegirod ( talk) 12:46, 6 December 2009 (UTC)
How should the "Autoboxing" section be footnoted? For something so terse, surprising, and easily verifiable by any compiler, is a footnote actually necessary? I've added footnotes to some of the other new entries, and will be adding more in the near future.
JonDePlume ( talk) 03:48, 7 December 2009 (UTC)
You may have critics about Java, and you may be right, but it's not the point here. Adding footnotes is not enough if these footnotes are only improper sources. I have no problem at all with criticisms sections, but they must be properly sourced. For example, it is improper sourcing to quote Sun's documentation about something and using this as source for a critic. There were a lot of cases like that in your sourcing. Also quoting an unknown blogger or just an unreferenced page on the web is not proper sourcing.
I have to repeat what I wrote just before. You are welcome to edit and add critics, but you must properly source them. That you consider Java's lacking in certain aspects is not a valid reason by itself to add a critic on the language in this article, except if you find a reliable source which says the same ting as you think. Hervegirod ( talk) 22:50, 10 December 2009 (UTC)
Hervegirod (
talk) 22:39, 10 December 2009 (UTC)
Hervegirod,
Because you're not disputing that the criticisms of java I've listed in this article are commonly made, deleting the material I gathered does not seem appropriate... particularly when the page itself is rather skimpy. If you accept the basic premise that Wikipedia is here to help the community refine and transmit information, then a more constructive approach would be to assist in adding new references rather than wholesale removal of topical and relevant content.\
Perhaps Mark Reinhold is an unknown blogger to you, but he is the principal engineer responsible for managing Java within Sun. As such, he seems like a perfectly good person to cite, even if he makes certain announcements within the context of his blog; that's how he communicates to the world sometimes -- it *is* the primary document. Memory bloat is a fairly common concern/criticism of Java. Sometimes it's the programmer's fault, sometimes it's the way that the GC is being used, sometimes Java is the wrong choice for a particular job -- that's not what's at issue here. This article is about what the criticisms are, not whether or not they are true, who is to blame, or whether you agree. Is research conducted by the GWT team at Google not a reliable enough guide for estimating how large objects typically are in Java? If not, what is? To what standard are references in this article being held? Do you consider the opinions of the person who wrote iBATIS irrelevant? That seems implausible, given the popularity of iBATIS; his opinion matters to a great many people. You don't have to agree with it, but that doesn't take away from that fact that the criticisms have been made.
I am not out to bash java; there are many things to like about it. However the world has indeed criticized it, and those criticisms ought to be documented. A page entitled "Criticisms of Java" seems like the right place, no? For these reasons, I'm going to revert the undo operations you've performed and hope that we can have a constructive dialogue about this if you disagree (rather than going back & forth with delete/undo). I think we both want the same thing in the end: a well-sourced, useful, content-rich Wikipedia.
JonDePlume ( talk) 02:51, 11 December 2009 (UTC)
Perhaps we should begin by the first paragraph: Overall Verbosity:
Furthermore, none of these sources use the word "verbosity" or "verbose" once, so "Overall Verbosity", and "Java is widely considered to be an overly verbose programming language" (compared to what other languages?) come from nowhere here. maybe there are valid sources about this "verbosity", but as you are the one who added this paragraph, the burden of finding a valid source is yours.
AFAIK all the paragraphs you recently proposed have the same kinds of problems. Therefore they should all be deleted. Please be assured that it's not to "defend" Java from critics. Hervegirod ( talk) 00:30, 12 December 2009 (UTC)
Hervegirod,
I cited both well known and lesser known sources, but this seems entirely appropriate in the context of a wiki page that enumerates widespread criticisms (again, this isn't a page describing what's wrong with java, but rather one that describes frequent criticisms of it). If you follow the link to Mark Reinhold's blog you'll see that the reason he finally caved in was that "Working with parallel arrays in Java, unfortunately, requires lots of boilerplate code to solve even simple problems".
While Mark doesn't use the literal phrase "overly verbose", I think it's fair to say that his comments amount to an admission of just that. What's the problem with this reference then? That he didn't use the exact words "overly verbose" or "overall verbosity"? If that's it, then I don't believe that's a reasonable standard. After all, this reference isn't attached to a quotation, it's serving the role of substantiation of the summary itself. Fair?
If you'd like to spend some time helping, perhaps you might be able to find references to complaints about how much typing is required to accomplish simple things. For example, I've come across plenty of griping about System.out.println("..."). This was a problem that static imports were intended to address. Finding "authoritative" quotes on stuff like this is awfully difficult because Sun rarely comes out and says "oops". What you're left with is citing a larger number of lesser-known sources in order to document the scuttlebutt within the diverse java community itself. Maybe once in a blue moon you could get lucky and stumble upon a broad academic statistical survey of opinions. If you can find such a thing, then fantastic -- hat's off! I could not. I tried. Still, I thought the reference to Clinton Begin (the author of iBATIS) was pretty good. As for memory usage, that's still a work in progress. Clearly, it's a frequent criticism, but so far I've just gotten as far as the GWT team's quantitative listing, and haven't had time to select nice references about people in the community griping about it. Jump in there to if you'd like. :)
Aside: an interesting but difficult to calibrate tool for getting a sense of "zeitgeist" is Google's auto-completion feature. Try typing the phrase "Java is too" and pause for a moment to allow the search completion to kick in. The first completion is "Java is too verbose". The next completion is "Java is too complicated". This kind of thing is impossible to cite in a wikipedia article, but I mention it here both to substantiate the claim that this is a frequent criticism, and in the hope that you might find it an interesting and fun tool (if you don't already play with it). —Preceding unsigned comment added by 24.62.25.194 ( talk) 03:38, 12 December 2009 (UTC)
In any case, I believe the article is better and richer for the material I've added then it was before. It could be improved further by additions, clarifications, and better references, but not by removing items that are uncontroversial.
Cheers, JonDePlume ( talk) 03:13, 12 December 2009 (UTC)
A note on the proposed merge...
It strikes me that information here belongs under Java_programming_language#Criticism and other pages, not in a separate article. Wikipedia has enough "criticism of" pages without this short article on points better addressed elsewhere. The page on C++ does it correctly.
Some of the content is poorly referenced and non-neutral. For example:
Who considers? What certain features? What arguments do they cite? What are opposing viewpoints?
Some of the content is good; let's add that to Java_programming_language#Criticism and Generics_in_Java. Opposing viewpoints? dmyersturnbull ⇒ talk 00:52, 14 March 2010 (UTC)
The page on
C++ does it correctly
and let's add that to
Java_programming_language#Criticism
and that's precisely not what is done in the end. Strange a bit... --
AlainR345
Techno-Wiki-Geek 02:29, 28 April 2010 (UTC)If you think I have been overly harsh to revert, we can combine our ideas here perhaps. Stephen B Streater ( talk) 23:13, 23 March 2010 (UTC)
beside some technical effectivness, which has undebatable increased in the last years for java (defining the potential best implementation), there is an typical achieved performance by real existing programmers (mean or median effectivness of language) ... http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprt_computer2000.pdf http://portal.acm.org/citation.cfm?id=317683 maybe this analysis should be included, the metholodgy makes them still valid. 141.52.232.84 ( talk) —Preceding undated comment added 19:23, 29 November 2010 (UTC).
Microsoft owns .NET platform that is a major competitor of Java platform, and they are openly aiming to replace the competing technology with theirs. Hence there is a conflict of interest in they Java related talks and I suggest to avoid using references to Microsoft people talks in the article on Java criticism. If Microsoft is the only available source, maybe better not to include this kind of criticism at all. Audriusa ( talk) 12:23, 30 November 2010 (UTC)
The section “Unsigned integer types” states that Java lacks native unsigned integer types. This it not true since 'char' is an unsigned native 16 bit integer, 'char' is however the only unsigned native integer so native 32 bit and 64 bit integers does not exist, neither this 8 bit. —Preceding unsigned comment added by 193.150.222.25 ( talk) 00:26, 29 December 2010 (UTC)
I removed the paragraph, because as it is, it's more a POV sentence thhat anything else. The fact that this bug has been voted top of the list is not significant in itself. There is only 364 votes for it, and the last comment date from April (saying that there are other means to achieve this on Unix boxes). Besides it can be significant only if a valid source explains that it is a significant bug. Which the Bug list on Oracle's database can't say. Or else any of the other top voted bugs can be in this article, which would be ridiculous. And to be complete, the low amount of comments on the bug (else than just "google" without anything else, tend to show that the number of votes is not significant. Find a valid source saying that it is a serious bug, and there's no problem. Hervegirod ( talk) 23:45, 18 January 2011 (UTC)
It seems to me that Java is being unfairly singled out here. Sure, many other programming languages on Wikipedia have criticism sections, but Java seems to be the only one that was actually given a stand-alone article for "Criticism of Java". There are many criticisms that can be leveled against Flash, COBOL, .NET, C++, etc. But none of them actually have their own article titled "Criticism of [Insert Language X here]". — Preceding unsigned comment added by Pleo2012 ( talk • contribs) 19:32, 14 June 2011 (UTC)
I agree entirely. We should either make criticism pages for all other languages or merge this into the main Java article. I'm in the process of merging them right now. JavaAndCSharp ( talk) 14:25, 7 July 2011 (UTC)
While I do agree that having a criticism article only for Java treats Java unfairly (I doubt that criticism of Java is any more notable than criticism of C++ or many other languages), to me the far greater issue (and the reason I proposed the merge) is that criticism articles almost always, almost unavoidably devolve into mass collections of particular editors' complaints.
Moreover, this is a terrible way to categorize: a natural categorization for a programming language would be "syntax", "history", and "performance" (for example), and these can be placed into distinct articles. To a reader, seeing a criticism article is a bit like opening an encyclopaedia, flipping to the entry for "dog", and seeing two sections: "good" and "bad". It doesn't make any sense, and it's not conductive to reading and the point of an encyclopaedia.
I think there are far bigger problems contributing to the size of the Java article, such as overuse of code samples and unnecessarily in-depth discussion of syntax (which could easily be moved into the Java syntax. (Also: do we really need a "more comprehensive example" to the already long example section?)
Much of this article is already original research mixed with users' complaints, and I think it's likely to devolve from there. dmyersturnbull ⇒ talk 01:16, 3 August 2011 (UTC)
I suggest examples and textbook like segments are removed and the core of this article is merged into the Java article. The Java article is already too long and should be shortened to leave room for the content in this article. The examples in the Java article are too long and the explanations too technical. 217.209.140.211 ( talk) 20:49, 27 January 2012 (UTC)
What do Adobe Acrobat and Adobe Flash have to do with Java security weaknesses? 204.210.242.157 ( talk) 22:53, 11 January 2012 (UTC)
I cannot agree with the point in section "Large Arrays" about two dimensional arrays. I use Java(tm) for scientific/matrix applications as well and i made some rudimentary comparisons on my own machine and I found out that matrices backed by a two-dimensional array offer better performance than using one dimensional arrays. Following reasons:
* When it comes to a row majored array the row-major access was only slightly slower whith a double[][] array when its was whith a double[] array ( tested on a 4x4 and 100x100 matrices ) when it came to colum-major acces the double[] array turned out to be way slower ( on 100x100 matrices ) * double[][] (4 small arrays) arrays can be created/allocated way way faster than one contigious double[] array. * double[][] arrays allow mindblowingly fast row xor colum permutations (used for LU decompositions for example)
I am not a professional programmer and my tests were done on only one machine and might be scientific nonsense. But still my point stands: please give REASON why a java two dimensional arrays in java are bad (e.g. interfacing with native libraries but that would be another point wouldn't it). I assume that this article is trying to sum up REASONABLE criticism. -- 89.15.46.209 ( talk) 07:09, 26 May 2012 (UTC)
I removed the Robustness area, which was tagged as "OR" since June 2012. There was still no valid sources added since that time. I have of course no problem if someone re-add this part, of course providing that it is properly sourced. Hervegirod ( talk) 15:08, 19 January 2013 (UTC)
I suggest to either completely rewrite the section on "Noun-orientedness" or remove it. The current version simply does not make sense. It calls classes "nouns" and then explains that "verbs" (methods) can be performed on or by nouns. It's not wrong, but I would say that the majority of methods in a program are non-static and, hence, performed on or by objects, not classes. It continues with "Many argue that..." and only gives a reference to a blog entry. Later, it claims that "a function is bound to a class and can never operate on multiple types", ignoring that of course a method can operate on its parameters, which can be of any type (see the example of the sort method below). Finally, it gives a "likely" example of a Quicksorter class which "has a constructor taking an Object as an argument, and a single method called run()", which is rather funny because this is exactly how the sort method of the java.util.Collections class is NOT used.
I have some vague idea what the paragraph wants to critize (lack of top-level functions, the tendency to over-design Java frameworks, etc.), but I am not a native speaker. -- 130.89.103.73 ( talk) 09:07, 28 August 2014 (UTC)
Is it a good idea to have a sole article about unreflected criticism of <insert thing here> in wikipedia? While it is absolutely legitimate to criticise aspects of the Java language and the JVM (this article is about both), the critics in this article are sometimes biased by, for example, choosing a not fitting example (Noun-orientedness). This article would not read so much as a rant against Java and the JVM if there would also be some counterarguments in it, but I don't think an article with the title Criticism of Java has a place in wikipedia. It should be boiled down and made a section in the main Java article. 84.187.47.2 ( talk) 17:30, 17 January 2015 (UTC)
Hello fellow Wikipedians,
I have just modified 3 external links on Criticism of Java. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:
When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.
This message was posted before February 2018.
After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than
regular verification using the archive tool instructions below. Editors
have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the
RfC before doing mass systematic removals. This message is updated dynamically through the template {{
source check}}
(last update: 5 June 2024).
Cheers.— InternetArchiveBot ( Report bug) 16:52, 14 August 2017 (UTC)
A fragment claimed:
"However, the following is, [1] and will throw a ClassCastException on run-time, which means the type system was unable to detect any problems (however this is detected by modern IDEs like Eclipse and IntelliJ IDEA)."
class Nullless<T, U> {
class Constrain<B extends U> {}
final Constrain<? super T> constrain;
final U u;
Nullless(T t) {
u = coerce(t);
constrain = getConstrain();
}
<B extends U>
U upcast(Constrain<B> constrain, B b) {
return b;
}
U coerce(T t) {
return upcast(constrain, t);
}
Constrain<? super T> getConstrain() {
return constrain;
}
public static void main(String[] args) {
String zero = new Nullless<Integer,String>(0).u;
}
}
Since at least Java 8, this no longer compiles (haven't tested it under Java 6 or 7 to see when it stopped compiling).
error: method upcast in class Nullless<T,U> cannot be applied to given types;
return upcast(constrain, t);
^
required: Nullless<T,U>.Constrain<B>,B
found: Nullless<T,U>.Constrain<CAP#1>,T
reason: inference variable B has incompatible bounds
lower bounds: U
lower bounds: T
where B,T,U are type-variables:
B extends U declared in method <B>upcast(Nullless<T,U>.Constrain<B>,B)
T extends Object declared in class Nullless
U extends Object declared in class Nullless
where CAP#1 is a fresh type-variable:
CAP#1 extends U super: T from capture of ? super T
References