Berkeley DB Java Edition Architecture [PDF]
9 days ago by jm
background white paper on the BDB-JE innards and design, from 2006. Still pretty accurate and good info
bdb-je
java
berkeley-db
bdb
design
databases
pdf
white-papers
trees
9 days ago by jm
Log4j2 Asynchronous Loggers for Low-Latency Logging - Apache Log4j 2
4 weeks ago by jm
implemented using the LMAX Disruptor library -- very impressive performance figures. I presume in real-world usage, these latencies are dwarfed by hardware costs, though
disruptor
coding
java
log4j
logging
async
performance
4 weeks ago by jm
Functional Reactive Programming in the Netflix API with RxJava
4 weeks ago by jm
Hmm, this seems nifty as a compositional building block for Java code to enable concurrency without thread-safety and sync problems.
concurrency
java
jvm
threads
thread-safety
coding
rx
frp
fp
functional-programming
reactive
functional
async
observable
Functional reactive programming offers efficient execution and composition by providing a collection of operators capable of filtering, selecting, transforming, combining and composing Observable's.
The Observable data type can be thought of as a "push" equivalent to Iterable which is "pull". With an Iterable, the consumer pulls values from the producer and the thread blocks until those values arrive. By contrast with the Observable type, the producer pushes values to the consumer whenever values are available. This approach is more flexible, because values can arrive synchronously or asynchronously.
4 weeks ago by jm
The useful JVM options
5 weeks ago by jm
a good reference, with lots of sample output. Not clear if it takes 1.6/1.7 differences into account, though
jvm
reference
java
ops
hotspot
command-line
5 weeks ago by jm
Reality, Reactivity, Relevance and Repeatability in Java Application Profiling
5 weeks ago by jm
this product from JInspired appears to support runtime profiling of java apps with < 5% performance impact
profiling
performance
java
coding
measurement
5 weeks ago by jm
JPL Institutional Coding Standard for the Java Programming Language
8 weeks ago by jm
From JPL's Laboratory for Reliable Software (LaRS). Great reference; there's some really useful recommendations here, and good explanations of familiar ones like "prefer composition over inheritance". Many are supported by FindBugs, too.
Here's the full list:
nasa
java
reference
guidelines
coding-standards
jpl
reliability
software
coding
oo
concurrency
findbugs
bugs
Here's the full list:
compile with checks turned on;
apply static analysis;
document public elements;
write unit tests;
use the standard naming conventions;
do not override field or class names;
make imports explicit;
do not have cyclic package and class dependencies;
obey the contract for equals();
define both equals() and hashCode();
define equals when adding fields;
define equals with parameter type Object;
do not use finalizers;
do not implement the Cloneable interface;
do not call nonfinal methods in constructors;
select composition over inheritance;
make fields private;
do not use static mutable fields;
declare immutable fields final;
initialize fields before use;
use assertions;
use annotations;
restrict method overloading;
do not assign to parameters;
do not return null arrays or collections;
do not call System.exit;
have one concept per line;
use braces in control structures;
do not have empty blocks;
use breaks in switch statements;
end switch statements with default;
terminate if-else-if with else;
restrict side effects in expressions;
use named constants for non-trivial literals;
make operator precedence explicit;
do not use reference equality;
use only short-circuit logic operators;
do not use octal values;
do not use floating point equality;
use one result type in conditional expressions;
do not use string concatenation operator in loops;
do not drop exceptions;
do not abruptly exit a finally block;
use generics;
use interfaces as types when available;
use primitive types;
do not remove literals from collections;
restrict numeric conversions;
program against data races;
program against deadlocks;
do not rely on the scheduler for synchronization;
wait and notify safely;
reduce code complexity
8 weeks ago by jm
dumping a JVM heap using gdb
9 weeks ago by jm
now this is a neat trick -- having been stuck having to flip to spares and do other antics while a long-running heap dump took place, this is a winner.
heap-dump
gdb
heap
jvm
java
via:peakscale
gcore
core
core-dump
debugging
Dumping a JVM’s heap is an extremely useful tool for debugging problems with a J2EE application. Unfortunately, when a JVM explodes, using the standard jmap tool can take an inordinate amount of time to execute for lots of different reasons. This leads to extended downtime when a heap dump is attempted and even then, jmap regularly fails.
This blog post is intended to outline an alternate method using [gdb] to achieve a heap dump that only requires mere seconds of additional downtime allowing the slow jmap process to happen once the application is back in service.
9 weeks ago by jm
Single Producer/Consumer lock free Queue step by step
9 weeks ago by jm
great dissection of Martin "Disruptor" Thompson's lock-free single-producer/single-consumer queue data structure, with benchmark results showing crazy speedups. This is particularly useful since it's a data structure that can be used to provide good lock-free speedups without adopting the entire Disruptor design pattern.
disruptor
coding
java
jvm
martin-thompson
lock-free
volatile
atomic
queue
data-structures
9 weeks ago by jm
totallylazy
11 weeks ago by jm
Clojure-style lazy functional collections (via QCon via Caro)
via:caro
collections
java
functional
lazy-loading
lazy-computation
lazy
clojure
11 weeks ago by jm
4 Things Java Programmers Can Learn from Clojure (without learning Clojure)
11 weeks ago by jm
'1. Use immutable values; 2. Do no work in the constructor; 3. Program to small interfaces; 4. Represent computation, not the world'. Strongly agreed with #1, and the others look interesting too
clojure
lisp
design
programming
coding
java
11 weeks ago by jm
Netflix Curator
zookeeper
java
netflix
distcomp
libraries
oss
open-source
distributed
11 weeks ago by jm
a high-level API that greatly simplifies using ZooKeeper. It adds many features that build on ZooKeeper and handles the complexity of managing connections to the ZooKeeper cluster and retrying operations. Some of the features are:
Automatic connection management: There are potential error cases that require ZooKeeper clients to recreate a connection and/or retry operations. Curator automatically and transparently (mostly) handles these cases.
Cleaner API: simplifies the raw ZooKeeper methods, events, etc.; provides a modern, fluent interface
Recipe implementations (see Recipes): Leader election, Shared lock, Path cache and watcher, Distributed Queue, Distributed Priority Queue
11 weeks ago by jm
Making Really Executable Jars
12 weeks ago by jm
Who knew? you can make a runnable JAR file!
jars
via:netflix
shell
java
executable
chmod
zip
hacks
command-line
cli
There has long been a hack known in some circles, but not widely known, to make jars really executable, in the chmod +x sense. The hack takes advantage of the fact that jar files are zip files, and zip files allow arbitrary cruft to be prepended to the zip file itself (this is how self-extracting zip files work).
12 weeks ago by jm
Denominator: A Multi-Vendor Interface for DNS
12 weeks ago by jm
the latest good stuff from Netflix.
dns
netflix
java
tools
ops
route53
aws
ultradns
dynect
Denominator is a portable Java library for manipulating DNS clouds. Denominator has pluggable back-ends, initially including AWS Route53, Neustar Ultra, DynECT, and a mock for testing. We also ship a command line version so it's easy for anyone to try it out.
The reason we built Denominator is that we are working on multi-region failover and traffic sharing patterns to provide higher availability for the streaming service during regional outages caused by our own bugs and AWS issues. To do this we need to directly control the DNS configuration that routes users to each region and each zone. When we looked at the features and vendors in this space we found that we were already using AWS Route53, which has a nice API but is missing some advanced features; Neustar UltraDNS, which has a SOAP based API; and DynECT, which has a REST API that uses a quite different pseudo-transactional model. We couldn’t find a Java based API that grouped together common set of capabilities that we are interested in, so we created one. The idea is that any feature that is supported by more than one vendor API is the highest common denominator, and that functionality can be switched between vendors as needed, or in the event of a DNS vendor outage.
12 weeks ago by jm
Are volatile reads really free?
12 weeks ago by jm
Marc Brooker with some good test data:
volatile
concurrency
jvm
performance
java
marc-brooker
It appears as though reads to volatile variables are not free in Java on x86, or at least on the tested setup. It's true that the difference isn't so huge (especially for the read-only case) that it'll make a difference in any but the more performance sensitive case, but that's a different statement from free.
12 weeks ago by jm
guava-retrying
february 2013 by jm
Apache-licensed open source java lib to implement retrying behaviour cleanly.
retries
retrying
resiliency
fault-tolerance
java
open-source
guava
a general purpose method for retrying arbitrary Java code with specific stop, retry, and exception handling capabilities that are enhanced by Guava's predicate matching. It also includes an exponential backoff WaitStrategy that might be useful for situations where more well-behaved service polling is preferred.
february 2013 by jm
Jetty-9 goes fast with Mechanical Sympathy
february 2013 by jm
This is very cool! Applying Mechanical Sympathy optimization techniques to Jetty, specifically: "False sharing" on the BlockingArrayQueue data structure resolved; a new ArrayTernaryTrie data structure to improve header field storage, making it faster to build. look up, efficient on RAM, cheap to GC, and more cache-friendly than a traditional trie; and a branchless hex-to-byte conversion statement. The results are a 30%-faster microbenchmark on amd64, with 50% less Young Gen garbage collections. Lovely to see low-level infrastructure libs like Jetty getting this kind of optimization.
jetty
java
mechanical-sympathy
optimization
coding
tries
february 2013 by jm
java - Given that HashMaps in jdk1.6 and above cause problems with multi-threading, how should I fix my code - Stack Overflow
february 2013 by jm
Massive Java concurrency fail in recent 1.6 and 1.7 JDK releases -- the java.util.HashMap type now spin-locks on an AtomicLong in its constructor.
Here's the response from the author: 'I'll acknowledge right up front that the initialization of hashSeed is a bottleneck but it is not one we expected to be a problem since it only happens once per Hash Map instance. For this code to be a bottleneck you would have to be creating hundreds or thousands of hash maps per second. This is certainly not typical. Is there really a valid reason for your application to be doing this? How long do these hash maps live?'
Oh dear. Assumptions of "typical" like this are not how you design a fundamental data structure. fail. For now there is a hacky reflection-based workaround, but this is lame and needs to be fixed as soon as possible. (Via cscotta)
java
hashmap
concurrency
bugs
fail
security
hashing
jdk
via:cscotta
Here's the response from the author: 'I'll acknowledge right up front that the initialization of hashSeed is a bottleneck but it is not one we expected to be a problem since it only happens once per Hash Map instance. For this code to be a bottleneck you would have to be creating hundreds or thousands of hash maps per second. This is certainly not typical. Is there really a valid reason for your application to be doing this? How long do these hash maps live?'
Oh dear. Assumptions of "typical" like this are not how you design a fundamental data structure. fail. For now there is a hacky reflection-based workaround, but this is lame and needs to be fixed as soon as possible. (Via cscotta)
february 2013 by jm
Extreme Performance with Java - Charlie Hunt [slides, PDF]
january 2013 by jm
presentation slides for Charlie Hunt's 2012 QCon presentation, where he discusses 'what you need to know about a modern JVM in order
to be effective at writing a low latency Java application'. The talk video is at http://www.infoq.com/presentations/Extreme-Performance-Java
low-latency
charlie-hunt
performance
java
jvm
presentations
qcon
slides
pdf
to be effective at writing a low latency Java application'. The talk video is at http://www.infoq.com/presentations/Extreme-Performance-Java
january 2013 by jm
A Non-Blocking HashTable by Dr. Cliff Click : programming
january 2013 by jm
Proggit discovers the NonBlockingHashMap. This comment from Boundary's cscotta is particularly interesting: "The code is intricate and curiously-formatted, but NBHM is quite excellent. The majority of our analytics platform is backed by NBHMs updated rapidly in parallel. Cliff's a great, friendly, approachable guy; if you have any specific questions about the approaches or implementation, he may be happy to answer."
data-structures
algorithms
non-blocking
concurrency
threading
multicore
cliff-click
azul
maps
java
boundary
january 2013 by jm
airlift/airline · GitHub
january 2013 by jm
Annotations-based git-like CLI helper for Java
git
cli
java
january 2013 by jm
Cliff Click in "A JVM Does What?"
december 2012 by jm
interesting YouTubed presentation from Azul's Cliff Click on some java/JVM innards
presentation
concurrency
jvm
video
java
youtube
cliff-click
december 2012 by jm
low-gc-membuffers
december 2012 by jm
"This project aims at creating a simple efficient building block for "Big Data" libraries, applications and frameworks; thing that can be used as an in-memory, bounded queue with opaque values (sequence of JDK primitive values): insertions at tail, removal from head, single entry peeks), and that has minimal garbage collection overhead. Insertions and removals are as individual entries, which are sub-sequences of the full buffer.
GC overhead minimization is achieved by use of direct ByteBuffers (memory allocated outside of GC-prone heap); and bounded nature by only supporting storage of simple primitive value (byte, `long') sequences where size is explicitly known.
Conceptually memory buffers are just simple circular buffers (ring buffers) that hold a sequence of primitive values, bit like arrays, but in a way that allows dynamic automatic resizings of the underlying storage. Library supports efficient reusing and sharing of underlying segments for sets of buffers, although for many use cases a single buffer suffices."
gc
java
jvm
bytebuffer
GC overhead minimization is achieved by use of direct ByteBuffers (memory allocated outside of GC-prone heap); and bounded nature by only supporting storage of simple primitive value (byte, `long') sequences where size is explicitly known.
Conceptually memory buffers are just simple circular buffers (ring buffers) that hold a sequence of primitive values, bit like arrays, but in a way that allows dynamic automatic resizings of the underlying storage. Library supports efficient reusing and sharing of underlying segments for sets of buffers, although for many use cases a single buffer suffices."
december 2012 by jm
Efficient concurrent long set and map
Some good stuff in the linked blog posts about Clojure's PersistentHashMap and PersistentVector data structures, too.
arrays
java
tries
data-structures
persistent
clojure
concurrent
set
map
december 2012 by jm
An ordered set and map data structure and algorithm for long keys and values, supporting concurrent reads by multiple threads and updates by a single thread.
Some good stuff in the linked blog posts about Clojure's PersistentHashMap and PersistentVector data structures, too.
december 2012 by jm
Everything I Ever Learned About JVM Performance Tuning @Twitter
december 2012 by jm
presentation by Attila Szegedi of Twitter from last year. Some good tips here, well-presented
tuning
jvm
java
gc
cms
presentations
slides
twitter
december 2012 by jm
_The Pauseless GC Algorithm_ [pdf]
december 2012 by jm
Paper from USENIX VEE '05, by Cliff Click, Gil Tene, and Michael Wolf of Azul Systems, describing some details of the Azul secret sauce (via b6n)
via:b3n
azul
gc
jvm
java
usenix
papers
december 2012 by jm
Memory Barriers/Fences
november 2012 by jm
Martin Thompson with a good description of the x86 memory barrier model and how it interacts with Java's JSR-133 memory model
architecture
hardware
programming
java
concurrency
volatile
jsr-133
november 2012 by jm
drip
(via HN)
java
command-line
tools
startup
speed
november 2012 by jm
Unlike other tools intended to solve the JVM startup problem (e.g. Nailgun, Cake), Drip does not use a persistent JVM. There are many pitfalls to using a persistent JVM, which we discovered while working on the Cake build tool for Clojure. The main problem is that the state of the persistent JVM gets dirty over time, producing strange errors and requiring liberal use of cake kill whenever any error is encountered, just in case dirty state is the cause.
Instead of going down this road, Drip uses a different strategy. It keeps a fresh JVM spun up in reserve with the correct classpath and other JVM options so you can quickly connect and use it when needed, then throw it away. Drip hashes the JVM options and stores information about how to connect to the JVM in a directory with the hash value as its name.
(via HN)
november 2012 by jm
Java tip: How to get CPU, system, and user time for benchmarking
november 2012 by jm
a neat MXBean trick to get per-thread CPU usage in a running JVM (via Tatu Saloranta)
java
jvm
monitoring
cpu
metrics
threads
november 2012 by jm
ElementCostInDataStructures
october 2012 by jm
"The cost per element in major data structures offered by Java and Guava (r11)]." A very useful reference!
java
coding
guava
reference
memory
cost
performance
data-structures
Ever wondered what's the cost of adding each entry to a HashMap? Or one new element in a TreeSet? Here are the answers: the cost per-entry for each well-known structure in Java and Guava. You can use this to estimate the cost of a structure, like this: if the per-entry cost of a structure is 32 bytes, and your structure contains 1024 elements, the structure's footprint will be around 32 kilobytes. Note that non-tree mutable structures are amortized (adding an element might trigger a resize, and be expensive, otherwise it would be cheap), making the measurement of the "average per element cost" measurement hard, but you can expect that the real answers are close to what is reported below.
october 2012 by jm
Cliff Click's 2008 JavaOne talk about the NonBlockingHashTable
october 2012 by jm
I'm a bit late to this data structure -- highly scalable, nearly lock-free, benchmarks very well (except with the G1 GC): http://edwwang.com/blog/2012/02/10/concurrent-hashmap-benchmark/ .
Having said that, it doesn't cope well with frequently-changing unique keys: http://sourceforge.net/tracker/?func=detail&aid=3563980&group_id=194172&atid=948362 .
More background at: http://www.azulsystems.com/blog/cliff/2007-03-26-non-blocking-hashtable and http://www.azulsystems.com/blog/cliff/2007-04-01-non-blocking-hashtable-part-2
This was used in Cassandra for a while, although I think the above bug may have caused its removal?
nonblockinghashtable
data-structures
hashmap
concurrency
scaling
java
jvm
Having said that, it doesn't cope well with frequently-changing unique keys: http://sourceforge.net/tracker/?func=detail&aid=3563980&group_id=194172&atid=948362 .
More background at: http://www.azulsystems.com/blog/cliff/2007-03-26-non-blocking-hashtable and http://www.azulsystems.com/blog/cliff/2007-04-01-non-blocking-hashtable-part-2
This was used in Cassandra for a while, although I think the above bug may have caused its removal?
october 2012 by jm
SnapTree benchmarks
september 2012 by jm
nice concurrent Map data structure for the JVM; beats out ConcurrentHashMap, ConcurrentLinkedHashMap from guava, ConcurrentSkipListMap under both CMS and G1 garbage collectors.
concurrency
benchmarks
hashmap
map
data-structures
java
jvm
snaptree
september 2012 by jm
Locks & Condition Variables - Latency Impact
locking
concurrency
java
jvm
signalling
locks
linux
threading
september 2012 by jm
Firstly, this is 3 orders of magnitude greater latency than what I illustrated in the previous article using just memory barriers to signal between threads. This cost comes about because the kernel needs to get involved to arbitrate between the threads for the lock, and then manage the scheduling for the threads to awaken when the condition is signalled. The one-way latency to signal a change is pretty much the same as what is considered current state of the art for network hops between nodes via a switch. It is possible to get ~1µs latency with InfiniBand and less than 5µs with 10GigE and user-space IP stacks.
Secondly, the impact is clear when letting the OS choose what CPUs the threads get scheduled on rather than pinning them manually. I've observed this same issue across many use cases whereby Linux, in default configuration for its scheduler, will greatly impact the performance of a low-latency system by scheduling threads on different cores resulting in cache pollution. Windows by default seems to make a better job of this.
</blockqote>
september 2012 by jm
Martin "Disruptor" Thompson's Single Writer Principle
september 2012 by jm
Contains these millisecond estimates for highly-contended inter-thread signalling when incrementing a 64-bit counter in java:
Undoubtedly not realistic for a lot of cases, but it's still useful for order-of-magnitude estimates of locking cost. Bottom line: don't lock if you can avoid it, even with 'volatile' or AtomicFoo types.
java
jvm
performance
coding
concurrency
threading
cas
locking
One Thread 300<br>
One Thread with Memory Barrier 4,700<br>
One Thread with CAS 5,700<br>
Two Threads with CAS 18,000<br>
One Thread with Lock 10,000<br>
Two Threads with Lock 118,000<br>
Undoubtedly not realistic for a lot of cases, but it's still useful for order-of-magnitude estimates of locking cost. Bottom line: don't lock if you can avoid it, even with 'volatile' or AtomicFoo types.
september 2012 by jm
HotSpot JVM garbage collection options cheat sheet (v2)
september 2012 by jm
'In this article I have collected a list of options related to GC tuning in JVM. This is not a comprehensive list, I have only collected options which I use in practice (or at least understand why I may want to use them).
Compared to previous version a few useful diagnostic options was added. Additionally section for G1 specific options was introduced.'
hotspot
jvm
coding
gc
java
performance
Compared to previous version a few useful diagnostic options was added. Additionally section for G1 specific options was introduced.'
september 2012 by jm
Striped (Guava: Google Core Libraries for Java 13.0.1 API)
september 2012 by jm
Nice piece of Guava concurrency infrastructure in the latest release:
locking
concurrency
java
guava
semaphores
coding
via:twitter
A striped Lock/Semaphore/ReadWriteLock. This offers the underlying lock striping similar to that of ConcurrentHashMap in a reusable form, and extends it for semaphores and read-write locks. Conceptually, lock striping is the technique of dividing a lock into many stripes, increasing the granularity of a single lock and allowing independent operations to lock different stripes and proceed concurrently, instead of creating contention for a single lock.<br>
The guarantee provided by this class is that equal keys lead to the same lock (or semaphore), i.e. if (key1.equals(key2)) then striped.get(key1) == striped.get(key2) (assuming Object.hashCode() is correctly implemented for the keys). Note that if key1 is not equal to key2, it is not guaranteed that striped.get(key1) != striped.get(key2); the elements might nevertheless be mapped to the same lock. The lower the number of stripes, the higher the probability of this happening.<br>
Prior to this class, one might be tempted to use Map<K, Lock>, where K represents the task. This maximizes concurrency by having each unique key mapped to a unique lock, but also maximizes memory footprint. On the other extreme, one could use a single lock for all tasks, which minimizes memory footprint but also minimizes concurrency. Instead of choosing either of these extremes, Striped allows the user to trade between required concurrency and memory footprint. For example, if a set of tasks are CPU-bound, one could easily create a very compact Striped<Lock> of availableProcessors() * 4 stripes, instead of possibly thousands of locks which could be created in a Map<K, Lock> structure.
september 2012 by jm
Rootbeer
gpu
java
coding
cuda
compiler
august 2012 by jm
The Rootbeer GPU Compiler makes it easy to use Graphics Processing Units from
within Java.
Rootbeer is more advanced that CUDA or OpenCL Java Language Bindings. With
bindings the developer must serialize complex graphs of objects into arrays
of primitive types. With Rootbeer this is done automatically. Also with language
bindings, the developer must write the GPU kernel in CUDA or OpenCL. With
Rootbeer a static analysis of the Java Bytecode is done (using Soot) and CUDA
code is automatically generated.
[...] All of the familar Java code you have been writing can be
executed on the GPU.
august 2012 by jm
Dropwizard
may 2012 by jm
'a Java framework for developing ops-friendly, high-performance, RESTful web services. Developed by Yammer to power their JVM-based backend services, Dropwizard pulls together stable, mature libraries from the Java ecosystem into a simple, lightweight package that lets you focus on getting things done. Dropwizard has out-of-the-box support for sophisticated configuration, application metrics, logging, operational tools, and much more, allowing you and your team to ship a production-quality HTTP+JSON web service in the shortest time possible.' From Coda Hale/Yammer; includes Guava, Jetty, Jersey, Jackson, Metrics, slf4j. Pretty good baseline to start any new Java service with....
framework
http
java
rest
web
jersey
guava
jackson
jetty
json
web-services
yammer
may 2012 by jm
Chronon DVR for Java
may 2012 by jm
"record entire execution of your Java app; play it back on any machine". Other features: time-travelling debugger -- step backwards, jump to any point in execution, designed for long running programs; post-execution logging -- add log statements after the program has run, and see what it would have logged. Looks extremely nifty, but I wonder how big those recording files get...
debugging
via:peakscale
eclipse
chronon
dvr
java
coding
logging
jvm
may 2012 by jm
InfoQ: Lock-free Algorithms
april 2012 by jm
Michael Barker and Martin Thompson's talk at the last QCon on the LMAX Disruptor, and other nifty lock-free techniques and patterns. 'Martin Thompson and Michael Barker explain how Intel x86_64 processors and their memory model work, along with low-level techniques that help creating lock-free software.'
lock-free
locking
mutexes
algorithms
lmax
disruptor
infoq
slides
presentations
qcon
java
april 2012 by jm
Secret HotSpot option improving GC pauses on large heaps
april 2012 by jm
via Toby DiPasquale. nice tip
java
jvm
gc
performance
hotspot
undocumented
april 2012 by jm
Google Guava BloomFIlter
march 2012 by jm
neat, Guava now has a builtin Bloom filter implementation using the murmur hash. that'll potentially save a little hassle in the future
guava
coding
java
bloom-filters
data-structures
sets
march 2012 by jm
Cloud Architecture Tutorial - Platform Component Architecture (2of3)
march 2012 by jm
Amazing stuff from Adrian Cockroft at last week's QCon. Faceted object model, lots of Cassandra automation
cassandra
api
design
oo
object-model
java
adrian-cockroft
slides
qcon
scaling
aws
netflix
march 2012 by jm
twitter/jvmgcprof - GitHub
february 2012 by jm
'gcprof is a simple utility for profile allocation and garbage collection activity in the JVM [...] Profile allocation and garbage collection activity in the JVM. The gcprof command runs a java command under profiling. Allocation and collection statistics are printed periodically. If -n or -no are provided, statistics are also reported in terms of the given application metric. Total allocation, allocation rate, and a survival histogram is given. The intended use for this tool is twofold: (1) monitor and test garbage allocation and GC behavior, and (2) inform GC tuning.'
gc
java
performance
twitter
jvm
tools
february 2012 by jm
MapReduce Patterns, Algorithms, and Use Cases
february 2012 by jm
'I digested a number of MapReduce patterns and algorithms to give a systematic view of the different techniques that can be found in the web or scientific articles. Several practical case studies are also provided. All descriptions and code snippets use the standard Hadoop’s MapReduce model with Mappers, Reduces, Combiners, Partitioners, and sorting.'
algorithms
hadoop
java
mapreduce
patterns
distcomp
february 2012 by jm
Scott Andreas - Garbage, Garbage Everywhere [slides]
december 2011 by jm
'GC Strategies for Event Processing Systems on the JVM'
gc
java
jvm
event-streams
event-processing
tuning
slides
presentations
scott-andreas
performance
december 2011 by jm
eclim (eclipse + vim)
november 2011 by jm
'Eclim is less of an application and more of an integration of two great projects. The first, Vim, is arguably one of the best text editors in existence. The second, Eclipse, provides many great tools for development in various languages. Each provides many features that can increase developer productivity, but both still leave something to be desired. Vim lacks native Java support and many of the advanced features available in Eclipse. Eclipse, on the other hand, still requires the use of the mouse for many things, and when compared to Vim, provides a less than ideal interface for editing text. That is where eclim comes into play. Instead of trying to write an IDE in Vim or a Vim editor in Eclipse, eclim provides an Eclipse plug-in that exposes Eclipse features through a server interface, and a set of Vim plug-ins that communicate with Eclipse over that interface. This functionality can be leveraged in three primary ways, as illustrated below.'
eclipse
java
programming
software
vim
editors
refactoring
november 2011 by jm
Avoiding Full GCs in HBase with MemStore-Local Allocation Buffers
october 2011 by jm
Fascinating. Evading the Java GC by reimplementing a slab allocator, basically
memory
allocation
java
gc
jvm
hbase
memstore
via:dehora
slab-allocator
october 2011 by jm
peak6/scala-ssh-shell - GitHub
october 2011 by jm
'Backdoor that gives you a scala shell over ssh on your jvm. The shell is not sandboxed, anyone access the shell can touch anything in the jvm and do anything the jvm can do including modifying and deleting files, etc.' nifty!
scala
ssh
repl
interactive
debugging
coding
jvm
java
october 2011 by jm
Scala: The Static Language that Feels Dynamic
june 2011 by jm
a good intro from Bruce Eckel. We need a good excuse to deploy some Scala ;)
scala
actors
java
language
programming
jvm
coding
june 2011 by jm
InfoQ: Guardian.co.uk Switching from Java to Scala
april 2011 by jm
pretty good thumbs-up account
scala
java
guardian
coding
from delicious
april 2011 by jm
Akka
march 2011 by jm
'platform for event-driven, scalable, and fault-tolerant architectures on the JVM' .. Actor-based, 'let-it-crash', Apache-licensed, Java and Scala APIs, remote Actors, transactional memory -- looks quite nice
scala
java
concurrency
scalability
apache
akka
actors
erlang
fault-tolerance
events
from delicious
march 2011 by jm
Contracts for Java
february 2011 by jm
'Preconditions, postconditions, and invariants are added as Java boolean expressions inside annotations.' nice
java
google
coding
open-source
contracts
eiffel
preconditions
invariants
annotations
from delicious
february 2011 by jm
Java Hangs When Converting 2.2250738585072012e-308
february 2011 by jm
ie. the same value as the PHP bug. 'Konstantin [Pressier] reported this problem to Oracle three weeks ago, but is still waiting for a reply.' good job, Oracle!
oracle
fail
security
java
bugs
floating-point
from delicious
february 2011 by jm
why James Gosling left Oracle
september 2010 by jm
1. made him take an effective pay cut; 2. removed decision authority on Java; 3. he felt Oracle was "ethically challenged". also: 'he felt the hand of Larry Ellison in nearly all the decisions affecting Java'; “He’s the kind of person that just gives me the creeps,” he said. “All of the senior people at Sun got screwed compensation-wise. Their job titles may have been the same, but their ability to decide anything was just gone.” he doesn't pull any punches. oh dear, this is all adding up...
java
oracle
opensource
sun
james-gosling
larry-ellison
gossip
from delicious
september 2010 by jm
Thousands of Threads and Blocking I/O [PDF]
july 2010 by jm
classic presentation from Paul Tyma of Mailinator regarding the java.nio (event-driven, non-threaded) vs java.io (threaded) model of server concurrency, backing up the scalability of threads on modern JVMs
java
async
io
jvm
linux
performance
scalability
threading
threads
server
nio
paul-tyma
mailinator
from delicious
july 2010 by jm
Lift View First
february 2010 by jm
explaining Lift's code-free "display only" templating system. I like it. Very similar concept to WebMake's "scraped templates": http://webmake.taint.org/doc/scraping.html , nearly 10 years old now!
java
scala
lift
templates
templating
scraping
from delicious
february 2010 by jm
Play framework
december 2009 by jm
'a Java framework made by Web developers. Discover a clean alternative to bloated enterprise Java stacks. Play focuses on developer productivity and targets RESTful architectures.'
java
rails
webdev
mvc
webapps
play
playframework
from delicious
december 2009 by jm
Vlnt
november 2009 by jm
'A variable-length format for positive integers is defined where the high-order bit of each byte indicates whether more bytes remain to be read. The low-order seven bits are appended as increasingly more significant bits in the resulting integer value. Thus values from zero to 127 may be stored in a single byte, values from 128 to 16,383 may be stored in two bytes, and so on.' UTF8-ish compression, used in Avro
utf8
compression
utf
lucene
avro
hadoop
java
fomats
numeric
from delicious
november 2009 by jm
Why WeakHashMap Sucks
september 2009 by jm
'SoftReferences are the cheap, crappy caching mechanism [...] perfect for when you'd like your cache to be cleared at random times and in random order.'
softreferences
weakreferences
weak
references
gc
java
jvm
caching
hash
memory
collections
vm
weakhashmap
via:spyced
from delicious
september 2009 by jm
Next Generation Java Programming Style
august 2009 by jm
a Reddit-friendly 8-point list of new idioms for Java code in a more functional style. not sure about a couple of these, but another couple get my +1
erlang
via:janl
coding
java
oop
style
fluent-interfaces
final
encapsulation
august 2009 by jm
related tags
actors ⊕ adrian-cockroft ⊕ akka ⊕ algorithms ⊕ allocation ⊕ annotations ⊕ apache ⊕ api ⊕ architecture ⊕ arrays ⊕ async ⊕ atomic ⊕ avro ⊕ aws ⊕ azul ⊕ bdb ⊕ bdb-je ⊕ benchmarks ⊕ berkeley-db ⊕ bloom-filters ⊕ boundary ⊕ bugs ⊕ bytebuffer ⊕ c10k ⊕ caching ⊕ cas ⊕ cassandra ⊕ charlie-hunt ⊕ chmod ⊕ chronon ⊕ cli ⊕ cliff-click ⊕ clojure ⊕ cms ⊕ coding ⊕ coding-standards ⊕ collections ⊕ command-line ⊕ compiler ⊕ compression ⊕ concurrency ⊕ concurrent ⊕ contracts ⊕ core ⊕ core-dump ⊕ cost ⊕ cpu ⊕ cuda ⊕ data-structures ⊕ databases ⊕ debugging ⊕ design ⊕ disruptor ⊕ distcomp ⊕ distributed ⊕ dns ⊕ dvr ⊕ dynect ⊕ ec2 ⊕ eclipse ⊕ editors ⊕ eiffel ⊕ encapsulation ⊕ erlang ⊕ event-processing ⊕ event-streams ⊕ events ⊕ executable ⊕ fail ⊕ fault-tolerance ⊕ final ⊕ findbugs ⊕ floating-point ⊕ fluent-interfaces ⊕ fomats ⊕ fp ⊕ framework ⊕ frp ⊕ functional ⊕ functional-programming ⊕ gc ⊕ gcore ⊕ gdb ⊕ git ⊕ google ⊕ gossip ⊕ gpu ⊕ guardian ⊕ guava ⊕ guidelines ⊕ hacks ⊕ hadoop ⊕ hardware ⊕ hash ⊕ hashing ⊕ hashmap ⊕ hbase ⊕ heap ⊕ heap-dump ⊕ hotspot ⊕ http ⊕ infoq ⊕ interactive ⊕ invariants ⊕ io ⊕ jackson ⊕ james-gosling ⊕ jars ⊕ java ⊖ jdk ⊕ jersey ⊕ jetty ⊕ jpl ⊕ json ⊕ jsr-133 ⊕ jvm ⊕ language ⊕ larry-ellison ⊕ lazy ⊕ lazy-computation ⊕ lazy-loading ⊕ libraries ⊕ lift ⊕ linux ⊕ lisp ⊕ lmax ⊕ lock-free ⊕ locking ⊕ locks ⊕ log4j ⊕ logging ⊕ low-latency ⊕ lucene ⊕ mailinator ⊕ map ⊕ mapreduce ⊕ maps ⊕ marc-brooker ⊕ martin-thompson ⊕ measurement ⊕ mechanical-sympathy ⊕ memory ⊕ memstore ⊕ metrics ⊕ monitoring ⊕ multicore ⊕ mutexes ⊕ mvc ⊕ nasa ⊕ netflix ⊕ netty ⊕ nio ⊕ non-blocking ⊕ nonblockinghashtable ⊕ numeric ⊕ object-model ⊕ observable ⊕ oo ⊕ oop ⊕ open-source ⊕ opensource ⊕ ops ⊕ optimization ⊕ oracle ⊕ oss ⊕ papers ⊕ patterns ⊕ paul-tyma ⊕ pdf ⊕ performance ⊕ persistent ⊕ play ⊕ playframework ⊕ preconditions ⊕ presentation ⊕ presentations ⊕ profiling ⊕ programming ⊕ qcon ⊕ queue ⊕ rails ⊕ reactive ⊕ refactoring ⊕ reference ⊕ references ⊕ reliability ⊕ repl ⊕ resiliency ⊕ rest ⊕ retries ⊕ retrying ⊕ route53 ⊕ rx ⊕ scala ⊕ scalability ⊕ scaling ⊕ scott-andreas ⊕ scraping ⊕ security ⊕ semaphores ⊕ server ⊕ set ⊕ sets ⊕ shell ⊕ signalling ⊕ slab-allocator ⊕ slides ⊕ snaptree ⊕ softreferences ⊕ software ⊕ speed ⊕ ssh ⊕ startup ⊕ style ⊕ sun ⊕ templates ⊕ templating ⊕ thread-safety ⊕ threading ⊕ threads ⊕ tools ⊕ trees ⊕ tries ⊕ tuning ⊕ twitter ⊕ ultradns ⊕ undocumented ⊕ urban-airship ⊕ usenix ⊕ utf ⊕ utf8 ⊕ via:b3n ⊕ via:caro ⊕ via:cscotta ⊕ via:dehora ⊕ via:janl ⊕ via:netflix ⊕ via:peakscale ⊕ via:spyced ⊕ via:twitter ⊕ video ⊕ vim ⊕ vm ⊕ volatile ⊕ weak ⊕ weakhashmap ⊕ weakreferences ⊕ web ⊕ web-services ⊕ webapps ⊕ webdev ⊕ white-papers ⊕ yammer ⊕ youtube ⊕ zip ⊕ zookeeper ⊕Copy this bookmark: