RSS feed [root] /weblog /java




login:

password:

title search:




 


Thu Apr 06 06:33:22 GMT 2023

java



(google search) (amazon search)
second
download zip of files only

Sat Feb 05 13:05:36 GMT 2022 From /weblog/java/concurrency

primitive


Benchmark for LongAddr - http://concurrencyfreaks.blogspot.hk[..]gspot.hk/2013/09/longadder-and-dclc.html

If there is a concern about wasting too many memory for Atomic* wrapper class, we may consider changed to use AtomicFieldUpdater to update primitive directly - http://normanmaurer.me[..]/Lesser-known-concurrent-classes-Part-1/

What exactly is 'tearing'? - https://www.reddit.com[..]comments/rsr8az/what_exactly_is_tearing/

(google search) (amazon search)


Tue Feb 01 13:48:54 GMT 2022 From /weblog/java/fundamental

language


Mirandas, bridges, overpasses - https://medium.com[..]mirandas-bridges-overpasses-50b25655bb4c

Understanding Java Compilation: From Bytecodes to Machine Code in the JVM - https://www.azul.com[..]mpilation-from-bytecodes-to-machine-code

(google search) (amazon search)


Tue Feb 01 13:21:36 GMT 2022 From /weblog/java/network

IO


2 nice blog about create and unit test custom IO stream - http://www.mattryall.net/article.cgi?id=286 http://www.mattryall.net/article.cgi?id=285

Java sockets I/O: blocking, non-blocking and asynchronous - https://www.linkedin.com[..]n-blocking-asynchronous-aliaksandr-liakh

(google search) (amazon search)


Sun Jan 09 13:41:28 GMT 2022 From /weblog/java/features

IO


Watch service, watch if directory changed - http://www.javacodegeeks.com/2012/02/java-7-watchservice.html

Tips of using bytebuffer - http://worldmodscode.wordpress.com[..]2/14/the-java-bytebuffer-a-crash-course/

path : ..\.\Java.txt
absolute path : C:\Users\WINDOWS 8\workspace\Demo\..\.\Java.txt
canonical path : C:\Users\WINDOWS 8\workspace\Java.txt

Read more: http://javarevisited.blogspot.com[..]getcanonicalpath-java.html#ixzz3A8Zya6YG

Jump to a position of a file, inputstream.skip() is faster than reader.skip(), and reader.skip() is faster than randomAccessFile.

Java & Files: An Introduction - https://www.marcobehler.com/guides/java-files

Modern file input/output with Java: Going fast with NIO and NIO.2 - https://blogs.oracle.com[..]2-buffers-channels-async-future-callback

(google search) (amazon search)


Wed Jan 05 13:07:30 GMT 2022 From /weblog/java/tools

dev


Generate a diff page forother toreview in HG - https://blogs.oracle.com/bondolo/entry/how_i_generate_a_webrev

Introduce a tool to keep IDE code and webcontainer code in sync - http://techblog.bozho.net/?p=1246

Auto complete of IDEA is pretty cool - http://maciejwalkowiak.pl[..]aster-with-intellij-idea-live-templates/

use ctrl-w to select text - http://paulhammant.com[..]ins-ides-their-best-feature-is-control-w

7-new-tools-java-developers-should-know - http://blog.takipi.com/7-new-tools-java-developers-should-know/

Buggy App is a simple java application that simulates different performance problems like Memory Leak, OutOfMemoryError, CPU spike, thread leak, StackOverflowError, deadlock, unresponsiveness, … - https://blog.fastthread.io[..]buggy-app-simulate-performance-problems/

13 Best Java Decompilers for Download and Online Use for Java Developers - https://www.javaprogramto.com/2021/11/java-decompiler.html

Generate fake data - http://www.datafaker.net/

(google search) (amazon search)


Mon Dec 27 14:55:27 GMT 2021 From /weblog/java/fundamental

finalization


http://java.sun.com[..]r/technicalArticles/javase/finalization/

Pitfall and solution of implementing finalize(), if you really need it http://www.hpl.hp.com[..]ns_Boehm/misc_slides/java_finalizers.pdf

Optimization-robust finalization - http://www.open-std.org[..]C1/SC22/WG21/docs/papers/2007/n2261.html

An example showing that memory leak caused by finalize() - http://vanillajava.blogspot.com.au[..].com.au/2012/12/object-resurrection.html

Beware the Finalizer queue, and java.lang.ref.Finalizer object - https://plumbr.eu/blog/debugging-to-understand-finalizer

try { return } finally {} - https://www.pixelstech.net[..]892842-try-%7B-return-%7D-finally-%7B%7D

(google search) (amazon search)


Sun Dec 19 13:06:15 GMT 2021 From /weblog/java/performance

leak


List some common causes of memory leak in application restart. - http://www.patrickpeak.com[..]/Weblog/your_web_app_is_leaking#comments http://blog.dynatrace.com[..]/20/the-top-java-memory-problems-part-1/

Incorrect use of threadlocal - http://www.szegedi.org/articles/memleak.html

Memory leak if load JDBC class incorrectly - http://www.szegedi.org/articles/memleak2.html

Serialization and ResourceBundle issue from core library (fixed) - http://www.szegedi.org/articles/memleak3.html

PermHeap bloat in and only in server VM - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4957990

String.subString() still held a big big char[] - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4513622

One pitfall of URLClassLoader, it cause leak from classloader, which is not obvious from the code - http://www.zeroturnaround.com/blog/rjc201/

Steps of finding out a memory leak by native code - http://web.archiveorange.com[..]e/v/Dp7Rf33tij5BFBNRpVja#YnJRjM4IVyt54TV

Interesting Garbage Collection Patterns - https://blog.gceasy.io[..]interesting-garbage-collection-patterns/

(google search) (amazon search)


Thu Dec 02 01:03:52 GMT 2021 From /weblog/java/performance

option list


java -XX:+PrintFlagsFinal -version | findstr HeapSize , find out actual Xmx default in bytes - https://www.edureka.co[..]default-parameters-of-xms-and-xmx-in-jvm

-XX:+PerfDisableSharedMem , prevent locking by sharedmem in linux - http://www.evanjones.ca/jvm-mmap-pause.html

How linkedin turn the GC - http://engineering.linkedin.com[..]ughput-and-low-latency-java-applications

Using generational & concurrent GC collector - http://www.javacodegeeks.com[..]/04/ibm-jvm-tuning-gencon-gc-policy.html

Full VM option list : http://blogs.sun.com/roller/resources/watt/jvm-options-list.html, update for Java7 - http://nerds-central.blogspot.com[..]ot.com/2011/07/all-jvm-7-xx-options.html http://stas-blogspot.blogspot.com[..]ost-complete-list-of-xx-options-for.html

A simplified list for some frequency use options - http://rdafbn.blogspot.com.au[..]rbage-collector-guidelines-and-tips.html

HotSpot JVM garbage collection options cheat sheet - http://aragozin.blogspot.com[..]spot-jvm-garbage-collection-options.html http://www.oracle.com[..]va/javase/tech/vmoptions-jsp-140102.html

An example and story about effect of difference VM parameter affecting the performance - http://www.javaspecialists.eu/archive/Issue191.html

Clear the code cache automatically with -XX:+UseCodeCacheFlushing - http://blogs.amd.com[..]time-for-long-running-java-applications/

Discussion about -XX:MinHeapFreeRatio parameter - http://www.gossamer-threads.com[..]s.com/lists/lucene/java-user/44286#44286

The other detailed guide for VM parameters tuning - http://java.sun.com/j2se/1.5/pdf/jdk50_ts_guide.pdf

Here is a more simple cookbook - http://java.sun.com/performance/reference/whitepapers/tuning.html

A outdated (1.4) , compehensive but still not really too detailed, overview of various GC tuning - http://www.petefreitag.com/articles/gctuning/

Some say following VM parameter is good enough
-server -Xmx -XX:+UseParallelGC
http://blogs.sun.com[..]/page/binublog?entry=java_tuning_for_xml

Some say is useful if you have huge memory
-XX:+UseLargePages
http://blogs.sun.com[..]dagastine?entry=java_se_tuning_tip_large

Some say below parameter keep GC in low pause
-XX:MaxGCPauseMillis=5000
Some say below parameter are very optimal
-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:NewSize=1200m -XX:SurvivorRatio=16
http://www.theserverside.com[..]d.tss?thread_id=41258&ASRC=EM_NNL_347804
Some say those parameter is good
-XX:+UseConcMarkSweepGC
-XX:ParallelCMSThreads=1
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CMSIncrementalDutyCycleMin=0
-XX:CMSIncrementalDutyCycle=10
http://blog.mikiobraun.de/2010/08/cassandra-gc-tuning.html

Just in case anyone is curious, the flags enabled by -XX:+AggressiveOpts in JDK 1.6.0_25 are:

-XX:+EliminateAutoBox
-XX:AutoBoxCacheMax=20000
-XX:BiasedLockingStartupDelay=500
-XX:+DoEscapeAnalysis
-XX:+OptimizeStringConcat
-XX:+OptimizeFill

Generate dump with OOME - -XX:+HeapDumpOnOutOfMemoryError

GC log sample of -XX:+UseConcMarkSweepGC -XX:PrintFLSStatistics=1 -XX:+PrintGCDetails - https://gist.github.com/1329783

A case study of tuning VM GC parameters - http://plumbr.eu[..]ld-you-trust-the-default-settings-in-jvm

Explanation for few performance related VM parameters - http://www.techpaste.com[..]ine-options-jvm-performance-improvement/

Show the exact vm flag that java using - http://matthewkwilliams.com[..]/looking-inside-a-jvm-xxprintflagsfinal/

For G1GC - https://dzone.com[..]e-first-garbage-collector-tuning-flags-1

https://ionutbalosin.com[..]otspot-jvm-performance-tuning-guidelines

(google search) (amazon search)


Wed Dec 01 04:07:49 GMT 2021 From /weblog/java/features

java17


Writing a simple Filesystem using Fuse and java 17 - https://www.davidvlijmincx.com[..]imple_filesystem_using_fuse_and_java_17/

(google search) (amazon search)


Sun Nov 28 13:19:57 GMT 2021 From /weblog/java/performance

cases


A case showing java is faster than C++ - https://groups.google.com[..]mgroups#!topic/comp.lang.c++/7aNw3PzPvMI

Case show how to improve GC time spend on a java application - http://javaeesupportpatterns.blogspot.com.au[..]11/java-vm-beware-of-younggen-space.html

A case study of solving thread contention - http://blogs.mulesoft.org[..]fighting-thread-contention-in-your-code/

http://www.cubrid.org[..]-of-java-application-performance-tuning/

Notes about measuring map performance - http://vanillajava.blogspot.com.au[..]ronicle-map-and-yahoo-cloud-service.html

High Performance Java - Binary instead of Objects - John Davies - https://vimeo.com/138956045 http://www.infoq.com/presentations/java-low-latency

jemalloc, look like a really nice tool - https://gdstechnology.blog.gov.uk[..]c-to-get-to-the-bottom-of-a-memory-leak/

story of finding why there is so many GC - http://www.infoq.com[..]horough-jvm-thorough-analysis-ygc-part01

GC thread blocked by system call - http://www.infoq.com/cn/articles/GC-Log-Uncovers-Pause https://www.infoq.com/articles/GC-Log-Uncovers-Pause

We always need benchmark - https://arnaudroger.github.io[..]2017/06/15/forward-vs-backward-loop.html

Investigation and solutions of performance issue caused by GC log - https://engineering.linkedin.com[..]c-pauses-caused-by-background-io-traffic

Using jemalloc to get to the bottom of a memory leak - https://technology.blog.gov.uk[..]c-to-get-to-the-bottom-of-a-memory-leak/

Parallel Collection Processing: Leveraging Batching - https://4comprehension.com/parallel-collection-processing-2/

Maybe good to careful about collection initalization - http://blog.pitest.org[..]ars-with-a-single-character-code-change/

Issue of using non-thread safe collection in multi-thread - https://dzone.com[..]oting-cpu-spike-in-a-major-trading-appli

Performance comparison of difference JVM vendor - https://www.reddit.com[..]stopping_openj9_from_overtaking_hotspot/

Why we chose java for HFT - https://medium.com[..]equency-trading-application-600f7c04da94

5 Mundane Java Performance Tips - https://richardstartin.github.io[..]/posts/5-java-mundane-performance-tricks

(google search) (amazon search)


Sun Oct 17 11:59:31 GMT 2021 From /weblog/java/hacks

corner case


Corner case cheat sheet in Java - https://ge0ffrey.github.io[..]cornerCaseCheatSheet/cheatSheetJava.html

(google search) (amazon search)


Wed Oct 06 06:16:36 GMT 2021 From /weblog/java/concurrency

Executor


Sample ResubmittingScheduledThreadPoolExecutor, the coding is nice! http://www.javaspecialists.eu/archive/Issue154.html

Implement thread pool properly - http://www.kimchy.org/juc-executorservice-gotcha/

RetryExecutor - http://nurkiewicz.blogspot.hk[..]/2013/07/asynchronous-retry-pattern.html

ScheduledThreadPoolExecutor corePoolSize=0 at JDK9 cause 100% CPU - https://josephmate.github.io[..]1-10-03-my-bug-used-up-100cpu-or-did-it/

(google search) (amazon search)


Mon Oct 04 12:47:12 GMT 2021 From /weblog/java/tools

build


Understanding Apache Maven – The Series - https://cguntur.me[..]0/understanding-apache-maven-the-series/

Faster Maven builds - https://blog.frankel.ch/faster-maven-builds/1/

(google search) (amazon search)



Sun Sep 12 13:26:48 GMT 2021 From /weblog/java/fundamental

garbage


Some overview articles - http://javarevisited.blogspot.com[..]/2011/04/garbage-collection-in-java.html http://jeremymanson.blogspot.com[..]10/01/garbage-collection-references.html http://www.oracle.com[..]work/java/javase/gc-tuning-6-140523.html https://www.infoq.com[..]derstand-classic-java-garbage-collection

Interview with Azul, about the pauseless GC - http://www.infoq.com/interviews/gil-tene-azul-zing

A story of how to tune GC - http://kirk.blog-city.com/why_do_i_have_this_long_gc_pause.htm

NewRatio ( XX:MaxNewSize ) is important, but usually ignored - http://blogs.oracle.com[..]ector/entry/the_second_most_important_gc

Java memory configuration and monitoring - http://blog.codecentric.de[..]ry-configuration-and-monitoring-3rd-act/

How Garbage Collection differs in the three big JVMs - http://blog.dynatrace.com[..]ollection-differs-in-the-three-big-jvms/

Garbage Collection Bootcamp 1.0 - http://www.lucidimagination.com[..]1/03/27/garbage-collection-bootcamp-1-0/

http://javarevisited.blogspot.sg[..]ollection-interview-question-answer.html

How CMS work - https://blogs.oracle.com[..]thecollector/entry/hey_joe_phases_of_cms

Compare between difference VM - http://www.optaplanner.org[..]IsTheFastestGarbageCollectorInJava8.html

GC handbook - https://plumbr.eu/java-garbage-collection-handbook

Check what GC you are using - http://marxsoftware.blogspot.hk[..]16/04/determining-garbage-collector.html

About G1 Java Garbage Collector - http://dobbscodetalk.com[..]G1-Java-Garbage-Collector.html&Itemid=29

Tools to visualize GC - http://gceasy.io/

Visualizing difference algorithm - https://spin.atomicobject.com[..]sualizing-garbage-collection-algorithms/

safepoints - http://performantcode.com/gc/safepoints/

Few new GCs for huge heap - https://dzone.com/articles/java-garbage-collection-3

Objects are allocated with extra space for an indirection pointer. When the Java threads access the object, they first read the indirection pointer to see whether the object has moved. When the garbage collector moves an object, it updates the indirection pointer to point to the new location. New objects are allocated with an indirection pointer that points to themselves. Only when an object is copied during GC will the indirection pointer point to somewhere else. - https://blogs.oracle.com[..]agazine/understanding-garbage-collectors

JVM Pauses - It's more than GC - https://blanco.io/blog/jvm-safepoint-pauses/

Digging into Java Garbage Collection - https://www.reddit.com[..]5e/digging_into_java_garbage_collection/

(google search) (amazon search)


Thu Sep 09 00:17:05 GMT 2021 From /weblog/java/features

java16


https://www.infoq.com/articles/java-16-new-features

(google search) (amazon search)


Mon Jul 12 14:21:23 GMT 2021 From /weblog/java/fundamental

collections


Detailed decision of arraylist and linkedlist, consist of a lot benchmark results, take a look if interested: http://javachaos.crazyredpanda.com/?p=99

One bug from java HashMap explaining it can be difficult to achieve fail-fast - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6625725 http://java.dzone.com/articles/do-your-iterators-always-fail

Performance difference of difference collection - http://java-persistence-performance.blogspot.com[..]0/12/what-is-faster-jvm-performance.html http://leolewis.website.org[..]/2011/07/14/java-collection-performance/

A treelist implementation - http://binkley.blogspot.com/2007_02_01_archive.html

Implement LRU cache using LinkedHashMap - http://vanillajava.blogspot.com[..]11/06/java-secret-lru-cache-in-java.html

Problem of using soft-reference for automate cache clean up - http://comments.gmane.org[..]gmane.comp.java.jsr.166-concurrency/7982

if it claims that an element is contained in it, this might be in error, but if it claims that an element is not contained in it, then this is definitely true. - http://codingjunkie.net/guava-bloomfilter/

Comment of various collections library - http://plumbr.eu/blog/selecting-your-collections-library

List of FAQ of Java collections - http://www.journaldev.com[..]lections-interview-questions-and-answers

Java Collections – Performance (Time Complexity) - http://infotechgems.blogspot.com.br[..]1/java-collections-performance-time.html

Performance improvement for HashMap for Java8 - http://www.nurkiewicz.com[..]hashmap-performance-improvements-in.html

Introduction to GS collection - http://www.infoq.com[..]s/gs-collections-examples-tutorial-part1 http://www.infoq.com[..]s/gs-collections-examples-tutorial-part2

removeEldestEntry, interesting function of linkedhashmap - http://www.ageofjava.com[..]/prevent-your-caches-from-exploding.html

How new version of java help immutable style - https://dzone.com/articles/java-collections-are-evolving

https://blog.frankel.ch/map-merge-compute

Hash puzzle with stringbuilder - https://threadreaderapp.com/thread/1402520496143540228.html

(google search) (amazon search)


Thu Jun 24 13:58:59 GMT 2021 From /weblog/java/fundamental

memory


From java code to java heap, detail of how java use memory - http://www.ibm.com[..]rks/java/library/j-codetoheap/index.html

Algorithm of determine suitable thread pool size - http://www.javacodegeeks.com[..]reading-stories-about-robust-thread.html

Detail of how to analysis how much memory you need - http://www.javacodegeeks.com[..]m/2012/12/how-much-memory-do-i-need.html

Chinese introduction of memory model - http://www.infoq.com/cn/articles/java-memory-model-1

Difference between PermGem and MetaSpace - http://javaeesupportpatterns.blogspot.com.au[..]02/java-8-from-permgen-to-metaspace.html

How many bytes a boolean value takes in Java? - https://www.pixelstech.net[..]many-bytes-a-boolean-value-takes-in-Java

🚀 Demystifying JVM Memory Management - https://foojay.io/today/demystifying-jvm-memory-management/

Quest to the OS: Java Native Memory - https://blog.picnic.nl[..]o-the-os-java-native-memory-5d3ef68ffc0a

(google search) (amazon search)


Thu Jun 24 13:52:43 GMT 2021 From /weblog/java/performance

vm


5 tips for proper Java Heap size - http://javaeesupportpatterns.blogspot.hk[..]07/5-tips-for-proper-java-heap-size.html

What does JVM do - http://www.azulsystems.com[..]t/uploads/2011/03/2011_WhatDoesJVMDo.pdf

How Azul do pauseless GC - http://www.artima.com/forums/flat.jsp?forum=226&thread=309917

New feature, DoEscapeAnalysis http://www.google.com.hk/search?q=DoEscapeAnalysis

A very nice blog about VM detail
http://blogs.sun.com/roller/page/jonthecollector?catname=%2FJava

Tips for configing 64bit system with large pagesize - http://andrigoss.blogspot.com/2008/02/jvm-performance-tuning.html

http://jeremymanson.blogspot.com[..]garbage-collector-in-latest-openjdk.html

http://www.cliffc.org[..]-optimize-hot-loops-and-allow-debugging/
Just an idea - http://jaxenter.com[..]aded-virtual-memory-in-java.1-46188.html
How java use native memory ( in aix ) - https://www.ibm.com[..]erworks/java/library/j-nativememory-aix/

How JRebel enable dynamic adding or removing method in running VM, using existing Java technology like classloading and agent to breakthough hotswap limitation - http://www.zeroturnaround.com[..]loading_java_classes_401_hotswap_jrebel/

Biased locking - http://blogs.sun.com/dave/entry/biased_locking_in_hotspot

Aleksey Shipilëv: One Stop Page - http://shipilev.net/

Discussion about safepoint - http://psy-lob-saw.blogspot.se/2015/12/safepoints.html

JVM Pauses - It's more than GC - https://blanco.io/blog/jvm-safepoint-pauses/

(google search) (amazon search)


Sun Jun 20 12:54:51 GMT 2021 From /weblog/java/fundamental

fields


http://mindprod.com/jgloss/transient.html

http://mindprod.com/jgloss/volatile.html

https://www.claudiodesio.com/posts/constants.html

(google search) (amazon search)


Sun Jun 20 12:53:30 GMT 2021 From /weblog/java/features

net


URL handler - http://skife.org[..]ibrary/2012/05/14/java_url_handlers.html , UrlSchemeRegistry.register("dinner", DinnerHandler.class);

Talking to Postgres Through Java 16 Unix-Domain Socket Channels - https://www.morling.dev[..]ugh-java-16-unix-domain-socket-channels/

(google search) (amazon search)


Fri Jun 18 00:28:23 GMT 2021 From /weblog/java/features

debugging


VisualVM , a collection of tools for debugging and monitoring - http://www.infoq.com/news/2008/05/visualvm

Presentation of BTrace, which allow user to have event base tracing - https://btrace.dev.java.net[..]ts/8510/98299/BTrace_BOF-5552_J12008.pdf

JDK command line tools which help to solving memory issue - http://plumbr.eu/blog/solving-outofmemoryerror-jdk-tools

Show how to get stack trace and memory map from JVM dump - http://fahdshariff.blogspot.gr[..]gr/2012/08/analysing-java-core-dump.html

VM options about dumps - https://inside.java/2021/04/30/failed-writing-core-dump/

(google search) (amazon search)


Sun Mar 21 12:59:18 GMT 2021 From /weblog/java/deploy

maven


How to Publish Artifacts on Maven Central - https://medium.com[..]-artifacts-on-maven-central-24342fd286cd https://andresalmiray.com[..]ing-to-maven-central-using-apache-maven/

Switching Java versions the whole day long - https://maarten.mulders.it[..]021/03/introduction-to-maven-toolchains/

(google search) (amazon search)


Mon Mar 08 05:05:16 GMT 2021 From /weblog/java/fundamental

i18n


A very good tutorial of how to config and develop i18n web application
http://www.javaworld.com/javaworld/jw-05-2004/jw-0524-i18n_p.html

and a shorter one
http://www.arachna.com[..]/spidaman/20050215#a_java_i18n_checklist

and a tip
http://java.oreilly.com/lpt/a/1847

An introduction of a useful API for localized currency handling DecimalFormatSymbols
http://blog.marcnuri.com[..]mbols-DecimalFormat-DecimalFormatSymbols

Benchmark of various charset detector - http://fredeaker.blogspot.com[..]007/01/character-encoding-detection.html

Work with filename with non-ASCII char - https://webtide.com[..]-internationalization-and-normalization/

(google search) (amazon search)


Wed Feb 24 03:49:26 GMT 2021 From /weblog/java/string

intern


String.intern() is designed for constant strings, it's implemented in C/C++ in the hotspot core code, and it has a fixed-size hashmap of around 20K entries and if more than this number of strings are interned, the performance degrades linearly since there are hash collisions and the code has to search down linked lists.

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6988220

String.intern in Java 7 and 8 - http://java-performance.info/string-intern-in-java-6-7-8/ http://java-performance.info[..]-intern-java-6-7-8-multithreaded-access/ http://java-performance.info/string-intern-java-7-8-part-3/

Suggestion of improving string decoding - https://cl4es.github.io/2021/02/23/Faster-Charset-Decoding.html

(google search) (amazon search)