Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  threadHeapSampler.cpp   Sprache: C

 
/*
 * 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 = 0x5DEECE66DLL;
  const uint64_t PrngAdd = 0xB;
  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) & 0x7FF) - 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);
}

95%


¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.25Angebot  Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge