Development
Java Performance Tuning w/ Fat Clients
posted bypowelljgrinDevelopment
Tuning isn't always about speed, sometimes other aspects of the application need fixing. When your application needs tuning, your first course of action is normally to monitor the application with a profiler. But profiling is not always practical -- sometimes for ironic reasons. In this installment of Eye on performance, Jack Shirazi and Kirk Pepperdine, Director and CTO of Java Performance Tuning relate their recent experiences with profiling a fat client -- so fat, in fact, that it left no room for a profiler.
Reviews0
PriceFree
Views1218
Introducing the Reflexive User Interface Builder
posted bypowelljgrinDevelopment
The IBM Reflexive User Interface Builder (RIB), a new technology available from alphaWorks, is an application and toolkit for building and rendering Java AWT/Swing and Eclipse SWT GUIs. RIB specifies a flexible and easy-to-use XML markup language for describing Java GUIs and provides an engine for creating them. You can use RIB to test and evaluate basic GUI layout and functionality, or to create and render GUIs for an application.
Reviews0
PriceFree
Views2050
Data Management in J2EE Apps
posted bypowelljgrinDevelopment
This article examines two data management strategies available on the Java platform: Java object serialization and Java Database Connectivity (JDBC). While neither data management strategy is inherently superior or inferior to the other, when it comes to managing enterprise information systems, JDBC wins hands down.
Reviews0
PriceFree
Views1131
Unclogging Server Bottlenecks w/ Active Containers
posted bypowelljgrinDevelopment
In server-side control architectures a majority of the control events must be handled on the server side to update the state of the control. For every user event, the entire page data is sent back to the server as part of the form submission, even data that has not changed or is not affected by the user event. This article shows you how to use containers to overcome data-processing redundancy, which can otherwise drain the life out of your handheld or Web server.
Reviews0
PriceFree
Views1099
Tracing in a Multithreaded, Multiplatform Environment
posted bypowelljgrinDevelopment
Most Java programmers use some kind of tracing system to keep track of potential errors and problems in code under development. However, multithreaded and multiplatform systems can generate a large and baffling amount of tracing data. This article offers tips that will help you make sense of trace data from complex applications.
Reviews0
PriceFree
Views1132
Using Aspect-Oriented Programming to Maintain Legacy Java Apps
posted bypowelljgrinDevelopment
In an enterprise environment, you can easily end up in a tangle of modules with a number of third-party libraries and frameworks. While a number of tools are available to aid you in comprehending complex programs, most are expensive and time-consuming to learn. Aspect-oriented programming can be applied to a wide range of programming scenarios, including the comprehension and maintenance of legacy applications.
Reviews0
PriceFree
Views1103
Demystifying Extreme Programming: Just-in-time design
posted byvoltroninDevelopment
People who aren't familiar with XP are bothered by the concept of just-in-time (JIT) design -- designing and implementing what you know you need right now and not worrying about future design issues until absolutely necessary. While this approach might seem unwise or even reckless, XP advocate Roy Miller wraps up his series by showing you how safe and easy JIT design is -- and how it just might revolutionize the way you write code.
Reviews0
PriceFree
Views1271
Scaling Web services and applications with JavaGroups
posted byvoltroninDevelopment
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.
Reviews0
PriceFree
Views1224
Mash that trash -- Incremental compaction in the IBM JDK Garbage Collector
posted byvoltroninDevelopment
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.
Reviews0
PriceFree
Views1317
Diagnosing Java code: The case for static types
posted bymgmendozinDevelopment
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.
Reviews0
PriceFree
Views1186
Java programming code page considerations
posted bydevrelationsinDevelopment
Every Java programmer should be aware of the problem of code pages vs. Java Unicode. This article describes some pitfalls to avoid with code page and Unicode conversions and provides example fixes for the problems. Armed with this informaion, you should be able to create applications that are more truly platform and code page independent.
Reviews0
PriceFree
Views1288
Weighing in on Java native compilation
posted bymgmendozinDevelopment
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.
Reviews0
PriceFree
Views1261
Concurrent programming in the Java language
posted bykwigintinDevelopment
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.
Reviews0
PriceFree
Views1360
Exploiting ThreadLocal to enhance scalability
posted bykwigintinDevelopment
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.
Reviews0
PriceFree
Views2201
Working with preferences: the Preferences API Specification
posted bykwigintinDevelopment
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.
Reviews0
PriceFree
Views1846
Threading lightly : Reducing contention
posted bykwigintinDevelopment
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.
Reviews0
PriceFree
Views1169
Diagnosing Java Code : The Orphaned Thread bug pattern
posted bykwigintinDevelopment
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.
Reviews0
PriceFree
Views1069
Diagnosing Java Code: The Impostor Type bug pattern
posted bykwigintinDevelopment
When special tags in fields are used to distinguish between types of objects, errors are possible in which a tag mislabels the associated data -- a bug pattern known as the Impostor Type. This article examines the symptoms and causes of this bug, defines ways to prevent this error from occurring, and discusses a tempting hybrid implementation that does not use impostor types but, in the end, turns out to have many of the same weaknesses. Article includes code snipets.
Reviews0
PriceFree
Views1049
Improve the performance of your Java code
posted bykwigintinDevelopment
Many algorithms are expressed most concisely as tail-recursive methods. Compilers can automatically transform such methods into loops and thereby improve program performance, but this transformation is not required by the Java language specification, so not all JVMs will perform it. This means that tail-recursive methods in the Java language can result in unexpectedly large memory usage. This article demonstrates that dynamic compilation maintains the language's semantics while static compilation often doesn't. Learn why this matters and get a bit of code to help you determine whether your just-in-time (JIT) compiler can transform tail recursion on code while preserving semantics.
Reviews0
PriceFree
Views1662
How to lock down your Java code
posted bykwigintinDevelopment
You inevitably spend some part of your week crunching code that you didn't write, and for which you may not have the source. This beginner's guide to opening up and locking down Java code walks you through the essentials of disassembling, decompiling, and obfuscating Java code, using examples from popular tools such as Mocha, HoseMocha, jmangle, and JODE.
Reviews0
PriceFree
Views2045