| |
| |
The Java Database Connectivity (JDBC) API has emerged as a key part of the Java 2 Standard Edition (J2SE) and Java 2 Enterprise Edition (J2EE) platforms. It is the primary standards-based mechanism for the Java language to programmatically access relational databases, so when a new version of the specification is released by the Java Community Process, developers are bound to be interested. This article summarizes the key new features as outlined in Sun Microsystems' recently released Proposed Final Draft 3.0 of the JDBC specification.
|
|
|
| |
| |
As the J2EE platform has matured, it has opened up the opportunity to deploy commodity servers in networked cluster configurations for scaling of Web services and Web applications at the Web tier. These commodity servers, interconnected through commodity LAN hardware, can provide cost-effective clustering solutions. The last piece of the clustering puzzle is in the software. In this seriesSing Li examines three open source software substrates that can enable high-impact Web tier clustering, beginning with JavaGroups.
|
|
|
| |
| |
This article discusses incremental compaction, a new feature in the memory management component of IBM JDK 1.4.0. Incremental compaction is a way of spreading compaction work across different garbage collection cycles, thereby reducing pause times. The authors discuss the need for incremental compaction, the compaction phases at a high level, and some runtime parameters. They also explain how to interpret changes in the verbosegc output.
|
|
|
| |
| |
Love or hate it, static type checking can make code more robust. Programming languages are moving away from static type checking, but it is too powerful a debug resource to abandon. Static type checking can be one of the key weapons in a powerful arsenal against introducing and for detecting bugs. This article explains why we should be glad that the Java language supports it, and discusses how it can be made even better.
|
|
|
| |
| |
Learn the pros and cons of generating native code from Java source. This article includes the basics of code compilation, including a brief overview of why many developers are employing Java native compilers for their applications.
|
|
|
| |
| |
One of the most important features of the Java language is support for multithreaded (also called concurrent) programming. This tutorial introduces you to the proper use of multiple threads in a Java program, using sample programs to illustrate these concepts. Before taking this course, you should have a general knowledge of Java programming; the context and level of knowledge used in this tutorial is the equivalent of an undergraduate operating systems course.
|
|
|
| |
| |
The ThreadLocal class appeared with little fanfare in version 1.2 of the Java platform. While support for thread-local variables has long been a part of many threading facilities, such as the Posix pthreads facility, the initial design of the Java Threads API lacked this useful feature. Further, the initial implementation was quite inefficient. For these reasons, ThreadLocal gets relatively little attention, but it can be very handy for simplifying the development of thread-safe concurrent programs. This article examines ThreadLocal and offers tips for exploiting its power.
|
|
|
| |
| |
The addition of the java.util.prefs package to Java 1.4 (through JSR 10) lets you manipulate user preference data and configuration data by providing you with access to an implementation-specific registry (for example, the Windows Registry on Windows platforms). This article introduces you to the Preferences class and walks you through its use. It puts it all together with a sample program.
|
|
|
| |
| |
While it's common to hear that synchronized method calls can be 50 times as expensive as unsynchronized method calls, these numbers can actually be quite misleading. With each successive JVM version, overall performance has improved, and the cost of uncontended synchronization has been reduced, making the issue of uncontended synchronization overhead less significant. Contended synchronization, however, is quite expensive. Moreover, a high degree of contention is disastrous for scalability -- an application that had a high degree of contended synchronization will exhibit markedly worse performance as the load increases. This article explores several techniques for reducing contention, and hence improving scalability, in your programs.
|
|
|
| |
| |
In multithreaded code, it is often common to use a single, master thread that drives the actions the other threads take. This master thread may send messages, often by placing them on a queue, that are then processed by the other threads. But if the master thread throws an exception, the remaining threads may continue to run, awaiting more input to the queue, causing the program to freeze. This article discusses detecting, fixing, and avoiding this bug pattern.
|
|
|
| |
|