/*
* Copyright ( c ) 2018 , 2021 , Oracle and / or its affiliates . All rights reserved .
* Copyright ( c ) 2018 , Google and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*
*/
#include "precompiled.hpp"
#include "logging/log.hpp"
#include "logging/logTag.hpp"
#include "prims/jvmtiExport.hpp"
#include "runtime/atomic.hpp"
#include "runtime/handles.inline.hpp"
#include "runtime/sharedRuntime.hpp"
#include "runtime/threadHeapSampler.hpp"
// Cheap random number generator.
uint64_t ThreadHeapSampler::_rnd;
// Default is 512kb.
volatile int ThreadHeapSampler::_sampling_interval = 512 * 1024 ;
// Statics for the fast log
static const int FastLogNumBits = 10 ;
static const int FastLogCount = 1 << FastLogNumBits;
static const int FastLogMask = FastLogCount - 1 ;
static const double log_table[FastLogCount] = {
0 .000704269011247 , 0 .002111776479852 , 0 .003517912108602 , 0 .004922678569045 ,
0 .006326078524934 , 0 .007728114632254 , 0 .009128789539256 , 0 .010528105886485 ,
0 .011926066306808 , 0 .013322673425448 , 0 .014717929860010 , 0 .016111838220512 ,
0 .017504401109415 , 0 .018895621121649 , 0 .020285500844648 , 0 .021674042858370 ,
0 .023061249735335 , 0 .024447124040647 , 0 .025831668332026 , 0 .027214885159835 ,
0 .028596777067108 , 0 .029977346589579 , 0 .031356596255709 , 0 .032734528586714 ,
0 .034111146096593 , 0 .035486451292154 , 0 .036860446673046 , 0 .038233134731779 ,
0 .039604517953758 , 0 .040974598817306 , 0 .042343379793691 , 0 .043710863347156 ,
0 .045077051934941 , 0 .046441948007312 , 0 .047805554007589 , 0 .049167872372170 ,
0 .050528905530555 , 0 .051888655905378 , 0 .053247125912426 , 0 .054604317960672 ,
0 .055960234452294 , 0 .057314877782703 , 0 .058668250340571 , 0 .060020354507853 ,
0 .061371192659811 , 0 .062720767165044 , 0 .064069080385509 , 0 .065416134676548 ,
0 .066761932386908 , 0 .068106475858773 , 0 .069449767427783 , 0 .070791809423061 ,
0 .072132604167234 , 0 .073472153976460 , 0 .074810461160454 , 0 .076147528022505 ,
0 .077483356859507 , 0 .078817949961979 , 0 .080151309614087 , 0 .081483438093674 ,
0 .082814337672274 , 0 .084144010615144 , 0 .085472459181283 , 0 .086799685623453 ,
0 .088125692188207 , 0 .089450481115907 , 0 .090774054640751 , 0 .092096414990791 ,
0 .093417564387961 , 0 .094737505048093 , 0 .096056239180946 , 0 .097373768990222 ,
0 .098690096673594 , 0 .100005224422721 , 0 .101319154423276 , 0 .102631888854968 ,
0 .103943429891557 , 0 .105253779700883 , 0 .106562940444883 , 0 .107870914279614 ,
0 .109177703355275 , 0 .110483309816226 , 0 .111787735801012 , 0 .113090983442381 ,
0 .114393054867307 , 0 .115693952197011 , 0 .116993677546981 , 0 .118292233026990 ,
0 .119589620741122 , 0 .120885842787790 , 0 .122180901259752 , 0 .123474798244141 ,
0 .124767535822473 , 0 .126059116070680 , 0 .127349541059119 , 0 .128638812852598 ,
0 .129926933510393 , 0 .131213905086272 , 0 .132499729628509 , 0 .133784409179907 ,
0 .135067945777817 , 0 .136350341454156 , 0 .137631598235428 , 0 .138911718142743 ,
0 .140190703191836 , 0 .141468555393084 , 0 .142745276751529 , 0 .144020869266892 ,
0 .145295334933597 , 0 .146568675740786 , 0 .147840893672337 , 0 .149111990706888 ,
0 .150381968817848 , 0 .151650829973421 , 0 .152918576136622 , 0 .154185209265297 ,
0 .155450731312137 , 0 .156715144224702 , 0 .157978449945432 , 0 .159240650411673 ,
0 .160501747555687 , 0 .161761743304675 , 0 .163020639580794 , 0 .164278438301170 ,
0 .165535141377924 , 0 .166790750718180 , 0 .168045268224090 , 0 .169298695792846 ,
0 .170551035316700 , 0 .171802288682983 , 0 .173052457774115 , 0 .174301544467631 ,
0 .175549550636190 , 0 .176796478147599 , 0 .178042328864822 , 0 .179287104646004 ,
0 .180530807344482 , 0 .181773438808808 , 0 .183015000882756 , 0 .184255495405349 ,
0 .185494924210866 , 0 .186733289128866 , 0 .187970591984199 , 0 .189206834597024 ,
0 .190442018782825 , 0 .191676146352428 , 0 .192909219112013 , 0 .194141238863136 ,
0 .195372207402739 , 0 .196602126523170 , 0 .197830998012197 , 0 .199058823653021 ,
0 .200285605224298 , 0 .201511344500146 , 0 .202736043250167 , 0 .203959703239463 ,
0 .205182326228643 , 0 .206403913973847 , 0 .207624468226758 , 0 .208843990734615 ,
0 .210062483240231 , 0 .211279947482008 , 0 .212496385193948 , 0 .213711798105673 ,
0 .214926187942435 , 0 .216139556425135 , 0 .217351905270334 , 0 .218563236190271 ,
0 .219773550892874 , 0 .220982851081777 , 0 .222191138456332 , 0 .223398414711628 ,
0 .224604681538499 , 0 .225809940623543 , 0 .227014193649133 , 0 .228217442293435 ,
0 .229419688230416 , 0 .230620933129866 , 0 .231821178657404 , 0 .233020426474497 ,
0 .234218678238471 , 0 .235415935602526 , 0 .236612200215751 , 0 .237807473723136 ,
0 .239001757765583 , 0 .240195053979925 , 0 .241387363998937 , 0 .242578689451346 ,
0 .243769031961852 , 0 .244958393151134 , 0 .246146774635865 , 0 .247334178028729 ,
0 .248520604938429 , 0 .249706056969705 , 0 .250890535723341 , 0 .252074042796184 ,
0 .253256579781154 , 0 .254438148267256 , 0 .255618749839596 , 0 .256798386079390 ,
0 .257977058563978 , 0 .259154768866840 , 0 .260331518557602 , 0 .261507309202055 ,
0 .262682142362165 , 0 .263856019596082 , 0 .265028942458160 , 0 .266200912498961 ,
0 .267371931265274 , 0 .268542000300123 , 0 .269711121142782 , 0 .270879295328784 ,
0 .272046524389938 , 0 .273212809854334 , 0 .274378153246363 , 0 .275542556086722 ,
0 .276706019892431 , 0 .277868546176841 , 0 .279030136449649 , 0 .280190792216907 ,
0 .281350514981036 , 0 .282509306240837 , 0 .283667167491501 , 0 .284824100224623 ,
0 .285980105928212 , 0 .287135186086704 , 0 .288289342180970 , 0 .289442575688332 ,
0 .290594888082571 , 0 .291746280833939 , 0 .292896755409173 , 0 .294046313271500 ,
0 .295194955880655 , 0 .296342684692889 , 0 .297489501160979 , 0 .298635406734241 ,
0 .299780402858540 , 0 .300924490976300 , 0 .302067672526519 , 0 .303209948944775 ,
0 .304351321663238 , 0 .305491792110684 , 0 .306631361712501 , 0 .307770031890703 ,
0 .308907804063939 , 0 .310044679647506 , 0 .311180660053355 , 0 .312315746690106 ,
0 .313449940963058 , 0 .314583244274195 , 0 .315715658022202 , 0 .316847183602472 ,
0 .317977822407119 , 0 .319107575824984 , 0 .320236445241649 , 0 .321364432039446 ,
0 .322491537597468 , 0 .323617763291577 , 0 .324743110494416 , 0 .325867580575418 ,
0 .326991174900817 , 0 .328113894833656 , 0 .329235741733800 , 0 .330356716957943 ,
0 .331476821859620 , 0 .332596057789214 , 0 .333714426093970 , 0 .334831928118000 ,
0 .335948565202297 , 0 .337064338684741 , 0 .338179249900111 , 0 .339293300180094 ,
0 .340406490853295 , 0 .341518823245243 , 0 .342630298678407 , 0 .343740918472201 ,
0 .344850683942991 , 0 .345959596404112 , 0 .347067657165871 , 0 .348174867535556 ,
0 .349281228817452 , 0 .350386742312842 , 0 .351491409320021 , 0 .352595231134304 ,
0 .353698209048035 , 0 .354800344350596 , 0 .355901638328417 , 0 .357002092264984 ,
0 .358101707440847 , 0 .359200485133632 , 0 .360298426618046 , 0 .361395533165889 ,
0 .362491806046063 , 0 .363587246524577 , 0 .364681855864560 , 0 .365775635326268 ,
0 .366868586167093 , 0 .367960709641570 , 0 .369052007001388 , 0 .370142479495399 ,
0 .371232128369622 , 0 .372320954867259 , 0 .373408960228696 , 0 .374496145691516 ,
0 .375582512490507 , 0 .376668061857668 , 0 .377752795022220 , 0 .378836713210614 ,
0 .379919817646538 , 0 .381002109550926 , 0 .382083590141966 , 0 .383164260635110 ,
0 .384244122243078 , 0 .385323176175872 , 0 .386401423640778 , 0 .387478865842379 ,
0 .388555503982561 , 0 .389631339260521 , 0 .390706372872775 , 0 .391780606013166 ,
0 .392854039872873 , 0 .393926675640417 , 0 .394998514501672 , 0 .396069557639868 ,
0 .397139806235604 , 0 .398209261466852 , 0 .399277924508967 , 0 .400345796534695 ,
0 .401412878714178 , 0 .402479172214964 , 0 .403544678202014 , 0 .404609397837712 ,
0 .405673332281866 , 0 .406736482691724 , 0 .407798850221975 , 0 .408860436024760 ,
0 .409921241249679 , 0 .410981267043796 , 0 .412040514551651 , 0 .413098984915263 ,
0 .414156679274141 , 0 .415213598765286 , 0 .416269744523207 , 0 .417325117679919 ,
0 .418379719364956 , 0 .419433550705378 , 0 .420486612825775 , 0 .421538906848277 ,
0 .422590433892561 , 0 .423641195075856 , 0 .424691191512953 , 0 .425740424316211 ,
0 .426788894595561 , 0 .427836603458520 , 0 .428883552010191 , 0 .429929741353273 ,
0 .430975172588069 , 0 .432019846812492 , 0 .433063765122069 , 0 .434106928609955 ,
0 .435149338366930 , 0 .436190995481417 , 0 .437231901039479 , 0 .438272056124831 ,
0 .439311461818846 , 0 .440350119200562 , 0 .441388029346687 , 0 .442425193331607 ,
0 .443461612227394 , 0 .444497287103809 , 0 .445532219028312 , 0 .446566409066067 ,
0 .447599858279950 , 0 .448632567730552 , 0 .449664538476192 , 0 .450695771572915 ,
0 .451726268074506 , 0 .452756029032494 , 0 .453785055496155 , 0 .454813348512524 ,
0 .455840909126398 , 0 .456867738380343 , 0 .457893837314700 , 0 .458919206967592 ,
0 .459943848374931 , 0 .460967762570422 , 0 .461990950585571 , 0 .463013413449693 ,
0 .464035152189912 , 0 .465056167831175 , 0 .466076461396253 , 0 .467096033905747 ,
0 .468114886378099 , 0 .469133019829591 , 0 .470150435274359 , 0 .471167133724392 ,
0 .472183116189541 , 0 .473198383677527 , 0 .474212937193944 , 0 .475226777742266 ,
0 .476239906323851 , 0 .477252323937953 , 0 .478264031581720 , 0 .479275030250205 ,
0 .480285320936372 , 0 .481294904631098 , 0 .482303782323183 , 0 .483311954999353 ,
0 .484319423644267 , 0 .485326189240524 , 0 .486332252768664 , 0 .487337615207182 ,
0 .488342277532524 , 0 .489346240719100 , 0 .490349505739287 , 0 .491352073563435 ,
0 .492353945159870 , 0 .493355121494907 , 0 .494355603532845 , 0 .495355392235982 ,
0 .496354488564616 , 0 .497352893477049 , 0 .498350607929600 , 0 .499347632876599 ,
0 .500343969270403 , 0 .501339618061397 , 0 .502334580197997 , 0 .503328856626662 ,
0 .504322448291891 , 0 .505315356136237 , 0 .506307581100306 , 0 .507299124122766 ,
0 .508289986140348 , 0 .509280168087859 , 0 .510269670898178 , 0 .511258495502268 ,
0 .512246642829179 , 0 .513234113806053 , 0 .514220909358129 , 0 .515207030408751 ,
0 .516192477879367 , 0 .517177252689541 , 0 .518161355756956 , 0 .519144787997414 ,
0 .520127550324851 , 0 .521109643651332 , 0 .522091068887064 , 0 .523071826940395 ,
0 .524051918717823 , 0 .525031345124000 , 0 .526010107061737 , 0 .526988205432007 ,
0 .527965641133954 , 0 .528942415064895 , 0 .529918528120324 , 0 .530893981193921 ,
0 .531868775177554 , 0 .532842910961282 , 0 .533816389433366 , 0 .534789211480267 ,
0 .535761377986656 , 0 .536732889835414 , 0 .537703747907644 , 0 .538673953082668 ,
0 .539643506238036 , 0 .540612408249530 , 0 .541580659991169 , 0 .542548262335212 ,
0 .543515216152167 , 0 .544481522310791 , 0 .545447181678094 , 0 .546412195119352 ,
0 .547376563498101 , 0 .548340287676148 , 0 .549303368513575 , 0 .550265806868740 ,
0 .551227603598288 , 0 .552188759557150 , 0 .553149275598548 , 0 .554109152574003 ,
0 .555068391333337 , 0 .556026992724677 , 0 .556984957594463 , 0 .557942286787447 ,
0 .558898981146702 , 0 .559855041513625 , 0 .560810468727941 , 0 .561765263627707 ,
0 .562719427049319 , 0 .563672959827513 , 0 .564625862795372 , 0 .565578136784329 ,
0 .566529782624171 , 0 .567480801143044 , 0 .568431193167460 , 0 .569380959522294 ,
0 .570330101030798 , 0 .571278618514596 , 0 .572226512793695 , 0 .573173784686486 ,
0 .574120435009748 , 0 .575066464578656 , 0 .576011874206780 , 0 .576956664706092 ,
0 .577900836886970 , 0 .578844391558203 , 0 .579787329526992 , 0 .580729651598958 ,
0 .581671358578144 , 0 .582612451267020 , 0 .583552930466485 , 0 .584492796975875 ,
0 .585432051592962 , 0 .586370695113965 , 0 .587308728333545 , 0 .588246152044817 ,
0 .589182967039351 , 0 .590119174107175 , 0 .591054774036780 , 0 .591989767615125 ,
0 .592924155627638 , 0 .593857938858223 , 0 .594791118089265 , 0 .595723694101627 ,
0 .596655667674663 , 0 .597587039586216 , 0 .598517810612622 , 0 .599447981528719 ,
0 .600377553107844 , 0 .601306526121841 , 0 .602234901341064 , 0 .603162679534382 ,
0 .604089861469180 , 0 .605016447911364 , 0 .605942439625368 , 0 .606867837374152 ,
0 .607792641919210 , 0 .608716854020573 , 0 .609640474436812 , 0 .610563503925040 ,
0 .611485943240922 , 0 .612407793138670 , 0 .613329054371054 , 0 .614249727689401 ,
0 .615169813843603 , 0 .616089313582115 , 0 .617008227651965 , 0 .617926556798751 ,
0 .618844301766652 , 0 .619761463298424 , 0 .620678042135410 , 0 .621594039017540 ,
0 .622509454683335 , 0 .623424289869911 , 0 .624338545312985 , 0 .625252221746873 ,
0 .626165319904499 , 0 .627077840517394 , 0 .627989784315704 , 0 .628901152028190 ,
0 .629811944382234 , 0 .630722162103839 , 0 .631631805917638 , 0 .632540876546891 ,
0 .633449374713493 , 0 .634357301137976 , 0 .635264656539513 , 0 .636171441635921 ,
0 .637077657143663 , 0 .637983303777853 , 0 .638888382252261 , 0 .639792893279312 ,
0 .640696837570094 , 0 .641600215834357 , 0 .642503028780520 , 0 .643405277115674 ,
0 .644306961545581 , 0 .645208082774684 , 0 .646108641506103 , 0 .647008638441647 ,
0 .647908074281808 , 0 .648806949725770 , 0 .649705265471412 , 0 .650603022215310 ,
0 .651500220652738 , 0 .652396861477678 , 0 .653292945382815 , 0 .654188473059545 ,
0 .655083445197979 , 0 .655977862486942 , 0 .656871725613981 , 0 .657765035265364 ,
0 .658657792126085 , 0 .659549996879870 , 0 .660441650209173 , 0 .661332752795187 ,
0 .662223305317840 , 0 .663113308455806 , 0 .664002762886501 , 0 .664891669286088 ,
0 .665780028329483 , 0 .666667840690356 , 0 .667555107041132 , 0 .668441828052998 ,
0 .669328004395903 , 0 .670213636738564 , 0 .671098725748465 , 0 .671983272091864 ,
0 .672867276433793 , 0 .673750739438063 , 0 .674633661767266 , 0 .675516044082778 ,
0 .676397887044763 , 0 .677279191312175 , 0 .678159957542760 , 0 .679040186393061 ,
0 .679919878518420 , 0 .680799034572981 , 0 .681677655209692 , 0 .682555741080310 ,
0 .683433292835402 , 0 .684310311124349 , 0 .685186796595348 , 0 .686062749895414 ,
0 .686938171670387 , 0 .687813062564931 , 0 .688687423222536 , 0 .689561254285525 ,
0 .690434556395054 , 0 .691307330191115 , 0 .692179576312539 , 0 .693051295396999 ,
0 .693922488081015 , 0 .694793154999950 , 0 .695663296788022 , 0 .696532914078300 ,
0 .697402007502708 , 0 .698270577692031 , 0 .699138625275914 , 0 .700006150882866 ,
0 .700873155140263 , 0 .701739638674351 , 0 .702605602110248 , 0 .703471046071947 ,
0 .704335971182319 , 0 .705200378063116 , 0 .706064267334970 , 0 .706927639617403 ,
0 .707790495528823 , 0 .708652835686530 , 0 .709514660706716 , 0 .710375971204471 ,
0 .711236767793784 , 0 .712097051087546 , 0 .712956821697550 , 0 .713816080234498 ,
0 .714674827308002 , 0 .715533063526583 , 0 .716390789497679 , 0 .717248005827646 ,
0 .718104713121757 , 0 .718960911984210 , 0 .719816603018127 , 0 .720671786825556 ,
0 .721526464007477 , 0 .722380635163802 , 0 .723234300893377 , 0 .724087461793988 ,
0 .724940118462359 , 0 .725792271494157 , 0 .726643921483994 , 0 .727495069025431 ,
0 .728345714710977 , 0 .729195859132094 , 0 .730045502879201 , 0 .730894646541672 ,
0 .731743290707842 , 0 .732591435965008 , 0 .733439082899433 , 0 .734286232096346 ,
0 .735132884139946 , 0 .735979039613404 , 0 .736824699098865 , 0 .737669863177453 ,
0 .738514532429268 , 0 .739358707433394 , 0 .740202388767900 , 0 .741045577009838 ,
0 .741888272735251 , 0 .742730476519174 , 0 .743572188935634 , 0 .744413410557655 ,
0 .745254141957257 , 0 .746094383705463 , 0 .746934136372297 , 0 .747773400526791 ,
0 .748612176736981 , 0 .749450465569916 , 0 .750288267591654 , 0 .751125583367269 ,
0 .751962413460854 , 0 .752798758435516 , 0 .753634618853387 , 0 .754469995275621 ,
0 .755304888262399 , 0 .756139298372928 , 0 .756973226165448 , 0 .757806672197228 ,
0 .758639637024576 , 0 .759472121202833 , 0 .760304125286382 , 0 .761135649828646 ,
0 .761966695382092 , 0 .762797262498232 , 0 .763627351727628 , 0 .764456963619890 ,
0 .765286098723682 , 0 .766114757586723 , 0 .766942940755785 , 0 .767770648776705 ,
0 .768597882194375 , 0 .769424641552754 , 0 .770250927394865 , 0 .771076740262799 ,
0 .771902080697716 , 0 .772726949239850 , 0 .773551346428504 , 0 .774375272802063 ,
0 .775198728897986 , 0 .776021715252813 , 0 .776844232402167 , 0 .777666280880755 ,
0 .778487861222371 , 0 .779308973959898 , 0 .780129619625307 , 0 .780949798749665 ,
0 .781769511863131 , 0 .782588759494964 , 0 .783407542173518 , 0 .784225860426252 ,
0 .785043714779724 , 0 .785861105759600 , 0 .786678033890652 , 0 .787494499696761 ,
0 .788310503700919 , 0 .789126046425230 , 0 .789941128390916 , 0 .790755750118313 ,
0 .791569912126878 , 0 .792383614935189 , 0 .793196859060945 , 0 .794009645020972 ,
0 .794821973331222 , 0 .795633844506778 , 0 .796445259061850 , 0 .797256217509785 ,
0 .798066720363063 , 0 .798876768133299 , 0 .799686361331250 , 0 .800495500466812 ,
0 .801304186049023 , 0 .802112418586066 , 0 .802920198585270 , 0 .803727526553114 ,
0 .804534402995225 , 0 .805340828416384 , 0 .806146803320525 , 0 .806952328210736 ,
0 .807757403589267 , 0 .808562029957525 , 0 .809366207816078 , 0 .810169937664658 ,
0 .810973220002164 , 0 .811776055326660 , 0 .812578444135380 , 0 .813380386924727 ,
0 .814181884190280 , 0 .814982936426790 , 0 .815783544128185 , 0 .816583707787570 ,
0 .817383427897233 , 0 .818182704948640 , 0 .818981539432443 , 0 .819779931838480 ,
0 .820577882655774 , 0 .821375392372539 , 0 .822172461476178 , 0 .822969090453287 ,
0 .823765279789659 , 0 .824561029970280 , 0 .825356341479334 , 0 .826151214800207 ,
0 .826945650415485 , 0 .827739648806957 , 0 .828533210455617 , 0 .829326335841667 ,
0 .830119025444515 , 0 .830911279742782 , 0 .831703099214300 , 0 .832494484336112 ,
0 .833285435584481 , 0 .834075953434884 , 0 .834866038362018 , 0 .835655690839800 ,
0 .836444911341368 , 0 .837233700339087 , 0 .838022058304546 , 0 .838809985708559 ,
0 .839597483021174 , 0 .840384550711666 , 0 .841171189248543 , 0 .841957399099547 ,
0 .842743180731658 , 0 .843528534611089 , 0 .844313461203296 , 0 .845097960972975 ,
0 .845882034384061 , 0 .846665681899738 , 0 .847448903982432 , 0 .848231701093818 ,
0 .849014073694819 , 0 .849796022245609 , 0 .850577547205614 , 0 .851358649033513 ,
0 .852139328187243 , 0 .852919585123995 , 0 .853699420300221 , 0 .854478834171630 ,
0 .855257827193196 , 0 .856036399819156 , 0 .856814552503010 , 0 .857592285697526 ,
0 .858369599854740 , 0 .859146495425959 , 0 .859922972861758 , 0 .860699032611988 ,
0 .861474675125773 , 0 .862249900851513 , 0 .863024710236886 , 0 .863799103728850 ,
0 .864573081773641 , 0 .865346644816780 , 0 .866119793303070 , 0 .866892527676600 ,
0 .867664848380745 , 0 .868436755858169 , 0 .869208250550826 , 0 .869979332899962 ,
0 .870750003346114 , 0 .871520262329114 , 0 .872290110288090 , 0 .873059547661470 ,
0 .873828574886976 , 0 .874597192401634 , 0 .875365400641771 , 0 .876133200043017 ,
0 .876900591040306 , 0 .877667574067881 , 0 .878434149559290 , 0 .879200317947393 ,
0 .879966079664357 , 0 .880731435141664 , 0 .881496384810110 , 0 .882260929099804 ,
0 .883025068440173 , 0 .883788803259962 , 0 .884552133987234 , 0 .885315061049376 ,
0 .886077584873094 , 0 .886839705884419 , 0 .887601424508708 , 0 .888362741170644 ,
0 .889123656294237 , 0 .889884170302829 , 0 .890644283619089 , 0 .891403996665022 ,
0 .892163309861966 , 0 .892922223630591 , 0 .893680738390908 , 0 .894438854562262 ,
0 .895196572563340 , 0 .895953892812168 , 0 .896710815726115 , 0 .897467341721893 ,
0 .898223471215558 , 0 .898979204622514 , 0 .899734542357511 , 0 .900489484834649 ,
0 .901244032467376 , 0 .901998185668496 , 0 .902751944850161 , 0 .903505310423880 ,
0 .904258282800518 , 0 .905010862390296 , 0 .905763049602793 , 0 .906514844846950 ,
0 .907266248531065 , 0 .908017261062803 , 0 .908767882849189 , 0 .909518114296615 ,
0 .910267955810839 , 0 .911017407796985 , 0 .911766470659550 , 0 .912515144802397 ,
0 .913263430628762 , 0 .914011328541254 , 0 .914758838941858 , 0 .915505962231931 ,
0 .916252698812210 , 0 .916999049082807 , 0 .917745013443216 , 0 .918490592292311 ,
0 .919235786028347 , 0 .919980595048962 , 0 .920725019751180 , 0 .921469060531410 ,
0 .922212717785448 , 0 .922955991908478 , 0 .923698883295072 , 0 .924441392339197 ,
0 .925183519434208 , 0 .925925264972856 , 0 .926666629347283 , 0 .927407612949032 ,
0 .928148216169037 , 0 .928888439397636 , 0 .929628283024562 , 0 .930367747438952 ,
0 .931106833029342 , 0 .931845540183673 , 0 .932583869289291 , 0 .933321820732945 ,
0 .934059394900794 , 0 .934796592178403 , 0 .935533412950747 , 0 .936269857602210 ,
0 .937005926516589 , 0 .937741620077096 , 0 .938476938666352 , 0 .939211882666397 ,
0 .939946452458687 , 0 .940680648424094 , 0 .941414470942911 , 0 .942147920394849 ,
0 .942880997159041 , 0 .943613701614043 , 0 .944346034137834 , 0 .945077995107817 ,
0 .945809584900821 , 0 .946540803893103 , 0 .947271652460349 , 0 .948002130977671 ,
0 .948732239819614 , 0 .949461979360154 , 0 .950191349972701 , 0 .950920352030097 ,
0 .951648985904620 , 0 .952377251967984 , 0 .953105150591341 , 0 .953832682145281 ,
0 .954559846999833 , 0 .955286645524468 , 0 .956013078088099 , 0 .956739145059080 ,
0 .957464846805211 , 0 .958190183693738 , 0 .958915156091350 , 0 .959639764364186 ,
0 .960364008877834 , 0 .961087889997331 , 0 .961811408087163 , 0 .962534563511272 ,
0 .963257356633048 , 0 .963979787815339 , 0 .964701857420447 , 0 .965423565810129 ,
0 .966144913345602 , 0 .966865900387539 , 0 .967586527296073 , 0 .968306794430798 ,
0 .969026702150771 , 0 .969746250814509 , 0 .970465440779995 , 0 .971184272404677 ,
0 .971902746045467 , 0 .972620862058745 , 0 .973338620800360 , 0 .974056022625630 ,
0 .974773067889342 , 0 .975489756945754 , 0 .976206090148598 , 0 .976922067851080 ,
0 .977637690405876 , 0 .978352958165143 , 0 .979067871480510 , 0 .979782430703087 ,
0 .980496636183459 , 0 .981210488271695 , 0 .981923987317340 , 0 .982637133669424 ,
0 .983349927676458 , 0 .984062369686437 , 0 .984774460046841 , 0 .985486199104635 ,
0 .986197587206273 , 0 .986908624697693 , 0 .987619311924326 , 0 .988329649231088 ,
0 .989039636962390 , 0 .989749275462133 , 0 .990458565073711 , 0 .991167506140010 ,
0 .991876099003415 , 0 .992584344005802 , 0 .993292241488548 , 0 .993999791792523 ,
0 .994706995258101 , 0 .995413852225151 , 0 .996120363033046 , 0 .996826528020659 ,
0 .997532347526366 , 0 .998237821888046 , 0 .998942951443085 , 0 .999647736528371 ,
};
#ifndef PRODUCT
static double log_table_value(int i) {
return (log(1 .0 + static_cast <double >(i + 0 .5 ) / FastLogCount) / log(2 .0 ));
}
// Ensure initialization checks only happen once during bootstrap
static volatile bool log_table_checked = false ;
// Sanity check all log_table values or print it out if running
// -Xlog:heapsampling+generate::none
static void verify_or_generate_log_table() {
log_table_checked = true ;
assert(is_power_of_2(FastLogCount) && FastLogCount >= 4 , "table size should be power of two and at least 4" );
if (log_is_enabled(Info,heapsampling,generate)) {
log_info(heapsampling,generate)("FastLogCount = %d" , FastLogCount);
log_info(heapsampling,generate)("static const double log_table[FastLogCount] = {" );
int i = 0 ;
for (; i < FastLogCount; i += 4 ) {
double v1 = log_table_value(i);
double v2 = log_table_value(i + 1 );
double v3 = log_table_value(i + 2 );
double v4 = log_table_value(i + 3 );
log_info(heapsampling,generate)(" %.15f, %.15f, %.15f, %.15f," , v1, v2, v3, v4);
}
log_info(heapsampling,generate)("};" );
assert(i == FastLogCount, "post-loop invariant" );
} else {
// sanity check log_table - disabled when generating
for (int i = 0 ; i < FastLogCount; i++) {
assert(abs(log_table_value(i) - log_table[i]) < 0 .0001 ,
"log_table deviates too much at index: %d %.15f %.15f" ,
i, log_table_value(i), log_table[i]);
}
}
}
#endif
// Returns the next prng value.
// pRNG is: aX+b mod c with a = 0x5DEECE66D, b = 0xB, c = 1<<48
// This is the lrand64 generator.
uint64_t ThreadHeapSampler::next_random(uint64_t rnd) {
const uint64_t PrngMult = 0 x5DEECE66DLL;
const uint64_t PrngAdd = 0 xB;
const uint64_t PrngModPower = 48 ;
const uint64_t PrngModMask = ((uint64_t)1 << PrngModPower) - 1 ;
//assert(IS_SAFE_SIZE_MUL(PrngMult, rnd), "Overflow on multiplication.");
//assert(IS_SAFE_SIZE_ADD(PrngMult * rnd, PrngAdd), "Overflow on addition.");
return (PrngMult * rnd + PrngAdd) & PrngModMask;
}
double ThreadHeapSampler::fast_log2(const double & d) {
assert(d>0 , "bad value passed to assert" );
uint64_t x = 0 ;
assert(sizeof (d) == sizeof (x),
"double and uint64_t do not have the same size" );
x = *reinterpret_cast <const uint64_t*>(&d);
const uint32_t x_high = x >> 32 ;
assert(FastLogNumBits <= 20 , "FastLogNumBits should be less than 20." );
const uint32_t y = x_high >> (20 - FastLogNumBits) & FastLogMask;
const int32_t exponent = ((x_high >> 20 ) & 0 x7FF) - 1023 ;
return exponent + log_table[y];
}
// Generates a geometric variable with the specified mean (512K by default).
// This is done by generating a random number between 0 and 1 and applying
// the inverse cumulative distribution function for an exponential.
// Specifically: Let m be the inverse of the sample interval, then
// the probability distribution function is m*exp(-mx) so the CDF is
// p = 1 - exp(-mx), so
// q = 1 - p = exp(-mx)
// log_e(q) = -mx
// -log_e(q)/m = x
// log_2(q) * (-log_e(2) * 1/m) = x
// In the code, q is actually in the range 1 to 2**26, hence the -26 below
void ThreadHeapSampler::pick_next_geometric_sample() {
_rnd = next_random(_rnd);
// Take the top 26 bits as the random number
// (This plus a 1<<58 sampling bound gives a max possible step of
// 5194297183973780480 bytes. In this case,
// for sample_parameter = 1<<19, max possible step is
// 9448372 bytes (24 bits).
const uint64_t PrngModPower = 48 ; // Number of bits in prng
// The uint32_t cast is to prevent a (hard-to-reproduce) NAN
// under piii debug for some binaries.
double q = static_cast <uint32_t>(_rnd >> (PrngModPower - 26 )) + 1 .0 ;
// Put the computed p-value through the CDF of a geometric.
// For faster performance (save ~1/20th exec time), replace
// min(0.0, FastLog2(q) - 26) by (Fastlog2(q) - 26.000705)
// The value 26.000705 is used rather than 26 to compensate
// for inaccuracies in FastLog2 which otherwise result in a
// negative answer.
double log_val = (fast_log2(q) - 26 );
double result =
(0 .0 < log_val ? 0 .0 : log_val) * (-log(2 .0 ) * (get_sampling_interval())) + 1 ;
assert(result > 0 && result < static_cast <double >(SIZE_MAX), "Result is not in an acceptable range." );
size_t interval = static_cast <size_t>(result);
_bytes_until_sample = interval;
}
void ThreadHeapSampler::pick_next_sample(size_t overflowed_bytes) {
#ifndef PRODUCT
if (!log_table_checked) {
verify_or_generate_log_table();
}
#endif
// Explicitly test if the sampling interval is 0, return 0 to sample every
// allocation.
if (get_sampling_interval() == 0 ) {
_bytes_until_sample = 0 ;
return ;
}
pick_next_geometric_sample();
}
void ThreadHeapSampler::check_for_sampling(oop obj, size_t allocation_size, size_t bytes_since_allocation) {
size_t total_allocated_bytes = bytes_since_allocation + allocation_size;
// If not yet time for a sample, skip it.
if (total_allocated_bytes < _bytes_until_sample) {
_bytes_until_sample -= total_allocated_bytes;
return ;
}
JvmtiExport::sampled_object_alloc_event_collector(obj);
size_t overflow_bytes = total_allocated_bytes - _bytes_until_sample;
pick_next_sample(overflow_bytes);
}
int ThreadHeapSampler::get_sampling_interval() {
return Atomic::load_acquire(&_sampling_interval);
}
void ThreadHeapSampler::set_sampling_interval(int sampling_interval) {
Atomic::release_store(&_sampling_interval, sampling_interval);
}
Messung V0.5 in Prozent C=89 H=93 G=90
¤ Dauer der Verarbeitung: 0.12 Sekunden
¤
*© Formatika GbR, Deutschland