Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Network Attached Processing $B$N(B Pauseless GC
[go: Go Back, main page]

Network Attached Processing $B$N(B Pauseless GC

$B:n@.F|!'(B2005.11.12
$B=$@5F|!'(B2005.11.18

$B99?7MzNr(B
(2005.11.18) $B5SCm(B*2$B$r2CI.!#(B
(2005.11.17) $BJ8>O$r?dZJ!#(B
(2005.11.14) NMT bit $B$N(B read barrier $B$K$D$$$F13$r=q$$$F$$$?$N$G=$@5!#(B

$BL\
  1. $BA0CV$-(B
  2. Pauseless GC
  3. Marking Phase
  4. Relocation & Remap Phase
  5. $B$*$7$^$$(B
  6. $B;29MJ88%(B

Azul Sysmtes ($BJF(B, $BF|(B) $B$O!"(B Java $B$d(B .NET $B$KFC2=$7$?@lMQ7W;;5!(B Network Attached Processing (NAP) $B$rDs>'$7!"(B $B@=IJ$H$7$F(B Azul Compute Appliance $B$r3+H/$7$?!#(B $B2TF0Cf$N(B Solaris/Linux $B$N(B J2SE/J2EE $B%7%9%F%`$,$"$l$P!"(B $B$=$N(B Java VM $B$r(B Azul Systems $B$,Ds6!$9$k%9%?%V(B JVM $B$KCV$-49$($k$@$1$G!"(B $B85$N%^%7%s$GAw!&*1)$B!#(B

Azul Systems $B$O(B Java $B%W%m%0%i%`$r9bB.$KF0$+$9$?$a$K@lMQ$N(B CPU (Vega) $B$r0l$+$i@_7W!&e$GF0$/(B Azul Virtual Machine $B$bFH<+3+H/$7$?(B(*2)$B!#(B $B$=$N$?$a$U$D!A$N(B CPU $BMQ$N(B Java VM $B$H$O0[$J$kFH<+5!9=$r?tB?$/Hw$($F$$$k!#(B $B$3$N%Z!<%8$G$O(B NAP $B$NFCJavaOne Tokyo 2005 $B$G(B $B3+H/R2p$9$k!#(B

Network Attached Processor
Azul Compute Appliance
$B$3$N%\%G%#$G(B 96 $B%3%"$N(B SMP $B%^%7%s(B

1. $BA0CV$-(B

$B%,!<%Y!<%8%3%l%/%7%g%s(B(GC) $B$NJ,N`J}K!$K$O(B Stop-The-World $B7?(B (STW) $B$H(B On-the-fly $B7?(B $B$N(B 2 $B$D$KJ,$1$kJ,N`$,$"$k!#(B STW $B$O(B GC $B$,5/F0$9$kA0$K%"%W%j%1!<%7%g%s%9%l%C%I(B(Java $B$N>l9g$O(B Java $B%9%l%C%I(B) $B$r!V;~$h;_$^$l!W$HA4$FDd;_$5$;$F!"(B $B%,!<%Y!<%8$H$J$C$?%*%V%8%'%/%H$r2s<}$7!"(B $B2s<}$,=*$o$C$?$i%"%W%j%1!<%7%g%s%9%l%C%I$N$r:F3+$9$k%?%$%W$N(B GC $B$G$"$k!#(B $B$=$N$?$a(B GC $B%]!<%:;~4V(B $B$,B8:_$7!"(B $B$3$N;~4VCf$O%"%W%j%1!<%7%g%s$N=hM}$b%?%$%^!<=hM}$b%M%C%H%o!<%/$NBT$AuBV$,B3$/!#(B $B0lJ}(B On-the-fly $B7?(B GC $B$N>l9g!"%"%W%j%1!<%7%g%s%9%l%C%I$H(B GC $B%9%l%C%I$,J?9T$KF0:n$7!"(B $B%"%W%j%1!<%7%g%s%9%l%C%I$r40A4$KDd;_$5$;$k$3$H$J$/!"(B GC $B%9%l%C%I$,%,!<%Y!<%8$r:FMxMQ2DG=$K$7$F$f$/!#(B $B>e$N@bL@$@$1$rFI$`$H(B STW $B7?$H(B On-the-fly $B7?$rHf$Y$k$H(B On-the-fly $B7?$NJ}$,M%$l$F$$$k$H;W$&$+$b$7$l$J$$$,!"(B GC $B0J30$b4^$a$?A4BN$rHf3S$9$k$H(B On-the-fly $B7?(B GC $B$O(B STW $B7?(B GC $B$KIi$1$k$3$H$,B?$$!#(B $B$=$N$?$a(B GC $B$N:NMQ>u67$r8+$k$K(B STW $B7?J}$,M-Mx$G$"$k!#(B

$B$?$@(B GC $B:NMQ$K@hJ\$r$D$1$?(B Java $B%7%9%F%`$O!"(B $B%(%s%?!<%W%i%$%:%7%9%F%`$N@$3&$G;HMQ$5$l$k$3$H$,B?$$!#(B STW $B7?(B GC $B$NB?$/$O%a%b%j$N;HMQNL$KHfNc$7$F(B GC $B%]!<%:;~4V$,?-$S$F$f$/798~$,$"$k$N$G!"(B Java $B2>A[%^%7%s$K%.%,%P%$%HC10L$N%a%b%j$,M?$($i$l$k$H!"(B GC $B%]!<%:;~4V$O?tIC!A?tJ,$KE~C#$9$k$h$&$K$J$k!#(B $B$3$l$G$O$?$^$i$s$N$G:G6a$N(B Sun$B!"(BIBM $B$N(B Java $B2>A[%^%7%s$O(B STW $B7?$H(B On-the-fly $B7?$N@^Co$G$"$k(B Mostly Concurrent Mark & Sweep $B$r:NMQ$7$?$j$7$F!"(BGC $B%]!<%:;~4V$NA}Bg$rN?$4$&$H$7$F$$$k!#(B $B$7$+$7(B mostly $B$H$$$&C18l$,$D$/$h$&$K!"(B $B$3$N(B GC $B$O40A4$JL5Dd;_(B GC $B$G$O$J$/!"(B $B$d$O$j;HMQ%a%b%jNL$KHfNc$7$?(BGC$BDd;_;~4V$,$+$+$k!#(B


2. Pauseless GC

$B$3$3$+$iK\Bj!#(B Azul Sytems $B$N(B NAP $B$O(B Pauseless GC $B$H$$$&0lIwJQ$o$C$?(B GC $B%"%k%4%j%:%`$r:NMQ$7$F$$$k!#(B Pauseless GC $B$OM}O@>e(B STW $B$,$J$$!#(B $B$K$b4X$o$i$:@-G=$b$"$^$j0-$/$J$$$H$$$&%-0u$b$N!#(B

Pauseless GC $B$O!"(B $B$^$:0J2<$N(B 3 $B$D$N%U%'!<%:$r;}$D(B GC $B$G$"$k!#(B

  1. Marking phase: $B@8$-$F$$$k%*%V%8%'%/%H$rC5$9$?$a%^!<%-%s%0$r9T$&!#(B
  2. Relocation phase: $BO"B3$7$?NN0h$r%U%j!<$K$9$k$?$a!"%*%V%8%'%/%H$rJL$N>l=j$K0\F0$5$;$k!#(B
  3. Remap phase: $B0\F085$N%*%V%8%'%/%H$r;X$9A4$F$N%]%$%s%?$r0\F0@h$r;X$9$h$&$K=q$-49$($k!#(B

GC $B%9%l%C%I$O(B marking $B"*(B relocation $B"*(B remap $B$N=g$K(B GC $B$r

$BCmL\$9$Y$-$O(B Pauseless GC $B$O!V%*%V%8%'%/%H$N0\F0!W$r$d$k%?%$%W$N(B GC $B$@$H$$$&E@!#(B GC $B$NJL$NJ,N`J}K!$G$O!"(B Mark & Sweep GC $B$N$h$&$K$$$C$?$s%*%V%8%'%/%H$r3d$jEv$F$?$i0\F0$5$;$:6u$-NN0h$O%U%j!<%j%9%H$G4IM}$9$k(B GC $B$H!"(B Copying GC $B$d(B Mark & Compact GC $B$N$h$&$K%*%V%8%'%/%H$r0\F0$5$;$FO"B3$7$?6u$-NN0h$r:n$C$F$d$k(B GC $B$KJ,N`$9$k$3$H$,$G$-$k!#(B

$BA0l9g$N1|$N

$B0lJ}!"(B $B8ee$2$k$3$H$,$G$-$k!#(B $B$?$@$7$U$D!A$N%"!<%-%F%/%A%c$G$N(B GC $BuBV$GF1;~$K9T$&I,MW$,$"$k(B(*3)$B!#(B $B$=$N$?$a(B 1$B2s$N(B GC $B%]!<%:;~4V$,$I$&$7$F$bD9$/$J$k798~$K$"$k!#(B $B$7$+$7(B Pauseless GC $B$N>l9g(B $B$3$3$b(B concurrent $B$KF0:n$5$;$k$3$H$,$G$-$k(B $B$N$,@($$$N$@!#(B

$B$b$&0lE@$9$4$$$N$O(Bmarking $B$,40A4$K(B concurrent$B$JE@$@!#(B Mostly concurrent $B$G$O$J$$!#(B $B$3$N$B%O!<%I%&%'%"!&%5%]!<%H(B$B$@!#(B


3. Marking Phase

Marking $B$r(B Java $B%9%l%C%I$H(B GC $B%9%l%C%I$GJBNs$K$d$k$N$OFq$7$$!#(B 2$B$DLdBj$,$"$k!#(B

1$B$D$O!"(B marking $B$r$7$F$$$k4V$K(B Java $B%9%l%C%I$,%W%m%0%i%`$r?J$a$F$7$^$&$H!"(B $B$=$l$^$G@8$-$F$$$?%*%V%8%'%/%H$,;`$s$G$7$^$&2DG=@-$,$"$k$3$H!#(B $B$=$N$?$a(B concurrent marking $B$O!VK\Ev$O%,!<%Y!<%8$J$s$@$1$I@8$-$F$$$k$H%^!<%/$r$D$1$F$7$^$&!W2DG=@-$,$"$k!#(B $B$?$@$3$&$$$&O3$l%,!<%Y!<%8$O!"8zN($,0-$/$J$k$,%(%i!<$K$O$J$i$J$$$N$G!"L5;k$9$k$3$H$O2DG=$@!#(B

$B$b$&(B1$B$D$O$h$j?<9o$G!"(B $B!VK\Ev$O@8$-$F$$$k$s$@$1$I%^!<%/$,$D$1$i$l$J$$!W2DG=@-$@!#(B $B%^!<%-%s%0$7$?8e$N%*%V%8%'%/%H$r(B Java $B%9%l%C%I$,=q$-49$($F$7$^$&$HLdBj$,H/@8$9$k!#(B $B?^(B1$B$N$h$&$J%Q%?!<%s$O!"(B GC $B%9%l%C%I$H(B Java $B%9%l%C%I$,%3%s%F%-%9%H%9%$%C%A$K$h$C$F%?%$%`%9%i%$%9$7$J$,$iF0$$$F$$$k$H9M$($FM_$7$$!#(B GC $B%9%l%C%I$,(B Step1 $B$^$G=hM}$r?J$a$?8e$GDd;_$7!"(BJava $B%9%l%C%I$,(B Step2 $B$N=hM}$r$7$F$7$^$&$H!"(B Step3 $B$G(B GC $B%9%l%C%I$,:F3+$7$F$b%*%V%8%'%/%H(B E $B$,L$%^!<%/$N$^$^J|CV$5$l$k$3$H$K$J$k!#(B $B8m$C$F%,!<%Y!<%8$HH=Dj$5$l$F$7$^$&$N$@!#(B $B%*%V%8%'%/%H(B E $B$r2s<}$7$F$7$^$&$H!"(B $B%(%i!<$,H/@8$9$k$3$H$K$J$k!#(B

$B?^(B1: $B%^!<%-%s%0$rJBNs$K9T$C$?l9g$NLdBj(B">
$B?^(B1: $B%^!<%-%s%0$rJBNs$K9T$C$?>l9g$NLdBj(B

Mostly Concurrent Marking

$B$3$N%^!<%/O3$l$NLdBj$r(B Mostly Concurrent Marking $B$O!"(B concurrent marking phase $B$H(B serial makring phase $B$N(B 2$B$D$KJ,$1$k$3$H$G2r7h$7$?!#(B $B:G=i!"(BGC $B%9%l%C%I$,(B concurrent marking phase $B$r=hM}$7$F$$$k4V$O(B Java $B%9%l%C%I$KF0:n$5$;$k$3$H$,$G$-$k$,!"(B concurrent marking phase $B$,=*N;$9$k$H(B Java $B%9%l%C%I$ODd;_$5$;$F(B GC $B%9%l%C%I$@$1$,(B serial marking phase $B$GEI$j1L$i$7$N2r7h$r$9$k!#(B $B$D$^$j(B serial marking phase $BCf$O(B STW $B$@!#(B

$BEI$j;D$7$H$J$k$N$O!"(B Java $B%9%l%C%I$K$h$C$F;2>H$,=q$-49$($i$l$?%*%V%8%'%/%H$G$"$k!#(B $B$=$N$?$a(B Java $B%9%l%C%I$O(B write barrier $B$rF3F~$7!"(B $B;2>H$N=q$-49$($,5/$3$C$?%*%V%8%'%/%H$K@lMQ$N%?%0$rBG$C$F$$$/!#(B Serial marking phase $B$G$O!"(B $B!V%^!<%/:Q$_$G$"$j!W$+$D!V=q$-49$(%?%0!W$,$D$$$?%*%V%8%'%/%H$r5/E@$K$7$F(B 2$BEYL\$N%^!<%-%s%0$r9T$&!#(B $B=hM}$,40N;$9$l$P!"@8$-$F$$$k%*%V%8%'%/%H$NA4$F$,%^!<%/:Q$_$K$J$k!#(B

$B?^(B2: Mostly Concurrent $B$N2r7hJ}K!(B
$B?^(B2: Mostly Concurrent $B$N2r7hJ}K!(B

$B$@$+(B mostly concurrent marking $B$O!"(B serial makring phase $B$G$I$&$7$F$b(B STW $B$,I,MW$K$J$C$F$7$^$&!#(B $B7P83E*$K$O(B concurrent marking phase $B$GBgItJ,$N%^!<%-%s%0$r:Q$^$;$k$3$H$,$G$-(B serial marking phase $B$O;D$j$NItJ,$@$1$r9T$&$N$@$,!"(B $B%*%V%8%'%/%H$N%j%s%/4X78$K$h$C$F$O!"(B serial marking phase $B$K;~4V$,$+$+$k$3$H$b$"$k!#(B $B$3$N:]$N(B GC $B%]!<%:;~4V$O$d$O$jLdBj$@!#(B

Pauseless GC $B$N(B Concurrent Marking

Pauseless GC $B$OJL$N%"%W%m!<%A$r;H$&!#(B $B$=$l$O=d2s$7$?%*%V%8%'%/%H$K%^!<%/$r$D$1$k$HF1;~$K!"(B $B=d2s$K;H$C$?;2>H$K$b%A%'%C%/$r$D$1$k$H$$$&J}K!$@!#(B Java $B$N;2>H$Oe$N%*%V%8%'%/%H$N0LCV$r;X$9!V%]%$%s%?!W$H$7$Fo$K(B 0 $B$K$J$k!#(B $B>o$K(B 0 $B$K$J$C$F$$$k%S%C%H$H$$$&$N$O>iD9$J$N$G!"(B $B$3$N%S%C%H$N0l$D$r(B Not-Marked-Through (NMT) bit $B$H$$$&%?%0$KE>MQ$9$k!#(B GC $B%9%l%C%I$O(B marking $BCf$K=d2s$7$?;2>H(B($B%]%$%s%?(B)$B$N(B NMT $B%S%C%H$rN)$F!"(B $B=d2s!&L$=d2s$r6hJL$7$F$$$/!#(B

$BF1;~$K(B Java $B%9%l%C%I$b(B concurrent marking $B$K6(NO$9$k!#(B Java $B%9%l%C%I$,%*%V%8%'%/%H$N;2>H$r$9$k;~$K(B read barrier $B$r9T$&!#(B NMT bit $B$,%;%C%H$5$l$F$$$J$$;2>H(B($B%]%$%s%?(B)$B$r%m!<%I$9$k$H!"(B Java $B%9%l%C%I$OH/8+$7$?L$=d2s%]%$%s%?$r(B GC $B%9%l%C%I$N(B queue $B$KFM$C9~$_!"(B ($B8e$GF1$8%H%i%C%W$K0z$C$+$+$i$J$$$h$&$K(B) NMT bit $B$rN)$F$F85$N=hM}$KLa$k!#(B C++ $B$G$"$i$o$9$H(B LoadReferenceWithReadBarrier $B$N$h$&$K$J$k!#(B

Object* LoadReferenceWithReadBarrier(Object** address) {
  intptr_t value = (intptr_t)(*address);

  if (value & NMT_MASK) {
    return (Object*)(~7 & value);        // $B2<0L(B3$B%S%C%H$N%/%j%"(B
  } else {
    Object* pointer = (Object*)value;
    push_marking_queue(pointer);             // marking queue
    *address = (Object*) (value | NMT_MASK); // NMT bit $B$r%;%C%H(B 
    return pointer;
  }
}

// $B%a%b%j>e$K$"$k%*%V%8%'%/%H$N%]%$%s%?(B pointer $B$r;HMQ$9$k;~$O(B LoadReferenceWithReadBarrier $B$rDL$7$F$+$i(B
extern Object* pointer;

Object* p = LoadReferenceWithReadBarrier(&pointer);
int fieldValue = p->getField(fieldDescriptor);

$B$H$3$m$G(B NMT $B%S%C(B$B%H$N%"%$%G%"$O@N$+$i$"$C$?$N$@$,!"(B $B$3$N%"%$%G%"$O(B GC $B$NNr;K$NCf$KKd$b$l$F$7$^$C$F$$$?!#(B $B$=$l$O%=%U%H%&%'%"$G$3$N=hM}$r$d$m$&$H;W$&$H(B $B$+$J!A$j=E$$(B $B$N$@!#(B NMT $B%S%C%H$N85%"%$%G%"$b!"(B $B%A%C%W$r0l$+$i5/$3$7$?@lMQJBNs7W;;5!$NCf$GF0$$$F$$$?!#(B

NAP $B$O%W%m%;%C%5$K(B NMT bit $B%A%'%C%/IU$-%m!<%IL?Na(B $B$rDI2C$7$F(B $B$3$NLdBj$r2r7h$7$F$$$k!#(B Java $B%9%l%C%I$,;2>H%*%V%8%'%/%H$r%m!<%I$9$k;~$O!"$3$N@lMQ%m!<%IL?Na$NJ}$r;H$&!#(B $B@lMQ%m!<%IL?Na$O(B NMT bit $B$,%;%C%H$5$l$F$$$J$$L$=d2s$N%]%$%s%?$rFI$_9~$`$H!"(B $B9bB.$J%H%i%C%W%k!<%A%s$K@)8f$r0\$9!#(B $B%H%i%C%W%k!<%A%sFb$G(B read barrier $B=hM}$r40N;$9$k$H!"(B $B85$N%W%m%0%i%`$KI|5"$9$k!#(B $B0lJ}!"(B NMT bit $B$,%;%C%H$5$l$F$$$k>l9g$K$O(B $BDL>o$N%m!<%IL?Na$H$7$FF0:n$9$k!#(B $B$3$N;~$NCY1d$O%N!<%^%k$J%m!<%IL?Na$h$j(B1$B%5%$%/%kM>J,$K$+$+$kDxEY$J$N$G!"(B $BA4BN$H$7$F$OHs>o$K9bB.$K(B NMT bit $B$N=hM}$r?J$a$k$3$H$,2DG=$@!#(B


4. Relocation & Remap Phase

$B%*%V%8%'%/%H$,@8$-$F$$$k$+;`$s$G$$$k$+$,H=CG$G$-$?8e$O!"(B $B;`$s$G$$$k%*%V%8%'%/%H(B($B%,!<%Y!<%8(B)$B$r2s<}$9$kI,MW$,$"$k!#(B NAP $B$O0J2<$N$h$&$J86B'$G!"%,!<%Y!<%8$r2s<}$9$k!#(B

  1. NAP $B$O%R!<%W%a%b%j6u4V$r%Z!<%8$G6h@Z$C$F;HMQ$7$F$$$k!#(B $B%Z!<%8$O(B TLB $B%Z!<%8$N?tG\$K@_Dj$5$l$F$$$k!#(B
    $B@bL@>e!"%R!<%W%Z!<%8(B=TLB $B%Z!<%8$H$9$k!#(B
  2. $B%Z!<%8Fb$N$9$Y$F$N%*%V%8%'%/%H$,%,!<%Y!<%8$N>l9g!"(B $B$=$N%Z!<%8$O%U%j!<$H$J$k!#(B
  3. 2. $B$N%k!<%k$G%U%j!<2=$G$-$k%Q%?!<%s$O>/$J$$!#(B $B$=$3$G@8$-$F$$$k%*%V%8%'%/%H$,>/$J$$%Z!<%8$rA*Br$7!"(B $B$=$NCf$K$"$k%*%V%8%'%/%H$rJL%Z!<%8$K0\F0$5$;!"%Z!<%8Fb$r6u$K$9$k!#(B $B$=$N8e$G%Z!<%8$N%U%j!<2=$r9T$&!#(B

$B$b$&0l$DA0Ds$,$"$k!#(B NAP $B$O(B 64-bit $B%W%m%;%C%5$J$N$G!"$+$J$j9-$$2>A[%a%b%j6u4V$r;HMQ2DG=$@!#(B Java $B$N%R!<%W$O$3$N9-Bg$J2>A[%a%b%j6u4V>e$KG[CV$5$l$k!#(B $B$?$@$7mmap/munmap $B$N(B API $B$r;H$C$F(B $BE,;~E=$jIU$1$?$jGm$,$7$?$j$5$l$k!#(B $B>e$N%Z!<%8$N%U%j!<2=$H$O!"

Forwarding Pointer

GC $B%9%l%C%I$,%*%V%8%'%/%H$N0\F0$r(B Java $B%9%l%C%I$HJ?9T$7$F9T$&$N$O$+$J$j$NFqBj$@!#(B $B%*%V%8%'%/%H$N0\F0<+BN$O!"(B $B%*%V%8%'%/%H$r%3%T!<$7$F85$N$"$C$?%*%V%8%'%/%H$rGK2u(B($B2s<}(B)$B$9$l$P$h$$$N$@$,!"(B $B85$N%*%V%8%'%/%H$r;X$7$F$$$k;2>H(B($B%]%$%s%?(B)$B$r?7$7$$%*%V%8%'%/%H$r;X$9$h$&$K=q$-D>$5$J$1$l$P$J$i$J$$(B ($B$G$J$$$H(B dangling pointer $B$@(B)$B!#(B

$B$3$N$h$&$J%*%V%8%'%/%H$N0\F0(B & $B%]%$%s%?$ND%$jBX$(J}K!$H$7$F0lHLE*$J$N$O!"(B forwarding pointer $B$H8F$P$l$kuBV!W$H!V(BFowarding pointer $B$,Kd$a9~$^$l$?(B fowardee $B>uBV!W$NFsBV$,$"$j!"(B $B%?%0Ey$G6hJL$9$k$3$H$K$J$k!#(B $B%*%V%8%'%/%H$r;2>H$9$k>l9g!"(B $B;2>H@h$,(B forwardee $B>uBV$+$I$&$+$rKh2s%A%'%C%/$7!"(B fowardee $B$J$i(B forwarding pointer $B$rH$9$k!#(B

$B?^(B4: Forwarding Pointer
$B?^(B4: Forwarding Pointer
Object* CheckForwardingPointer(Object** address) {
  Object* pointer = *adress;

  if (pointer->is_forwarding()) {
    pointer = pointer->get_fowarding_address();
    *address = pointer;
  }
  return pointer;
}

$B$3$N$d$jJ}$O%3%9%H$KBg$-$JLdBj$,;D$k!#(B

Pauseless GC $B$N(B $B%*%V%8%'%/%H$N0\F0(B

NAP $B$N$H$C$?%*%V%8%'%/%H$N0\F0J}K!$O!"(B $B4pK\E*$K$O(B forwarding pointer $B$N9M$(J}$K6a$$!#(B $B$?$@$7(B $B%O!<%I%&%'%"%5%]!<%H(B $B$GLdBj$r2r7h$7$F$$$k!#(B $B4N$H$J$k%F%/%K%C%/$O%Z!<%8C10L$G$N(B TLB $B%Z!<%8$NB0@-JQ99$@!#(B

$B85!9(B UNIX $B7O(B OS $B$N2>A[%a%b%j$K$O%Z!<%8C10L$GFI$_!&=q$-!&mprotect API $B$,$"$C$?!#(B NAP $B$N%W%m%;%C%5$O$=$l$K2C$($F(B TLB $B5!G=$r3HD%$7!"FCl9g$O%H%i%C%W$,H/@8$9$k!#(B $B$=$N$?$a$3$N(B TLB $B%W%m%F%/%H$5$l$?%a%b%j%Z!<%8$O!"(B GC $B%9%l%C%I$O<+M3$KFI$_=q$-$G$-$k$,!"(B Java $B%9%l%C%I$K$N$_1F6A$rM?$($k!#(B

$B?^(B5: NAP $B$N%*%V%8%'%/%H$N0\F0(B
$B?^(B5: NAP $B$N%*%V%8%'%/%H$N0\F0(B

GC $B%9%l%C%I$OFC!$7$F$$$/!#(B

$B0lJ}!"(BJava $B%9%l%C%I$,0\F0Cf$N%*%V%8%'%/%H$r;X$9%]%$%s%?$rFI$_9~$`$H!"%H%i%C%W%k!<%A%s$K=hM}$,0\$k(B(*4)$B!#(B $B%H%i%C%W%k!<%A%s$G$O(B GC $B%9%l%C%I$,:n$C$?JQ49I=$r;2>H$7$F!"(B $BLdBj$H$J$k%]%$%s%?$NCM$r?7$7$$%"%I%l%9$K=q$-D>$7$F$+$iH(B($B%]%$%s%?(B)$B$NFbMF$O<+F0E*$K(B remap $B$5$l$F$$$k$3$H$K$J$k!#(B

$B$3$N$h$&$K(B Pauseless GC $B$N(B remap phase $B$O!"(B GC $B%9%l%C%I$H(B Java $B%9%l%C%I$NN>B&$G?J$s$G$$$/!#(B


5. $B$*$7$^$$(B

$B>e$N$h$&$J%O!<%I%&%'%"%5%]!<%H$rMQ$$$F(B NAP $B$O(B Puaseless GC $B$re$^$C$?$/LdBj$J$$C;$5$G$"$k$H$$$($h$&!#(B

$B$H$O$$$($M$'!#(B $B$3$N@-G=$O(B $B%O!<%I%&%'%"%5%]!<%H(B $B$"$C$F$N;rJ*$G$9$h!#(B $B$U$D!A$N%W%m%;%C%5(B (x86 / PowerPC / SPARC / IA-64) $B$H(B $B$U$D!A$N(B OS (Linux / Windows / Solaris) $B$G(B $B$3$l$HF1$8%"%k%4%j%:%`$r


6. $B;29MJ88%(B

1. JavaOne Tokyo 2005 The Pauseless GC Algorithm
2. Azul Systems: Pauseless Garbage Collection: Improving Application Scalability and Predictability
Azul $BZ$,I,MW!#(B
3. www.nminoru.jp: Mostly Concurrent Mark & Sweep $B$N2r@b(B
4. Richard Jones & Rafael Lins Garbage Collection: Algorithms for Automatic Dynamic Memory Management
Jones $B@h@8(B $B$N(B GC $B$N652J=q!#(B $B=iJbE*$JNr;K$+$iAjEv$J%"%I%P%s%9$^$G$,LVMe$5$l$F$$$k!#(B
Garbage Collection

$B5SCm(B

*1
$B%M%$%F%#%V%3!<%I$O(B NAP $B>e$G$O $B%[%9%H%^%7%s$H(B NAP $B$H$N4V$NDL?.$,I,MW$K$J$k$?$a!"(B $B%[%9%H%^%7%s$@$1$GJD$8$?(B Java VM $B$HHf$Y$k$H(B 100 $BG\0J>eCY$/$J$k$=$&$@!#(B
*2
Vega $B$N%Y!<%9$O(B 32 $B%l%8%9%?$rHw$($?(B 64-bit RISC CPU$B!#(B
$B$3$l$K(B Java VM $B$d(B .NET (CLR) $B$r9bB.$KF0:n$5$;$k$?$a$NFC $BJ,$+$C$F$$$kHO0O$G$O0J2<$N(B3$B$D$N5!9=$,$"$k!#(B

Pauseless GC $B$N$?$a$N(B read barrier $BL?Na(B
$B$3$l$OK\9F$G@bL@$7$?$b$N!#(B
Stack Based Allocation $B$N$?$a$N(B write barrier $BL?Na(B
Java $B$O%*%V%8%'%/%H$r%R!<%W$K3d$jIU$1$k$H$$$&%;%^%s%F%#%/%9$K$J$C$F$$$k$,!"(B $BFC$N%9%l%C%I$H$NF14|$,ITMW$G!"(B $B%R!<%W$r1x$5$J$$$?$a9bB.2=$,2DG=$@!#(B
$B$?$@$7%a%=%C%I(B M $B$NCf$G@8@.$5$l$?%*%V%8%'%/%H(B O $B$,%9%?%C%/3d$jIU$12DG=$J$?$a$K$O!"(B $B%a%=%C%I(B M $B$+$iC&=P$9$k;~$K(B O $B$No$K%3%9%H$N9b$$7W;;$,I,MW$K$J$C$F$7$^$&!#(B

NAP $B$G$O7Z$a$N%(%9%1!<%W2r@O$H%O!<%I%&%'%"%5%]!<%H$rMQ$$$F!"(B $B!VEj5!E*!W$J%9%?%C%/3d$jIU$1$r9T$&!#(B $B!V$3$N%*%V%8%'%/%H$O%9%?%C%/$K3d$jIU$1$i$l$=$&$@!W$HL\@1$r$D$1$F!"(B $BGnBG$rBG$C$F%9%?%C%/$K3d$jIU$1$F$7$^$&!#(B $B8e$O%O!<%I%&%'%"!&%5%]!<%H$K$h$k(B write barrier $BL?Na$,$3$l$r4F;k$7$F!"(B $B%9%?%C%/3d$jIU$1$5$l$?%*%V%8%'%/%H$N%]%$%s%?$,NN0h30$KC&=P$7$h$&$H$9$k$H%H%i%C%W$r$"$2$k!#(B $B%H%i%C%W%k!<%A%sFb$G$O!"(B $B!VGnBG$KIi$1$?!W%*%V%8%'%/%H$O%9%?%C%/$+$i%R!<%W$K0\F0$5$;$i$l$k$H$$$&@#K!(B ($B$3$N=hM}$O(B STW $B$r3]$1$:$K2DG=$@$,!"$=$l$J$j$K%Z%J%k%F%#%3%9%H$,$+$+$k(B)$B!#(B

Azul $B$O$$$m$$$m$J%W%m%0%i%`$G%F%9%H$7$F!"(B $BH>J,$0$i$$$N%*%V%8%'%/%H$r%9%?%C%/3d$jIU$1$G$-$k$3$H$r3NG'$7$F$$$k!#(B
Java synchronized methods & blocks $B$N$?$a$N%O!<%I%5%]!<%H(B
$B$3$l$O>\:Y$rCN$i$J$$$N$@$,(B cache $B5!9=$KMm$`$b$N$i$7$$!#(B
Intel $B$,(B Prescott $B$GF3F~$7$?F14|L?Na(B(MONITOR/MWAIT) $B$N$h$&$J$b$N$G$O$J$$$+$HM=A[$9$k(B (2003/2/23$B$NF|5-(B)$B!#(B
$B$^$?(B Chip-Multi-Processor $B$G(B 1$B$D$N%@%$>e$K(B 24 $B%3%"$r;}$D!#(B Azul Compute Appliance $B$O:GBg(B 16 $B%@%$$rEk:\$7(B 384 $B%3%"$G2TF0$5$;$k$3$H$,$G$-$k!#(B Appliance $B$N(B OS $B$O(B Linux 2.6 & Debian $B$r%+%9%?%^%$%:$7$?$b$N$r;H$C$F$$$F!"(B $BK\Ev$O$U$D$&$N(B UNIX $B%^%7%s$N$h$&$K%m%0%$%s$9$k$3$H$b$G$-$k$i$7$$!#(B
*3
$B%*%V%8%'%/%H$N;2>H$,%"%I%l%9$rD>@\J];}$9$k(B C $B$N%]%$%s%?%9%?%$%k$N>l9g$K$O$H$$$&C"$7=q$-$,$D$/!#(B $B;2>H$,4V@\%O%s%I%i$J$I$NJ}K!$G
*4
TLB $B%W%m%F%/%H$O(B GC $B$K4X78$J$$%*%V%8%'%/%H$N%"%/%;%9$O9bB.$G9T$($k$,!"(B $B%W%m%F%/%H%Z!<%8$K%"%/%;%9$,$"$C$?>l9g$O%H%i%C%W$,H/F0$9$k$?$a(B CheckForwardingPointer $B0J>e$K%3%9%H$,9b$/$J$k!#(B $B$?$@$7(B NAP $B$N(B GC $B$O!"(B $B@8$-$F$$$k%*%V%8%'%/%H$,AB$J%Z!<%8$rA*Br$7$F%*%V%8%'%/%H$N0\F0$r9T$C$F$$$k$N$G!"(B TLB $B%W%m%F%/%HNN0h$X$N%"%/%;%9$OL5;k$G$-$kDxEY$NIQEY$G$7$+H/@8$7$J$$$=$&$@!#(B $B$=$N$?$a!"$3$N5!9=$O==FsJ,$K%Z%$$9$k!#(B

$B%3%a%s%H(B

$B%3%a%s%H$r=q$-9~$`(B
[$B@FF#N5B@!JF|>&%(%l%/%H%m%K%/%9!K(B] 2005-12-26 10:36:22
$B=i$a$F%a!<%k$5$;$FD:$-$^$9!#(B
$BF|>&%(%l%/%H%m%K%/%9$K$F(BAzulComputeAppiance$B$N@=IJC4Ev$r$5$;$FD:$$$F$*$j$^$9@FF#N5B@$H?=$7$^$9!#(B

$BCfB2AEy$N%F%9%H$r9T$J$C$F$*$j$^$9!#(B
$B@=IJ$K$46=L#D:$1$l$PR2p$5$;$FD:$/$3$H$b2DG=$G$9!#(B

$B@'Hs$48!F$$NDx!"59$7$/$*4j$$CW$7$^$9!#(B
$B@FF#N5B@(B

TOP    $B7G<(HD(B    $BLa$k(B
Written by Nakamura Minoru