Meta tags:
Headings (most frequently used words):
2013, monday, thursday, blog, lock, mechanical, sympathy, may, 2014, 26, august, tuesday, 16, july, 27, june, 14, february, search, this, discussion, group, about, me, training, consulting, popular, posts, archive, followers, simple, binary, encoding, based, vs, free, concurrent, algorithms, java, garbage, collection, distilled, printing, generated, assembly, code, from, the, hotspot, jit, compiler, cpu, cache, flushing, fallacy,
Text of the page (most frequently used words):
the (683), and (216), for (182), can (111), are (101), this (91), that (91), with (80), memory (69), cache (67), objects (61), when (59), from (53), have (47), generation (47), #collection (46), not (43), which (43), java (41), latency (40), space (39), concurrent (38), will (38), application (38), old (37), collector (37), time (36), then (34), throughput (33), object (31), all (30), minor (30), more (29), message (29), collections (29), garbage (28), size (28), you (27), data (27), line (27), sbe (27), heap (26), very (26), each (26), some (26), collectors (26), promotion (26), code (25), these (25), live (25), system (24), performance (24), cms (24), new (24), tenured (23), may (22), other (22), has (22), than (22), often (21), parallel (21), run (21), allocation (21), fields (21), messages (20), also (20), world (20), stop (20), been (19), systems (19), lock (19), applications (19), pauses (19), free (19), most (18), major (18), store (18), thread (18), significant (18), cost (17), access (17), your (17), cpu (17), need (17), number (17), read (17), threads (17), such (17), interthreadlatency (17), regions (17), many (16), single (16), share (16), caches (16), core (16), socket (16), algorithms (16), int (16), car (16), use (15), survivor (15), our (15), state (15), used (15), hotspot (15), note (15), encoding (14), how (14), should (14), available (14), instructions (14), being (14), buffer (14), pongrunner (14), final (14), references (14), append (14), main (13), sub (13), version (13), case (13), out (13), over (13), test (13), static (13), but (13), region (13), large (13), stubs (13), because (12), into (12), like (12), known (12), young (12), eden (12), spaces (12), between (12), must (12), long (12), get (12), while (12), generated (12), rate (12), exec (12), thrpt (12), ops (12), times (11), make (11), any (11), see (11), work (11), cores (11), shared (11), design (11), variable (11), possible (11), cycle (11), order (11), value (11), instruction (11), thus (11), buffers (11), set (11), events (11), generational (11), implementation (11), binary (10), back (10), high (10), multiple (10), one (10), within (10), local (10), allocated (10), write (10), full (10), implementations (10), using (10), mark (10), point (10), low (10), less (10), hlt (10), decoding (10), fullgc (10), schema (10), gpb (10), simple (9), load (9), its (9), could (9), algorithm (9), off (9), real (9), tuning (9), via (9), example (9), same (9), effectively (9), both (9), only (9), written (9), protocol (9), does (9), greater (9), compiler (9), allows (9), method (9), volatile (9), sometimes (9), assembly (9), found (9), target (9), would (9), reduced (9), compaction (9), rates (9), keep (8), different (8), gen (8), public (8), hardware (8), older (8), achieve (8), per (8), across (8), registers (8), class (8), copy (8), changes (8), bus (8), ordering (8), require (8), based (8), much (8), what (8), jit (8), jvm (8), due (8), targets (8), strings (8), support (8), pause (8), roots (8), first (8), failure (8), results (8), market (8), protobuf (8), zing (7), financial (7), writer (7), even (7), flush (7), fallacy (7), them (7), server (7), similar (7), larger (7), try (7), consistent (7), controller (7), another (7), ring (7), second (7), issue (7), issues (7), efficient (7), avoid (7), operation (7), generations (7), optimisation (7), few (7), r10 (7), rax (7), here (7), end (7), cannot (7), running (7), footprint (7), collecting (7), during (7), safepoint (7), copying (7), promoted (7), reachable (7), good (7), concurrently (7), length (7), spaceship (7), coordinates (7), xml (7), fix (7), encode (7), decode (7), ncar (7), 2013 (6), requests (6), interesting (6), fast (6), done (6), numbers (6), about (6), perm (6), london (6), martin (6), thompson (6), location (6), x86 (6), bridge (6), processors (6), following (6), qpi (6), modified (6), track (6), return (6), fence (6), addition (6), address (6), two (6), however (6), significantly (6), cycles (6), depending (6), they (6), model (6), figure (6), necessary (6), plugin (6), below (6), mov (6), pointer (6), r11d (6), pong (6), ping (6), amount (6), mostly (6), therefore (6), expect (6), occurs (6), runtime (6), triggered (6), purpose (6), stampedlock (6), encoded (6), codec (6), carbenchmark (6), testdecode (6), testencode (6), marketdatabenchmark (6), message_header (6), blog (5), follow (5), since (5), bytes (5), native (5), language (5), fences (5), important (5), vast (5), takes (5), structures (5), highly (5), having (5), labels (5), pinterest (5), facebook (5), blogthis (5), email (5), comments (5), posted (5), execution (5), programs (5), intel (5), processor (5), sandy (5), non (5), follows (5), coherent (5), never (5), increased (5), requirements (5), previous (5), connected (5), network (5), made (5), there (5), variables (5), loop (5), register (5), achieved (5), user (5), observed (5), context (5), switch (5), required (5), reference (5), indicates (5), level (5), sets (5), additional (5), accessing (5), private (5), entry (5), useful (5), particular (5), appropriate (5), performed (5), makes (5), rather (5), rsp (5), start (5), fly (5), those (5), discussed (5), give (5), reduce (5), mean (5), job (5), milliseconds (5), efficiency (5), result (5), before (5), moved (5), sizes (5), contention (5), tlab (5), occur (5), byte (5), collect (5), sufficient (5), compared (5), mutation (5), seen (5), incremental (5), little (5), tens (5), general (5), typical (5), tool (5), api (5), methods (5), position (5), presentation (5), languages (5), directbuffer (5), schemaid (5), july (4), august (4), under (4), until (4), bit (4), anything (4), channels (4), azul (4), article (4), barriers (4), miss (4), sending (4), compact (4), build (4), principle (4), operations (4), serial (4), next (4), logic (4), coherence (4), common (4), attempt (4), function (4), cpus (4), multi (4), independent (4), process (4), capable (4), allow (4), small (4), executed (4), cross (4), keeping (4), source (4), know (4), separate (4), provides (4), clean (4), writing (4), reasons (4), compilers (4), generate (4), reads (4), sequentially (4), simply (4), setting (4), tlb (4), cases (4), later (4), way (4), usually (4), around (4), enable (4), without (4), come (4), runs (4), take (4), jvms (4), oracle (4), standard (4), linux (4), measure (4), associated (4), above (4), normally (4), followed (4), best (4), 0x0 (4), compiled (4), total (4), repetitions (4), focus (4), commercial (4), great (4), worst (4), frequent (4), trading (4), tend (4), resulting (4), longer (4), tends (4), collected (4), suffer (4), reach (4), array (4), event (4), phase (4), directly (4), proportional (4), fail (4), threshold (4), fixed (4), spent (4), needs (4), increasing (4), uses (4), default (4), suitable (4), consider (4), become (4), compacting (4), fragmentation (4), marking (4), logs (4), remembered (4), jrockit (4), ratio (4), tests (4), mode (4), readers (4), principles (4), header (4), template (4), protocols (4), bufferoffset (4), templateid (4), 2014 (3), pressure (3), doing (3), programming (3), patterns (3), people (3), terms (3), last (3), had (3), trying (3), cause (3), flushing (3), hundreds (3), popular (3), posts (3), view (3), modern (3), limited (3), groups (3), mechanical (3), sympathy (3), search (3), latest (3), resource (3), their (3), huge (3), together (3), hierarchy (3), opportunity (3), means (3), exists (3), taking (3), effective (3), expense (3), amd (3), segment (3), held (3), containing (3), exclusive (3), always (3), relatively (3), telling (3), after (3), issuing (3), put (3), ensure (3), part (3), believe (3), classes (3), flushed (3), whole (3), expensive (3), atomic (3), nehalem (3), forward (3), copies (3), associative (3), hash (3), associativity (3), trade (3), now (3), pre (3), average (3), split (3), segments (3), designed (3), mob (3), floating (3), allocate (3), advantage (3), understand (3), decisions (3), applied (3), install (3), targeting (3), was (3), printing (3), print (3), optimised (3), able (3), field (3), xchg (3), oop (3), 0x00007fed81060a00 (3), stub (3), 0x00007fed810609d0 (3), cmp (3), 0x00007fed81060980 (3), void (3), string (3), pongthread (3), program (3), amd64 (3), find (3), tradeoffs (3), something (3), comes (3), batch (3), seconds (3), maintain (3), short (3), whereas (3), immortal (3), almost (3), age (3), operate (3), managed (3), specific (3), where (3), were (3), meet (3), card (3), table (3), grow (3), bump (3), providing (3), call (3), lists (3), increases (3), gets (3), too (3), adding (3), approach (3), updating (3), maintaining (3), influence (3), range (3), compactions (3), frequency (3), extended (3), constrained (3), websphere (3), advantages (3), millisecond (3), needed (3), least (3), three (3), dynamic (3), spikes (3), update (3), better (3), reader (3), dimensional (3), reentrantreadwritelock (3), provide (3), complex (3), representation (3), move (3), param (3), delta (3), year (3), tag (3), working (3), community (3), todd (3), codecs (3), input (3), decoded (3), blobs (3), root (3), struct (3), repeating (3), metadata (3), sbetool (3), wrap (3), abstraction (3), direct (3), extension (3), alignment (3), overview (3), specification (3), feedback (3), benchmarks (3), 29193 (3), 600 (3), 34078 (3), 646 (3), 11657 (3), 190 (3), 10436 (3), 476 (3), 619 (3), serialnumber (3), modelyear (3), october (2), december (2), 2012 (2), february (2), june (2), respond (2), accepting (2), response (2), applying (2), quite (2), ever (2), turn (2), stream (2), largest (2), penalty (2), communicate (2), receiving (2), formats (2), detailed (2), implications (2), lot (2), quest (2), limitation (2), scalability (2), writers (2), experienced (2), technologists (2), hear (2), talk (2), certain (2), safepoints (2), distilled (2), training (2), consulting (2), profile (2), https (2), google (2), com (2), forum (2), group (2), seems (2), explain (2), execute (2), techniques (2), ends (2), nanoseconds (2), hide (2), exercise (2), others (2), slower (2), developing (2), lost (2), considered (2), stale (2), whereby (2), place (2), works (2), bandwidth (2), tracks (2), finite (2), states (2), employs (2), mesif (2), sent (2), traffic (2), sockets (2), lanes (2), inclusive (2), either (2), worry (2), visibility (2), appear (2), firstly (2), periods (2), repeatedly (2), updates (2), aware (2), ahead (2), sequential (2), impact (2), want (2), think (2), subsequent (2), indexing (2), entries (2), request (2), numa (2), matches (2), transitions (2), involves (2), plus (2), stage (2), tables (2), ways (2), hashed (2), levels (2), uniform (2), maybe (2), remote (2), hop (2), westmere (2), aggregated (2), link (2), individual (2), accesses (2), through (2), addresses (2), acts (2), queue (2), contains (2), 32k (2), already (2), waiting (2), searched (2), existing (2), transferred (2), writes (2), stores (2), expected (2), files (2), integers (2), accessible (2), constitute (2), fastest (2), given (2), located (2), thursday (2), debugging (2), previously (2), installed (2), programmer (2), sufficiently (2), reading (2), situation (2), once (2), again (2), reordered (2), add (2), stack (2), semantics (2), action (2), efficiently (2), oopmap (2), jmpq (2), runtime_call (2), 0x00007fed81060a0a (2), handler (2), exception (2), iload_1 (2), eax (2), rip (2), 0x00007fed8ba77000 (2), rbp (2), 0x10 (2), 102 (2), jne (2), 0x00007fed810609c0 (2), r9d (2), goto (2), nopl (2), lang (2), constants (2), 0x00007fed81060850 (2), 0x00007fed81060b28 (2), 0x00007fed81060b30 (2), scopes (2), 0x00007fed81060a78 (2), 0x00007fed81060a30 (2), 0x00007fed81060a18 (2), unlockdiagnosticvmoptions (2), 1000 (2), throws (2), duration (2), runtest (2), pingthread (2), pingrunner (2), nanotime (2), implements (2), runnable (2), busy (2), spin (2), hsdis (2), disassembler (2), flags (2), tune (2), describing (2), every (2), choosing (2), usage (2), play (2), missed (2), acceptable (2), regardless (2), workloads (2), occasionally (2), period (2), behavior (2), lived (2), magnitude (2), likely (2), sparse (2), survived (2), generates (2), spending (2), portion (2), happens (2), living (2), lower (2), distinct (2), checks (2), executing (2), reached (2), potentially (2), eventually (2), basis (2), behind (2), wrong (2), adjust (2), avoiding (2), cheap (2), commences (2), fit (2), differently (2), dead (2), include (2), internal (2), survive (2), potential (2), 512 (2), stored (2), cards (2), scan (2), empty (2), area (2), copied (2), doubling (2), increase (2), heaps (2), starting (2), greatest (2), fills (2), effort (2), prevent (2), accommodate (2), fullgcs (2), experience (2), linearly (2), perform (2), 7u4 (2), extent (2), tolerate (2), compacted (2), gain (2), goal (2), driven (2), worse (2), taken (2), grows (2), phases (2), check (2), requires (2), introduced (2), supported (2), humongous (2), moving (2), referenced (2), evacuating (2), problem (2), well (2), scenarios (2), alternative (2), still (2), truly (2), higher (2), side (2), analysis (2), histogram (2), jhiccup (2), lifetimes (2), printgcapplicationstoppedtime (2), maxgcpausemillis (2), reset (2), sweep (2), updated (2), initial (2), maxtenuringthreshold (2), xmx (2), maximum (2), concurrency (2), session (2), optimistic (2), current (2), fact (2), indirection (2), built (2), harness (2), pattern (2), inlining (2), employed (2), variance (2), produce (2), especially (2), interface (2), provided (2), attempts (2), xdelta (2), axis (2), ydelta (2), monday (2), feeds (2), gives (2), ascii (2), presentations (2), complain (2), cme (2), who (2), format (2), grouped (2), sniffer (2), bitsets (2), enums (2), arrays (2), type (2), body (2), offsets (2), block (2), optional (2), supporting (2), unsafe (2), carry (2), otherwise (2), aligned (2), parts (2), structure (2), otf (2), developers (2), don (2), welcome (2), 1316 (2), 123 (2), 2088 (2), 998 (2), 433 (2), 711 (2), 467 (2), msg (2), 1242 (2), 252 (2), 1148 (2), 050 (2), 326 (2), 018 (2), 462 (2), 817 (2), thr (2), cnt (2), sec (2), error (2), units (2), messagetemplateversion (2), actingblocklength (2), blocklength (2), actingversion (2), stringbuilder (2), sbetemplateid (2), sbeschemaversion (2), jar (2), powered, blogger, followers, september, november, 2011, march, april, january, archive, sustained, deadly, hockey, overloaded, leaving, lmax, neglecting, opposi, fun, nirvana, wish, serialisation, discuss, fundamental, technique, computing, said, post, tuples, scalable, biggest, contend, item, course, www, complete, technology, geek, exploring, capabilities, development, services, twitter, mjpt777, united, kingdom, discussion, subscribe, atom, home, heirarchy, illustrating, interacts, fulfil, interact, concrete, dive, accessed, 10s, 100s, 100ns, 0ghz, 1200, retiring, ipc, employ, capacity, persistent, pondering, 500, double, interconnects, circa, servers, decomposed, truth, mainstream, fetched, master, style, management, evicted, blocks, reduces, variant, transition, series, effect, greatly, days, buses, module, integrated, graphics, rapid, identification, snooping, keeps, owns, wants, snooped, guaranteed, why, modifications, visible, qualifying, beware, inadequate, reorder, shortly, likes, overcome, let, accompanied, preventing, progress, drained, marker, boundary, vega, opposed, returning, safely, say, drain, policy, arm, armv6, did, tags, requiring, kept, bottom, switching, topic, pollution, lazyset, peterson, dekker, acknowledge, snoop, hypertransport, opteron, specialised, designated, unused, invalid, exclusively, ownership, rfo, invalidate, broadcast, dirty, moesi, l1d, masking, bits, handle, collision, slot, slots, hold, storing, power, 40ns, step, limit, raised, 4gt, 0gt, eliminating, bottleneck, delivered, choke, fetch, dram, 65ns, extremely, columns, row, queuing, effects, refresh, conflict, pipelining, 2mb, 20mb, inclusiveness, intercept, removing, burden, 256k, hidden, pipelined, comprised, flight, fully, queued, blocking, disambiguate, compliance, published, loads, ordered, constructed, according, 160, 144, arguments, subset, expands, ability, streams, enabled, hyperthreads, hyperthreading, architectural, asm, profiling, determining, affect, knowing, emitted, rules, bugs, various, illustrates, command, options, obtain, debug, sun, steps, executes, hot, details, optimise, honour, statement, forest, trees, generally, twice, osr, red, highlighted, lines, optimisations, staging, inserting, chosen, enforce, idiom, ideal, correctly, wonder, compromises, portable, architectures, observation, oopmapset, oopmaps, 0x00007fed81060a17, 0x00007fed81060a16, 0x00007fed81060a15, 0x00007fed81060a14, 0x00007fed81060a0f, 0x00007fed81038c00, subq, 0x5, 0x00007fed81060a05, callq, deopt, 0x00007fed8105eaa0, no_reloc, 0x00007fed810609ff, 0x00007fed810609fe, 0x00007fed810609fd, 0x00007fed810609fc, 0x00007fed810609fb, 0x00007fed810609fa, 0x00007fed810609f9, retq, poll_return, 0x00007fed810609f3, 0xaa16607, 0x00007fed810609f2, pop, 0x00007fed810609ee, 0x00007fed810609ec, if_icmpeq, 0x00007fed810609e5, 0x5f5e100, 0x00007fed810609e2, inc, iinc, 0x00007fed810609dd, addl, putstatic, 0x00007fed810609d9, 0x78, 0x00007fed810609d7, 0x00007fed810609d4, 000, 0x74, getstatic, 0x00007fed810609c6, nopw, poll, 0xaa1663a, 0x00007fed810609bb, 0x00007fed810609b9, jmp, 0x00007fed810609af, 0x7ad0fcbf0, 0x00007fed810609ac, xor, 0x00007fed810609a7, synchronization, 0x00007fed810609a0, 0x18, verified, 0x00007fed8106099c, 0x00007fed81060994, 0x00007fed81060991, 0x00007fed8106098b, 0x00007fed81037a60, 0x00007fed81060988, 0x00007fed81060984, shl, 0x3, 0x8, rsi, r10d, 0x20, caller, dependencies, pcs, 176, oops, 128, relocation, 0x00007fed81060970, 736, 10531, compilecommand, printassembly, import, 100, args, printf, dns, avg, interruptedexception, join, library, java_home, jre, lib, rename, libhsdis, download, kenai, projects, base, downloads, installation, startup, baffle, alone, documentation, feels, man, pages, aircraft, knob, dial, explained, nowhere, guide, workload, openjdk, ones, towards, illustrate, alternatives, wise, folk, silently, continue, warning, margin, distribution, interpret, term, lowest, refers, deterministic, processing, matter, paused, overall, completed, sooner, virtually, human, facing, interactive, goes, unresponsive, spell, disaster, worthwhile, physical, fronts, expectation, percentage, theory, iterators, experimentation, shown, ubiquitously, separating, newly, scavenges, record, consistently, fairly, filter, frequently, practical, engineering, periodically, points, varying, durations, bring, signaling, contents, returns, edges, optimized, away, places, making, dynamically, rare, cloning, monotonic, counted, bound, ttsp, consideration, surfaced, enabling, flag, undergo, scheduling, resume, released, reliance, explore, organised, initially, temporary, described, collectively, enough, knows, unfortunately, loading, ongoing, motivating, assumption, interned, treat, virtual, statistics, accordingly, assigned, allocates, tlabs, scale, bumps, roughly, platforms, cheaper, malloc, exhausted, filled, accommodated, created, handles, own, section, becomes, tenuring, overflows, iteratively, frames, graphs, graph, processed, sure, identifying, existence, corresponding, barrier, indicate, exist, represent, alternate, roles, beginning, includes, dominated, dealt, halved, doubled, traded, constant, rapidly, becoming, majority, variety, filling, predict, fill, begin, passed, promoting, unwound, padding, promotions, resizing, avoided, simplest, option, smallest, forms, multiprocessor, affected, retain, fewer, port, employing, collects, five, benefits, allocating, shame, feature, trigger, multistep, unreachable, reclaimed, sized, hole, holes, logged, reducing, brought, performing, sees, extremes, reduction, carried, fails, caused, late, addressed, might, officially, partially, tries, smaller, minimize, plague, organizes, dividing, 2000, contiguous, increments, costly, date, challenge, remember, marked, slow, down, scanned, patched, 200ms, efforts, futile, tendency, fragmented, regional, fall, just, evacuation, evacuated, challenging, dealing, heavily, choice, mid, called, look, clear, regularly, occurring, unsuitable, strict, reactive, interfaces, ibm, limitations, author, shifts, related, contained, digit, including, allowing, apply, fear, rule, thumb, budget, warranted, today, seldom, behaving, settings, nature, launch, jvisualvm, visual, understanding, applcations, representative, grips, configurations, experiments, perspective, capturing, outside, correlate, determine, causing, idle, hours, surprised, invest, combined, skilled, verses, purchasing, disruptor, hdrhistogram, chewiebug, verbose, xloggc, printgcdetails, printgcdatestamps, printtenuringdistribution, printgcapplicationconcurrenttime, monitoring, overflow, useg1gc, failures, failed, reclaiming, occupied, capture, remarking, useconcmarksweepgc, usenuma, useparalleloldgc, useparallelgc, useserialgc, xms, promotedpadding, pretenuresizethreshold, permgen, organisation, weak, hypothesis, infant, mortality, managing, controlling, inducing, amortized, active, retained, parameter, responding, impacted, equating, gctimeratio, nothing, tuesday, locks, week, attended, review, excellent, unconference, arise, attending, couple, things, occurred, thought, reviewed, status, secondly, although, looks, jdk, solution, compare, favour, atomically, transaction, cleaner, factoring, immutable, create, minimal, easily, exercised, coarsening, unrolling, subjected, threading, profiles, 0_25, quad, 2ghz, ivy, 3632qm, measured, repeated, warm, throughputs, averaged, approximate, deployment, affinity, isolation, operating, raw, charts, surprise, beyond, balance, takeaways, nice, seeing, appearing, strategy, evidenced, teaching, conclusion, offer, careful, measurement, reentrantlock, counts, discovered, synchronised, easy, mistakenly, locking, actions, improvement, megamorphic, dispatch, ship, readposition, jcrete, heinz, kabutz, jsr166, big, really, lets, quantify, finance, industry, exchanges, typically, emitting, thousands, aggregate, peak, million, volumes, growing, crazy, slightly, sane, markets, commit, sin, income, ultra, parsers, member, commissioned, 29west, lbm, fame, myself, aimed, addressing, coming, atonement, sins, past, worked, helped, net, amazing, cool, technical, team, dream, layer, spend, parsing, transforming, json, business, adhering, features, offered, consists, environment, log, viewer, drive, ensures, streamed, backtracking, unnecessary, underestimated, reclamation, applies, totally, predictable, 25ns, 1000ns, orders, sweet, spot, structured, restrictions, usability, users, suited, preserve, streaming, backtrack, insert, pointers, types, indirected, extra, losing, prefetchers, pure, identifies, nest, finally, define, characters, composites, repeat, currently, output, defined, flyweight
Text of the page (random words):
g on an ongoing basis in many applications makes the motivating assumption behind the perm generation wrong i e that classes are immortal in java 7 interned strings were moved from permgen to tenured and from java 8 the perm generation is no more and will not be discussed in this article most other commercial collectors do not use a separate perm space and tend to treat all long living objects as tenured note the virtual spaces allow the collectors to adjust the size of regions to meet throughput and latency targets collectors keep statistics for each collection phase and adjust the region sizes accordingly in an attempt to reach the targets object allocation to avoid contention each thread is assigned a thread local allocation buffer tlab from which it allocates objects using tlabs allows object allocation to scale with number of threads by avoiding contention on a single memory resource object allocation via a tlab is a very cheap operation it simply bumps a pointer for the object size which takes roughly 10 instructions on most platforms heap memory allocation for java is even cheaper than using malloc from the c runtime note whereas individual object allocation is very cheap the rate at which minor collections must occur is directly proportional to the rate of object allocation when a tlab is exhausted a thread simply requests a new one from the eden space when eden has been filled a minor collection commences large objects xx pretenuresizethreshold n may fail to be accommodated in the young generation and thus have to be allocated in the old generation e g a large array if the threshold is set below tlab size then objects that fit in the tlab will not be created in the old generation the new g1 collector handles large objects differently and will be discussed later in its own section minor collections a minor collection is triggered when eden becomes full this is done by copying all the live objects in the new generation to either a survivor space or the tenured space as appropriate copying to the tenured space is known as promotion or tenuring promotion occurs for objects that are sufficiently old xx maxtenuringthreshold n or when the survivor space overflows live objects are objects that are reachable by the application any other objects cannot be reached and can therefore be considered dead in a minor collection the copying of live objects is performed by first following what are known as gc roots and iteratively copying anything reachable to the survivor space gc roots normally include references from application and jvm internal static fields and from thread stack frames all of which effectively point to the application s reachable object graphs in generational collection the gc roots for the new generation s reachable object graph also include any references from the old generation to the new generation these references must also be processed to make sure all reachable objects in the new generation survive the minor collection identifying these cross generational references is achieved by use of a card table the hotspot card table is an array of bytes in which each byte is used to track the potential existence of cross generational references in a corresponding 512 byte region of the old generation as references are stored to the heap store barrier code will mark cards to indicate that a potential reference from the old generation to the new generation may exist in the associated 512 byte heap region at collection time the card table is used to scan for such cross generational references which effectively represent additional gc roots into the new generation therefore a significant fixed cost of minor collections is directly proportional to the size of the old generation there are two survivor spaces in the hotspot new generation which alternate in their to space and from space roles at the beginning of a minor collection the to space survivor space is always empty and acts as a target copy area for the minor collection the previous minor collection s target survivor space is part of the from space which also includes eden where live objects that need to be copied may be found the cost of a minor gc collection is usually dominated by the cost of copying objects to the survivor and tenured spaces objects that do not survive a minor collection are effectively free to be dealt with the work done during a minor collection is directly proportional to the number of live objects found and not to the size of the new generation the total time spent doing minor collections can be almost be halved each time the eden size is doubled memory can therefore be traded for throughput a doubling of eden size will result in an increase in collection time per collection cycle but this is relatively small if both the number of objects being promoted and size of the old generation is constant note in hotspot minor collections are stop the world events this is rapidly becoming a major issue as our heaps get larger with more live objects we are already starting to see the need for concurrent collection of the young generation to reach pause time targets major collections major collections collect the old generation so that objects can be promoted from the young generation in most applications the vast majority of program state ends up in the old generation the greatest variety of gc algorithms exists for the old generation some will compact the whole space when it fills whereas others will collect concurrently with the application in an effort to prevent it from filling up the old generation collector will try to predict when it needs to collect to avoid a promotion failure from the young generation the collectors track a fill threshold for the old generation and begin collection when this threshold is passed if this threshold is not sufficient to meet promotion requirements then a fullgc is triggered a fullgc involves promoting all live objects from the young generations followed by a collection and compaction of the old generation promotion failure is a very expensive operation as state and promoted objects from this cycle must be unwound so the fullgc event can occur note to avoid promotion failure you will need to tune the padding that the old generation allows to accommodate promotions xx promotedpadding n note when the heap needs to grow a fullgc is triggered these heap resizing fullgcs can be avoided by setting xms and xmx to the same value other than a fullgc a compaction of the old generation is likely to be the largest stop the world pause an application will experience the time for this compaction tends to grow linearly with the number of live objects in the tenured space the rate at which the tenured space fills up can sometimes be reduced by increasing the size of the survivor spaces and the age of objects before being promoted to the tenured generation however increasing the size of the survivor spaces and object age in minor collections xx maxtenuringthreshold n before promotion can also increase the cost and pause times in the minor collections due to the increased copy cost between survivor spaces on minor collections serial collector the serial collector xx useserialgc is the simplest collector and is a good option for single processor systems it also has the smallest footprint of any collector it uses a single thread for both minor and major collections objects are allocated in the tenured space using a simple bump the pointer algorithm major collections are triggered when the tenured space is full parallel collector the parallel collector comes in two forms the parallel collector xx useparallelgc which uses multiple threads to perform minor collections of the young generation and a single thread for major collections on the old generation the parallel old collector xx useparalleloldgc the default since java 7u4 uses multiple threads for minor collections and multiple threads for major collections objects are allocated in the tenured space using a simple bump the pointer algorithm major collections are triggered when the tenured space is full on multiprocessor systems the parallel old collector will give the greatest throughput of any collector it has no impact on a running application until a collection occurs and then will collect in parallel using multiple threads using the most efficient algorithm this makes the parallel old collector very suitable for batch applications the cost of collecting the old generations is affected by the number of objects to retain to a greater extent than by the size of the heap therefore the efficiency of the parallel old collector can be increased to achieve greater throughput by providing more memory and accepting larger but fewer collection pauses expect the fastest minor collections with this collector because the promotion to tenured space is a simple bump the pointer and copy operation for server applications the parallel old collector should be the first port of call however if the major collection pauses are more than your application can tolerate then you need to consider employing a concurrent collector that collects the tenured objects concurrently while the application is running note expect pauses in the order of one to five seconds per gb of live data on modern hardware while the old generation is compacted note the parallel collector can sometimes gain performance benefits from xx usenuma on multi socket cpu server applications by allocating eden memory for threads local to the cpu socket it is a shame this feature is not available to the other collectors concurrent mark sweep cms collector the cms xx useconcmarksweepgc collector runs in the old generation collecting tenured objects that are no longer reachable during a major collection it runs concurrently with the application with the goal of keeping sufficient free space in the old generation so that a promotion failure from the young generation does not occur promotion failure will trigger a fullgc cms follows a multistep process initial mark find gc roots concurrent mark mark all reachable objects from the gc roots concurrent pre clean check for object references that have been updated and objects that have been promoted during the concurrent mark phase by remarking re mark capture object references that have been updated since the pre clean stage concurrent sweep update the free lists by reclaiming memory occupied by dead objects concurrent reset reset data structures for next run as tenured objects become unreachable the space is reclaimed by cms and put on free lists when promotion occurs the free lists must be searched for a suitable sized hole for the promoted object this increases the cost of promotion and thus increases the cost of the minor collections compared to the parallel collector note cms is not a compacting collector which over time can result in old generation fragmentation object promotion can fail because a large object may not fit in the available holes in the old generation when this happens a promotion failed message is logged and a fullgc is triggered to compact the live tenured objects for such compaction driven fullgcs expect pauses to be worse than major collections using the parallel old collector because cms uses only a single thread for compaction cms is mostly concurrent with the application which has a number of implications first cpu time is taken by the collector thus reducing the cpu available to the application the amount of time required by cms grows linearly with the amount of object promotion to the tenured space second for some phases of the concurrent gc cycle all application threads have to be brought to a safepoint for marking gc roots and performing a parallel re mark to check for mutation note if an application sees significant mutation of tenured objects then the re mark phase can be significant at the extremes it may take longer than a full compaction with the parallel old collector cms makes fullgc a less frequent event at the expense of reduced throughput more expensive minor collections and greater footprint the reduction in throughput can be anything from 10 40 compared to the parallel collector depending on promotion rate cms also requires a 20 greater footprint to accommodate additional data structures and floating garbage that can be missed during the concurrent marking that gets carried over to the next cycle high promotion rates and resulting fragmentation can sometimes be reduced by increasing the size of both the young and old generation spaces note cms can suffer concurrent mode failures which can be seen in the logs when it fails to collect at a sufficient rate to keep up with promotion this can be caused when the collection commences too late which can sometimes be addressed by tuning but it can also occur when the collection rate cannot keep up with the high promotion rate or with the high object mutation rate of some applications if the promotion rate or mutation rate of the application is too high then your application might require some changes to reduce the promotion pressure adding more memory to such a system can sometimes make the situation worse as cms would then have more memory to scan garbage first g1 collector g1 xx useg1gc is a new collector introduced in java 6 and now officially supported as of java 7u4 it is a partially concurrent collecting algorithm that also tries to compact the tenured space in smaller incremental stop the world pauses to try and minimize the fullgc events that plague cms because of fragmentation g1 is a generational collector that organizes the heap differently from the other collectors by dividing it into a large number 2000 of fixed size regions of variable purpose rather than contiguous regions for the same purpose g1 takes the approach of concurrently marking regions to track references between regions and to focus collection on the regions with the most free space these regions are then collected in stop the world pause increments by evacuating the live objects to an empty region thus compacting in the process the regions to be collected in a cycle are known as the collection set objects larger than 50 of a region are allocated in humongous regions which are a multiple of region size allocation and collection of humongous objects can be very costly under g1 and to date has had little or no optimisation effort applied the challenge with any compacting collector is not the moving of objects but the updating of references to those objects if an object is referenced from many regions then updating those references can take significantly longer than moving the object g1 tracks which objects in a region have references from other regions via the remembered sets remember sets are collections of cards that have been marked for mutation if the remembered sets become large then g1 can significantly slow down when evacuating objects from one region to another the length of the associated stop the world event ten...
|