');mask-image:url('data:image/svg+xml;charset=utf-8,');width:16px}.BlogPost-module--post-body--hinQo details,.BlogPost-module--post-body--hinQo figcaption,.BlogPost-module--post-body--hinQo figure{display:block}.BlogPost-module--post-body--hinQo summary{display:list-item}.BlogPost-module--post-body--hinQo [hidden]{display:none!important}.BlogPost-module--post-body--hinQo a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}.BlogPost-module--post-body--hinQo a:active,.BlogPost-module--post-body--hinQo a:hover{outline-width:0}.BlogPost-module--post-body--hinQo abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.BlogPost-module--post-body--hinQo b,.BlogPost-module--post-body--hinQo strong{font-weight:600}.BlogPost-module--post-body--hinQo dfn{font-style:italic}.BlogPost-module--post-body--hinQo h1{border-bottom:1px solid var(--color-border-muted);font-size:2em;font-weight:600;margin:.67em 0;padding-bottom:.3em}.BlogPost-module--post-body--hinQo mark{background-color:var(--color-attention-subtle);color:var(--color-text-primary)}.BlogPost-module--post-body--hinQo small{font-size:90%}.BlogPost-module--post-body--hinQo sub,.BlogPost-module--post-body--hinQo sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.BlogPost-module--post-body--hinQo sub{bottom:-.25em}.BlogPost-module--post-body--hinQo sup{top:-.5em}.BlogPost-module--post-body--hinQo img{background-color:var(--color-canvas-default);border-style:none;box-sizing:content-box;max-width:100%}.BlogPost-module--post-body--hinQo figure{margin:1em 40px}.BlogPost-module--post-body--hinQo hr{background:transparent;background-color:var(--color-border-default);border:0;box-sizing:content-box;height:.25em;margin:24px 0;overflow:hidden;padding:0}.BlogPost-module--post-body--hinQo input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}.BlogPost-module--post-body--hinQo [type=button],.BlogPost-module--post-body--hinQo [type=reset],.BlogPost-module--post-body--hinQo [type=submit]{-webkit-appearance:button}.BlogPost-module--post-body--hinQo [type=button]::-moz-focus-inner,.BlogPost-module--post-body--hinQo [type=reset]::-moz-focus-inner,.BlogPost-module--post-body--hinQo [type=submit]::-moz-focus-inner{border-style:none;padding:0}.BlogPost-module--post-body--hinQo [type=button]:-moz-focusring,.BlogPost-module--post-body--hinQo [type=reset]:-moz-focusring,.BlogPost-module--post-body--hinQo [type=submit]:-moz-focusring{outline:1px dotted ButtonText}.BlogPost-module--post-body--hinQo [type=checkbox],.BlogPost-module--post-body--hinQo [type=radio]{box-sizing:border-box;padding:0}.BlogPost-module--post-body--hinQo [type=number]::-webkit-inner-spin-button,.BlogPost-module--post-body--hinQo [type=number]::-webkit-outer-spin-button{height:auto}.BlogPost-module--post-body--hinQo [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.BlogPost-module--post-body--hinQo [type=search]::-webkit-search-cancel-button,.BlogPost-module--post-body--hinQo [type=search]::-webkit-search-decoration{-webkit-appearance:none}.BlogPost-module--post-body--hinQo ::-webkit-input-placeholder{color:inherit;opacity:.54}.BlogPost-module--post-body--hinQo ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.BlogPost-module--post-body--hinQo a:hover{text-decoration:underline}.BlogPost-module--post-body--hinQo hr:before{content:"";display:table}.BlogPost-module--post-body--hinQo hr:after{clear:both;content:"";display:table}.BlogPost-module--post-body--hinQo table{border-collapse:collapse;border-spacing:0;display:block;max-width:100%;overflow:auto;width:-webkit-max-content;width:max-content}.BlogPost-module--post-body--hinQo td,.BlogPost-module--post-body--hinQo th{padding:0}.BlogPost-module--post-body--hinQo details summary{cursor:pointer}.BlogPost-module--post-body--hinQo details:not([open])>:not(summary){display:none!important}.BlogPost-module--post-body--hinQo kbd{background-color:var(--color-canvas-subtle);border-bottom-color:var(--color-neutral-muted);border:1px solid var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted);color:var(--color-fg-default);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}.BlogPost-module--post-body--hinQo h1,.BlogPost-module--post-body--hinQo h2,.BlogPost-module--post-body--hinQo h3,.BlogPost-module--post-body--hinQo h4,.BlogPost-module--post-body--hinQo h5,.BlogPost-module--post-body--hinQo h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.BlogPost-module--post-body--hinQo h2{border-bottom:1px solid var(--color-border-muted);font-size:1.5em;font-weight:600;padding-bottom:.3em}.BlogPost-module--post-body--hinQo h3{font-size:1.25em;font-weight:600}.BlogPost-module--post-body--hinQo h4{font-size:1em;font-weight:600}.BlogPost-module--post-body--hinQo h5{font-size:.875em;font-weight:600}.BlogPost-module--post-body--hinQo h6{color:var(--color-fg-muted);font-size:.85em;font-weight:600}.BlogPost-module--post-body--hinQo p{margin-bottom:10px;margin-top:0}.BlogPost-module--post-body--hinQo blockquote{border-left:.25em solid var(--color-border-default);color:var(--color-fg-muted);margin:0;padding:0 1em}.BlogPost-module--post-body--hinQo ol,.BlogPost-module--post-body--hinQo ul{margin-bottom:0;margin-top:0;padding-left:2em}.BlogPost-module--post-body--hinQo ol ol,.BlogPost-module--post-body--hinQo ul ol{list-style-type:lower-roman}.BlogPost-module--post-body--hinQo ol ol ol,.BlogPost-module--post-body--hinQo ol ul ol,.BlogPost-module--post-body--hinQo ul ol ol,.BlogPost-module--post-body--hinQo ul ul ol{list-style-type:lower-alpha}.BlogPost-module--post-body--hinQo dd{margin-left:0}.BlogPost-module--post-body--hinQo .BlogPost-module--octicon--xzeoa{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}.BlogPost-module--post-body--hinQo ::-webkit-input-placeholder{color:var(--color-fg-subtle);opacity:1}.BlogPost-module--post-body--hinQo :-ms-input-placeholder{color:var(--color-fg-subtle);opacity:1}.BlogPost-module--post-body--hinQo ::placeholder{color:var(--color-fg-subtle);opacity:1}.BlogPost-module--post-body--hinQo input::-webkit-inner-spin-button,.BlogPost-module--post-body--hinQo input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-c--DcNCP{color:var(--color-prettylights-syntax-comment)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-c1--o1zzd,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M .BlogPost-module--pl-v--7otNS{color:var(--color-prettylights-syntax-constant)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-e--PkEp\+,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-en--i\+aYf{color:var(--color-prettylights-syntax-entity)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M .BlogPost-module--pl-s1--xfnwf,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-smi--Kz6hH{color:var(--color-prettylights-syntax-storage-modifier-import)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ent--EvW\+u{color:var(--color-prettylights-syntax-entity-tag)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-k--eA6jO{color:var(--color-prettylights-syntax-keyword)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-pds--VCw45,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-s--9jI7M .BlogPost-module--pl-pse--FpFbV .BlogPost-module--pl-s1--xfnwf,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-cce--k5372,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-sra--\+Y3Fk,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-sre--LThiw{color:var(--color-prettylights-syntax-string)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-smw--WJA\+K,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-v--7otNS{color:var(--color-prettylights-syntax-variable)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-bu--zNVx\+{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ii--E1qpP{background-color:var(--color-prettylights-syntax-invalid-illegal-bg);color:var(--color-prettylights-syntax-invalid-illegal-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-c2--qHOhe{background-color:var(--color-prettylights-syntax-carriage-return-bg);color:var(--color-prettylights-syntax-carriage-return-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sr--I5SNZ .BlogPost-module--pl-cce--k5372{color:var(--color-prettylights-syntax-string-regexp);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ml--bYQSm{color:var(--color-prettylights-syntax-markup-list)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mh--8GlCw,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mh--8GlCw .BlogPost-module--pl-en--i\+aYf,.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ms--0L0wb{color:var(--color-prettylights-syntax-markup-heading);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mi--L3pg1{color:var(--color-prettylights-syntax-markup-italic);font-style:italic}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mb--0LcBJ{color:var(--color-prettylights-syntax-markup-bold);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-md--CXs3A{background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mi1--rq9ZS{background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mc--PLTGf{background-color:var(--color-prettylights-syntax-markup-changed-bg);color:var(--color-prettylights-syntax-markup-changed-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mi2--A9uor{background-color:var(--color-prettylights-syntax-markup-ignored-bg);color:var(--color-prettylights-syntax-markup-ignored-text)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-mdr--IqqhO{color:var(--color-prettylights-syntax-meta-diff-range);font-weight:700}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-ba--\+wSQj{color:var(--color-prettylights-syntax-brackethighlighter-angle)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-sg--KJ3rX{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}.BlogPost-module--post-body--hinQo .BlogPost-module--pl-corl--8vpqC{color:var(--color-prettylights-syntax-constant-other-reference-link);text-decoration:underline}.BlogPost-module--post-body--hinQo [data-catalyst]{display:block}.BlogPost-module--post-body--hinQo g-emoji{font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:400;line-height:1;vertical-align:-.075em}.BlogPost-module--post-body--hinQo g-emoji img{height:1em;width:1em}.BlogPost-module--post-body--hinQo:before{content:"";display:table}.BlogPost-module--post-body--hinQo:after{clear:both;content:"";display:table}.BlogPost-module--post-body--hinQo>:first-child{margin-top:0!important}.BlogPost-module--post-body--hinQo>:last-child{margin-bottom:0!important}.BlogPost-module--post-body--hinQo a:not([href]){color:inherit;text-decoration:none}.BlogPost-module--post-body--hinQo .BlogPost-module--absent--vyyfL{color:var(--color-danger-fg)}.BlogPost-module--post-body--hinQo .BlogPost-module--anchor--9pbC-{float:left;line-height:1;margin-left:-20px;padding-right:4px}.BlogPost-module--post-body--hinQo .BlogPost-module--anchor--9pbC-:focus{outline:none}.BlogPost-module--post-body--hinQo blockquote,.BlogPost-module--post-body--hinQo details,.BlogPost-module--post-body--hinQo dl,.BlogPost-module--post-body--hinQo ol,.BlogPost-module--post-body--hinQo p,.BlogPost-module--post-body--hinQo pre,.BlogPost-module--post-body--hinQo table,.BlogPost-module--post-body--hinQo ul{margin-bottom:16px;margin-top:0}.BlogPost-module--post-body--hinQo blockquote>:first-child{margin-top:0}.BlogPost-module--post-body--hinQo blockquote>:last-child{margin-bottom:0}.BlogPost-module--post-body--hinQo sup>a:before{content:"["}.BlogPost-module--post-body--hinQo sup>a:after{content:"]"}.BlogPost-module--post-body--hinQo h1 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h2 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h3 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h4 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h5 .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h6 .BlogPost-module--octicon-link--yPaj9{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}.BlogPost-module--post-body--hinQo h1:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h2:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h3:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h4:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h5:hover .BlogPost-module--anchor--9pbC-,.BlogPost-module--post-body--hinQo h6:hover .BlogPost-module--anchor--9pbC-{text-decoration:none}.BlogPost-module--post-body--hinQo h1:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h2:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h3:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h4:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h5:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9,.BlogPost-module--post-body--hinQo h6:hover .BlogPost-module--anchor--9pbC- .BlogPost-module--octicon-link--yPaj9{visibility:visible}.BlogPost-module--post-body--hinQo ol.BlogPost-module--no-list--WW9A1,.BlogPost-module--post-body--hinQo ul.BlogPost-module--no-list--WW9A1{list-style-type:none;padding:0}.BlogPost-module--post-body--hinQo ol[type="1"]{list-style-type:decimal}.BlogPost-module--post-body--hinQo ol[type=a]{list-style-type:lower-alpha}.BlogPost-module--post-body--hinQo ol[type=i]{list-style-type:lower-roman}.BlogPost-module--post-body--hinQo div>ol:not([type]){list-style-type:decimal}.BlogPost-module--post-body--hinQo ol ol,.BlogPost-module--post-body--hinQo ol ul,.BlogPost-module--post-body--hinQo ul ol,.BlogPost-module--post-body--hinQo ul ul{margin-bottom:0;margin-top:0}.BlogPost-module--post-body--hinQo li>p{margin-top:16px}.BlogPost-module--post-body--hinQo li+li{margin-top:.25em}.BlogPost-module--post-body--hinQo dl{padding:0}.BlogPost-module--post-body--hinQo dl dt{font-size:1em;font-style:italic;font-weight:600;margin-top:16px;padding:0}.BlogPost-module--post-body--hinQo dl dd{margin-bottom:16px;padding:0 16px}.BlogPost-module--post-body--hinQo table th{font-weight:600}.BlogPost-module--post-body--hinQo table td,.BlogPost-module--post-body--hinQo table th{border:1px solid var(--color-border-default);padding:6px 13px}.BlogPost-module--post-body--hinQo table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}.BlogPost-module--post-body--hinQo table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}.BlogPost-module--post-body--hinQo table img{background-color:transparent}.BlogPost-module--post-body--hinQo img[align=right]{padding-left:20px}.BlogPost-module--post-body--hinQo img[align=left]{padding-right:20px}.BlogPost-module--post-body--hinQo .BlogPost-module--emoji--XzYz0{background-color:transparent;max-width:none;vertical-align:text-top}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y{display:block;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y>span{border:1px solid var(--color-border-default);display:block;float:left;margin:13px 0 0;overflow:hidden;padding:7px;width:auto}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y span img{display:block;float:left}.BlogPost-module--post-body--hinQo span.BlogPost-module--frame--Idj0Y span span{clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-center--t405A{clear:both;display:block;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-center--t405A>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-center--t405A span img{margin:0 auto;text-align:center}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-right--73QHm{clear:both;display:block;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-right--73QHm>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.BlogPost-module--post-body--hinQo span.BlogPost-module--align-right--73QHm span img{margin:0;text-align:right}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-left--YVxC6{display:block;float:left;margin-right:13px;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-left--YVxC6 span{margin:13px 0 0}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-right--uu0YC{display:block;float:right;margin-left:13px;overflow:hidden}.BlogPost-module--post-body--hinQo span.BlogPost-module--float-right--uu0YC>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.BlogPost-module--post-body--hinQo .BlogPost-module--highlight--IO8Fw{margin-bottom:16px}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ td,.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ .BlogPost-module--blob-num--8M8qP{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ tr{border-top:0}.BlogPost-module--post-body--hinQo .BlogPost-module--csv-data--i41TJ th{background:var(--color-canvas-subtle);border-top:0;font-weight:600}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U ol{padding-left:16px}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U li{position:relative}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U li:target{color:var(--color-fg-default)}.BlogPost-module--post-body--hinQo .BlogPost-module--footnotes--muW3U .BlogPost-module--data-footnote-backref--mhVdk g-emoji{font-family:monospace}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\+{list-style-type:none}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list--2DCKY.BlogPost-module--post-body-item--UsoQa label{font-weight:400}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\+.BlogPost-module--enabled--4dTT9 label{cursor:pointer}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\++.BlogPost-module--task-list-item--KkS5\+{margin-top:3px}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item--KkS5\+ .BlogPost-module--handle--qvHOr{display:none}.BlogPost-module--post-body--hinQo .BlogPost-module--task-list-item-checkbox--ypvCU{margin:0 .2em .25em -1.6em;vertical-align:middle}.BlogPost-module--post-body--hinQo .BlogPost-module--contains-task-list--SFrt4:dir(rtl) .BlogPost-module--task-list-item-checkbox--ypvCU{margin:0 -1.6em .25em .2em}.BlogPost-module--post-body--hinQo ::-webkit-calendar-picker-indicator{-webkit-filter:invert(50%);filter:invert(50%)}.mark-nav{background-color:#fff;border-left:1px solid #eee;height:60vh;overflow-y:auto}.mark-nav a.head-nav-item{display:block;padding-bottom:2px;padding-top:2px;text-decoration:inherit;transition:all .2s}.mark-nav a.head-nav-item.active{border-left:2px solid #007fff;color:#007fff}.mark-nav a.head-nav-item.active,.mark-nav a.head-nav-item:hover{background-color:#f8f8f8}.mark-nav a.nav-item-1,.mark-nav a.nav-item-2{color:#000;font-size:1.2em;font-weight:400;padding-left:1em}.mark-nav a.nav-item-3,.mark-nav a.nav-item-4,.mark-nav a.nav-item-5,.mark-nav a.nav-item-6{color:#333;font-size:1em;font-weight:400;padding-left:2em}.Main-module--main-root--8jy\+l{margin:auto;max-width:720px;padding:60px 5px 5px}.TagsCard-module--tag-container--oc5Xg{margin-bottom:8px;position:relative}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL{background-color:#1565c0;border-radius:4px;color:#fff;cursor:pointer;display:inline-block;list-style:none;white-space:nowrap}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL:hover{background:#237bd9}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL a{color:#fff;padding:0 7px;text-decoration:none}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL.TagsCard-module--large--cGzFC{font-size:20px;height:28px;line-height:26px;margin-bottom:8px;margin-right:16px}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--tag--aOamL.TagsCard-module--small--X5xL5{font-size:12px;height:22px;line-height:20px;margin-bottom:4px;margin-right:8px}.TagsCard-module--tag-container--oc5Xg>.TagsCard-module--original---pxiP{background-color:rgba(242,174,67,.25);border-radius:11px;color:#f2ae43;font-size:14px;line-height:26px;margin-left:-33px;margin-right:10px;padding:0 6px;position:absolute}.blog-module--indexContent--wYIPh{overflow:hidden;padding-top:80px;position:relative}.blog-module--indexContent--wYIPh:before{background:#eaeaea;content:"";display:block;height:100%;left:50%;position:absolute;top:-5px;width:1px}.pagination{background:#fff;padding-top:10px;position:relative;text-align:center}.pagination a{background-color:#fff;border:1px solid #d9d9d9;border-radius:4px;color:#000;display:inline-block;font-family:Arial;height:32px;line-height:30px;list-style:none;margin:0 4px;min-width:32px;outline:0;text-align:center;text-decoration:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.pagination span{margin:0 4px}.pagination a.active{border-color:#237bd9;color:#237bd9}.pagination a:hover{border-color:#1565c0;color:#1565c0;transition:all .3s}.StarCanvas-module--starbg--z7M7b{background:#000;overflow-x:hidden;width:100%}.ityped-cursor{-webkit-animation:blink .5s infinite;animation:blink .5s infinite;-webkit-animation-direction:alternate;animation-direction:alternate;opacity:1}@keyframes blink{to{opacity:0}}@-webkit-keyframes blink{to{opacity:0}}.person-header{color:#fff;left:50%;position:absolute;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.person-header .author-inner{align-items:center;display:flex;justify-content:center;width:auto}.person-header .author-inner .avatar{border-radius:50%;height:80px;width:80px}.person-header .inner-bio{text-align:center}
jvm学习记录(1)-运行时数据区域 - zido的个人博客jvm学习记录(1)-运行时数据区域
概述
程序计数器
当前线程所执行的字节码的行号指示器(看作)。java 虚拟机的多线程就是通过线程乱流切换并分配处理器执行时间的方式来实现的。为了线程在切换后能恢复到正确的执行位置,每条线程都需要独立的程序计数器,各条线程之间计数器互不影响,独立存储。线程私有。
java 虚拟机栈
线程私有。生命周期与线程相同,描述 java 执行的内存模型,每个方法执行都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口。方法调用与完成对应栈的入栈和出栈操作。局部变量表(java 程序员常说的堆栈中的栈)存放基本数据类型,对象引用,returnAddress 类型(指向一条字节码指令的地址)。其中 long 和 double 占两个局部变量空间,其他占一个。局部变量表大小会在编译时确定,不能更改。线程请求的栈深度大于虚拟机所允许的最大深度时抛出 StackOverflowError。虚拟机栈扩展时无法申请到足够的内存会抛出 OutOfMemeryError。
本地方法栈
为 Native 方法服务,与虚拟机栈抛异常方式一致。
java 堆
虚拟机所管理的最大内存,线程共享,虚拟机创建时创建。存放对象实例(并不一定,栈上分配和标量替换优化技术会导致可能放在其他地方),GC 堆。gc 采用分代收集算法,粗略划分为新生代和老年代。
方法区
线程共享,存储已被虚拟机加载的类信息,常亮,静态变量,即时编译器编译后的代码。
运行时常量池
存放编译期生成的 Class 中的各种字面值和符号引用。在类加载后存储。具备动态性。例如:String.intern()方法。
直接内存
不受堆大小限制。堆外内存。
图解
