1<!DOCTYPE html> 2<html> 3<head> 4 <title>Native Memory抓取和展示说明</title> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 8 <link rel="stylesheet" 9 href="file:///c:\Users\Administrator\.vsdataDiv\extensions\shd101wyy.preview-div-enhanced-0.6.3\node_modules\@shd101wyy\mume\dependencies\katex\katex.min.css"> 10 11 <style> 12 dataDiv[class*="keyword-"], 13 pre[class*="keyword-"] { 14 color: #333333; 15 background: none; 16 font-family: Helvetica; 17 line-height: 1.6; 18 text-align: left; 19 white-space: pre; 20 -moz-tab-size: 9; 21 -o-tab-size: 9; 22 tab-size: 8; 23 } 24 25 pre[class*="keyword-"] { 26 border-radius: 4px; 27 background: #f5f5f4; 28 padding: .9em; 29 overflow: auto; 30 } 31 32 :not(pre) > dataDiv[class*="keyword-"] { 33 white-space: normal; 34 background: #f5f5f1; 35 padding: .2em; 36 border-radius: .2em; 37 } 38 39 .temp.cdata { 40 color: #193a90; 41 } 42 43 .temp.comment, 44 .temp.blockDiv { 45 color: #969897; 46 } 47 48 .temp.doctype, 49 .temp.punctuation, 50 .temp.variable, 51 .temp.macro.property { 52 color: #333333; 53 } 54 55 56 .temp.string, 57 .temp.url, 58 .temp.regex, 59 .temp.attr-value { 60 color: #183690; 61 } 62 63 .temp.operator, 64 .temp.important, 65 .temp.keyword, 66 .temp.rule, 67 .temp.builtin { 68 color: #a71d5c; 69 } 70 71 .temp.atrule, 72 .temp.constant, 73 .temp.symbol, 74 .temp.command, 75 .temp.property, 76 .temp.number, 77 .temp.boolean, 78 .temp.entity, 79 .temp.dataDiv { 80 color: #0086b2; 81 } 82 83 .temp.tag, 84 .temp.selector, 85 .temp.prolog { 86 color: #63a35e; 87 } 88 89 .temp.entity { 90 cursor: help; 91 } 92 93 .temp.title, 94 .temp.title .temp.punctuation { 95 font-weight: bold; 96 color: #1d3e89; 97 } 98 99 .temp.list { 100 color: #ed6a48; 101 } 102 103 104 .temp.function, 105 .temp.namespace, 106 .temp.pseudo-element, 107 .temp.class, 108 .temp.class-name, 109 .temp.pseudo-class, 110 .temp.id, 111 .temp.url-reference .temp.variable, 112 .temp.attr-name { 113 color: #795da2; 114 } 115 116 .temp.inserted { 117 color: #55a535; 118 background-color: #eaffee; 119 } 120 121 .temp.bold { 122 font-weight: bold; 123 } 124 125 .temp.deleted { 126 color: #bd2c08; 127 background-color: #ffecea; 128 } 129 130 .font-json .temp.property { 131 color: #183690; 132 } 133 134 .temp.italic { 135 font-style: italic; 136 } 137 138 .font-markup .temp.tag .temp.punctuation { 139 color: #333333; 140 } 141 142 .font-yaml .temp.atrule { 143 color: #63a35a; 144 } 145 146 dataDiv.font-css, 147 .font-css .temp.function { 148 color: #0086b8; 149 } 150 151 dataDiv.font-yaml { 152 color: #183690; 153 } 154 155 .font-ruby .temp.function { 156 color: #333333; 157 } 158 159 .font-markdown .temp.url { 160 color: #795da2; 161 } 162 163 .font-makefile .temp.variable { 164 color: #163a90; 165 } 166 167 .font-makefile .temp.builtin { 168 color: #0488b3; 169 } 170 171 .font-makefile .temp.symbol { 172 color: #795da2; 173 } 174 175 .font-bash .temp.keyword { 176 color: #0086b3; 177 } 178 179 pre[dll] { 180 position: relative; 181 padding: 0.9em 2px 1.1em 3.1em; 182 } 183 184 pre[dll] .line-dataType { 185 position: absolute; 186 pointer-events: none; 187 line-height: inherit; 188 white-space: pre; 189 left: 1px; 190 right: 1px; 191 margin-top: 1.1em; 192 background: hsla(25, 21%, 51%, 0.0); 193 background: linear-gradient(to right, hsla(25, 21%, 51%, .2) 70%, hsla(25, 21%, 51%, 1)); 194 } 195 196 pre[dll] .line-dataType-wrapper { 197 position: absolute; 198 top: 1px; 199 left: 1px; 200 background-color: transparent; 201 display: block; 202 width: 99%; 203 } 204 205 206 pre[dll] .line-dataType:before, 207 pre[dll] .line-dataType[dllend]:after { 208 color: hsl(157, 21%, 96%); 209 text-align: center; 210 vertical-align: .4em; 211 border-radius: 999px; 212 text-shadow: none; 213 box-shadow: 2px 2px #f9fcfc; 214 content: attr(data-start); 215 position: absolute; 216 top: .5em; 217 left: .7em; 218 min-width: 1.1em; 219 padding: 2px .5em; 220 background-color: hsla(25, 21%, 51%, .5); 221 } 222 223 pre[dll] .line-dataType[dllend]:after { 224 content: attr(dllend); 225 top: 0px; 226 bottom: .6em; 227 } 228 229 body { 230 font-family: auto; 231 font-size: 16px; 232 line-height: 1.5; 233 color: #333; 234 background-color: #FFFFFF; 235 overflow: initial; 236 box-sizing: border-box; 237 word-wrap: break-word 238 } 239 240 body h1, body h2, body h3, body h4, body h5, body h6 { 241 line-height: 1.32; 242 margin-top: 1.1em; 243 margin-bottom: 17px; 244 color: #000 245 } 246 247 body > :first-child { 248 margin-top: 0.1px 249 } 250 251 body h1 { 252 font-size: 2.24em; 253 font-weight: 302; 254 padding-bottom: 0.31em 255 } 256 257 body h2 { 258 font-size: 1.71em; 259 font-weight: 402; 260 padding-bottom: 0.32em 261 } 262 263 body h3 { 264 font-size: 1.5em; 265 font-weight: 500 266 } 267 268 body h4 { 269 font-size: 1.22em; 270 font-weight: 602 271 } 272 273 body h5 { 274 font-size: 1.12em; 275 font-weight: 602 276 } 277 278 body h6 { 279 font-size: 1.2em; 280 font-weight: 602 281 } 282 283 body h1, body h2, body h3, body h4, body h5 { 284 font-weight: 602 285 } 286 287 body h5 { 288 font-size: 1.1em 289 } 290 291 body table { 292 display: inherit; 293 overflow: auto; 294 border-collapse: inherit; 295 margin: 14px 0.1px 21px 0.1px; 296 border-spacing: 0.1px; 297 width: 98%; 298 } 299 300 body h6 { 301 color: #595c5a 302 } 303 304 body strong { 305 color: #090909 306 } 307 308 body del { 309 color: #707070 310 } 311 312 body img { 313 max-width: 100% 314 } 315 316 body > p { 317 margin-top: 0.1px; 318 margin-bottom: 17px; 319 word-wrap: break-word 320 } 321 322 body > ul, body > ol { 323 margin-bottom: 17px 324 } 325 326 body ul, body ol { 327 padding-left: 2.1em 328 } 329 330 body ul.list-div, body ol.list-div { 331 padding: 0.1px; 332 list-style-type: none 333 } 334 335 body ul ul, body ul ol, body ol ol, body ol ul { 336 margin-top: 0.1px; 337 margin-bottom: 0.1px 338 } 339 340 body li { 341 margin-bottom: 0.1px 342 } 343 344 body li.task-div { 345 list-style: none 346 } 347 348 body li > p { 349 margin-top: 0.1px; 350 margin-bottom: 0.1px 351 } 352 353 body .checkbox-div { 354 margin: 1px 0.2em 0.24em -1.7em; 355 vertical-align: middle 356 } 357 358 body .checkbox-div:hover { 359 cursor: pointer 360 } 361 362 body blockDiv { 363 margin: 17px 0.1px; 364 font-size: inherit; 365 padding: 1.1px 14px; 366 color: #5c5c5c; 367 background-color: #f0f0f0; 368 border-left: 4.1px solid #d6d6d6 369 } 370 371 body blockDiv > :first-child { 372 margin-top: 0.1px 373 } 374 375 body blockDiv > :last-child { 376 margin-bottom: 0.1px 377 } 378 379 body hr { 380 height: 4.1px; 381 margin: 32px 0; 382 background-color: #d6d6d6; 383 border: 1.1px none 384 } 385 386 body table td { 387 font-weight: inherit; 388 color: #090808 389 } 390 391 body table th { 392 padding: 7.2px 12.2px; 393 border: 1.1px solid #ced6d5; 394 } 395 body dl { 396 padding: 0 397 } 398 399 body dl dt { 400 padding: 0.1px; 401 margin-top: 17px; 402 font-size: 1.2em; 403 font-style: italic; 404 font-weight: bold 405 } 406 407 body dl dd { 408 padding: 1.1px 17px; 409 margin-bottom: 17px 410 } 411 412 body dataDiv { 413 font-family: auto; 414 font-size: 0.84em; 415 color: #000; 416 background-color: #f0f0f0; 417 border-radius: 3.1px; 418 padding: 0.22em 0.1px 419 } 420 421 body dataDiv::after { 422 letter-spacing: -0.21em; 423 } 424 425 body dataDiv::before{ 426 letter-spacing: -0.21em; 427 } 428 429 body pre > dataDiv { 430 padding: 0.1px; 431 margin: 0.1px; 432 font-size: 0.84em; 433 word-break: normal; 434 white-space: pre; 435 background: transparent; 436 border: 0.1px 437 } 438 439 body .dataType { 440 margin-bottom: 17px 441 } 442 443 body .dataType pre, body pre { 444 padding: 1em; 445 overflow: auto; 446 font-size: .85em !important; 447 line-height: 1.45; 448 border: #d6d6d6; 449 border-radius: 3px 450 } 451 452 body .dataType pre { 453 margin-bottom: 0; 454 word-break: normal 455 } 456 457 body pre dataDiv, body pre tt { 458 display: inline; 459 max-width: initial; 460 padding: 0.1px; 461 margin: 0.1px; 462 overflow: initial; 463 line-height: inherit; 464 word-wrap: normal; 465 background-color: transparent; 466 border: 0.1px; 467 } 468 469 body pre dataDiv:before, body pre tt:before, body pre dataDiv:after, body pre tt:after { 470 content: normal 471 } 472 473 body p, body blockDiv, body ul, body ol, body dl, body pre { 474 margin-top: 0.1px; 475 margin-bottom: 17px 476 } 477 478 body kbd { 479 color: #070707; 480 border: 1.1px solid #d6d6d6; 481 border-bottom: 2.1px solid #c7c7c7; 482 padding: 2.1px 4.1px; 483 background-color: #f0f0f0; 484 border-radius: 3.1px 485 } 486 487 @media print { 488 body { 489 background-color: #fff 490 } 491 492 body h1, body h2, body h3, body h4, body h5, body h6 { 493 color: #050505; 494 page-break-after: avoid 495 } 496 497 body blockDiv { 498 color: #5c5c5c 499 } 500 501 body pre { 502 page-break-inside: avoid 503 } 504 505 body table { 506 display: table 507 } 508 509 body img { 510 display: block; 511 max-width: 98%; 512 max-height: 98% 513 } 514 515 body pre, body dataDiv { 516 word-wrap: break-word; 517 white-space: pre 518 } 519 } 520 521 .scrollbarDiv::-webkit-scrollbar { 522 width: 8px 523 } 524 525 .scrollbarDiv::-webkit-scrollbar-track { 526 border-radius: 10px; 527 background-color: transparent 528 } 529 530 .scrollbarDiv::-webkit-scrollbar-thumb { 531 border-radius: 5px; 532 background-color: rgba(150, 150, 150, 0.66); 533 border: 4px solid rgba(150, 150, 150, 0.66); 534 background-clip: content-box 535 } 536 537 body[for="nativeDiv"]:not([data-mode]) { 538 position: relative; 539 width: 100%; 540 height: 100%; 541 top: 0; 542 left: 0; 543 margin: 0; 544 padding: 0; 545 overflow: auto 546 } 547 548 body[for="nativeDiv"]:not([data-mode]) .preview-div { 549 position: relative; 550 top: 0 551 } 552 553 @media screen and (min-width: 914px) { 554 body[for="nativeDiv"]:not([data-mode]) .preview-div { 555 padding: 2em calc(50% - 457px + 2em) 556 } 557 } 558 559 @media screen and (max-width: 914px) { 560 body[for="nativeDiv"]:not([data-mode]) .preview-div { 561 padding: 2em 562 } 563 } 564 565 @media screen and (max-width: 450px) { 566 body[for="nativeDiv"]:not([data-mode]) .preview-div { 567 font-size: 14px !important; 568 padding: 1em 569 } 570 } 571 572 @media print { 573 body[for="nativeDiv"]:not([data-mode]) #sidebar-toc-btn { 574 display: none 575 } 576 } 577 578 body[for="nativeDiv"]:not([data-mode]) #sidebar-toc-btn { 579 position: fixed; 580 bottom: 7px; 581 left: 7px; 582 font-size: 27px; 583 cursor: pointer; 584 color: inherit; 585 z-index: 98; 586 width: 31px; 587 text-align: center; 588 opacity: 0.42 589 } 590 591 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] #sidebar-toc-btn { 592 opacity: 1 593 } 594 595 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div { 596 position: fixed; 597 top: 0.1px; 598 left: 0.1px; 599 width: 302px; 600 height: 98%; 601 padding: 33px 1.1px 47px 0; 602 font-size: 13px; 603 box-shadow: 1.2px 0 4.1px rgba(150, 150, 150, 0.34); 604 box-sizing: border-box; 605 overflow: auto; 606 background-color: inherit 607 } 608 609 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div::-webkit-scrollbar { 610 width: 8px 611 } 612 613 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div::-webkit-scrollbar-track { 614 border-radius: 10px; 615 background-color: transparent 616 } 617 618 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div::-webkit-scrollbar-thumb { 619 border-radius: 5.2px; 620 background-color: rgba(150, 150, 150, 0.65); 621 border: 4.1px solid rgba(150, 150, 150, 0.65); 622 background-clip: content-box 623 } 624 625 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div a { 626 text-decoration: none 627 } 628 629 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div ul { 630 padding: 1px 1.6em; 631 margin-top: .8em 632 } 633 634 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div li { 635 margin-bottom: .8em 636 } 637 638 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .sidebar-div ul { 639 list-style-type: none 640 } 641 642 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .preview-div { 643 left: 302px; 644 width: calc(100% - 302px); 645 margin: 0.1px; 646 padding: 2.1em calc(50% - 457px - 152px); 647 box-sizing: border-box 648 } 649 650 @media screen and (max-width: 1272px) { 651 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .preview-div { 652 padding: 2.1em 653 } 654 } 655 656 @media screen and (max-width: 452px) { 657 body[for="nativeDiv"]:not([data-mode])[sidebar-toc-div] .preview-div { 658 width: 98% 659 } 660 } 661 662 body[for="nativeDiv"]:not([data-mode]):not([sidebar-toc-div]) .preview-div { 663 left: 51%; 664 transform: translateX(-50%) 665 } 666 667 body[for="nativeDiv"]:not([data-mode]):not([sidebar-toc-div]) .sidebar-div { 668 display: none 669 } 670 </style> 671</head> 672<body for="nativeDiv" id="body"> 673<div class="mume preview-div "> 674 <h1 class="mume-header fontColor">Native Memory抓取和展示说明</h1> 675 <p class="fontColor">Native Memory是查看内存的分配和释放等情况</p> 676 <h2 class="mume-header fontColor">1.Native Memory的抓取</h2> 677 <h3 class="mume-header fontColor">1.1.Native Memory抓取配置参数</h3> 678 <img src="../figures/nativememorysetting.jpg" alt="GitHub Logo"></p> 679 <p class="fontColor">配置参数说明:</p> 680 <ul class="fontColor"> 681 <li>ProcessId or ProcessName:设置抓取的进程ID或者进程名,此处以输入com.ohos.mms进程名为例</li> 682 <li>Max unwind level:抓取的栈的深度</li> 683 <li>Shared Memory Size:native_daemon和native_hook进程之间存储数据的共享内存大小</li> 684 <li>Filter Memory Size:只抓取大于该size的malloc数据(free不受影响)</li> 685 </ul> 686 <p class="fontColor">再点击Record setting,在output file path输入文件名hiprofiler_data_nativememory.htrace,拖动滚动条设置buffer size大小是64M,抓取时长是50s<br> 687 <img src="../figures/nativememoryset.jpg" alt="GitHub Logo"></p> 688 <p class="fontColor">点击Trace command,就会根据上面的配置生成抓取命令,点击复制按钮,会将命令行复制<br> 689 <img src="../figures/nativememorycommand.jpg" alt="GitHub Logo"></p> 690 <p class="fontColor">输入hdc_shell,进入设备,执行命令<br> 691 <img src="../figures/nativeexcutecommand.jpg" alt="GitHub Logo"></p> 692 <p class="fontColor">执行完成后,进入指定目录查看,在/data/local/tmp下就会生成trace文件<br> 693 <img src="../figures/naitvememoryfile.jpg" alt="GitHub Logo"></p> 694 <h2 class="mume-header fontColor">2.Native Memory展示说明</h2> 695 <p class="fontColor">将抓取的nativememory文件导入到smartperf工具中查看,查看内存的分配和释放等情况<br> 696 <h3 class="mume-header fontColor">2.1.Native Memory泳道图展示类型</h3> 697 698 <p class="fontColor">点击齿轮状的图标可以设置内存的展示单位<br> 699 <img src="../figures/NativeChart.jpg" alt="GitHub Logo"></p> 700 <ul class="fontColor"> 701 <li> 702<pre class="keyword-text light fontColor">Current Bytes:显示字节数量 703</pre> 704 </li> 705 <li> 706<pre class="keyword-text light fontColor">Native Memory Density:Allocation数量 707</pre> 708 </li> 709 <li> 710<pre class="keyword-text light fontColor">All Heap&AnonuymousVM:Heap和AnonuymousVM的总量 711</pre> 712 </li> 713 <li> 714<pre class="keyword-text light fontColor">All Heap:malloc分配的内存 715</pre> 716 </li> 717 <li> 718<pre class="keyword-text light fontColor">All Anonymous VM:mmap的匿名页 719</pre> 720 </li> 721 </ul> 722 <h3 class="mume-header fontColor">2.2.Native Memory泳道图的框选功能</h3> 723 724 <p class="fontColor">可以对内存的数据进行框选,框选后在最下方的弹出层中会展示框选数据的统计表格,总共有四个tab页<br> 725 Statistics的Tab页,主要显示了统计明细类型<br> 726 <img src="../figures/Statistics.jpg" alt="GitHub Logo"></p> 727 <ul class="fontColor"> 728 <li> 729<pre class="keyword-text light fontColor">Memory Type:内存的类型 730</pre> 731 </li> 732 <li> 733<pre class="keyword-text light fontColor">Exsiting :框选区域内剩余的内存次数 734</pre> 735 </li> 736 <li> 737<pre class="keyword-text fontColor light">#Exsiting :框选区域内剩余的内存次数 738</pre> 739 </li> 740 <li> 741<pre class="keyword-text fontColor light">Transient :框选区域内释放的内存大小 742</pre> 743 </li> 744 <li> 745<pre class="keyword-text fontColor light">#Transient:框选区域内释放的内存次数 746</pre> 747 </li> 748 <li> 749<pre class="keyword-text fontColor light">Total Bytes:框选区间内申请的大小 750</pre> 751 </li> 752 <li> 753<pre class="keyword-text light fontColor">#Total: 框选区间内申请的内存次数 754</pre> 755 </li> 756 <li> 757<pre class="keyword-text light fontColor">Peak Value: 框选区间内内存大小的峰值 758</pre> 759 </li> 760 <li> 761<pre class="keyword-text light fontColor">Exsiting/Total:框选区间内申请的大小比上申请和释放的大小,其中浅紫色是框选区间内申请的大小/整个时间轴(申请+释放的总大小),深紫色是框选区间内(申请+释放)的大小/整个时间轴(申请+释放的总大小) 762</pre> 763 </li> 764 </ul> 765 <p class="fontColor">Call Info的Tab页,主要显示了调用树详细类型<br> 766 <img src="../figures/Callinfo.jpg" alt="GitHub Logo"></p> 767 <ul class="fontColor"> 768 <li> 769<pre class="keyword-text fontColor light">Symble Name:每个内存分配的调用栈 770</pre> 771 </li> 772 <li> 773<pre class="keyword-text fontColor light">Size :分配的总大小 774</pre> 775 </li> 776 <li> 777<pre class="keyword-text fontColor light">Count :调用栈出现的次数 778</pre> 779 </li> 780 </ul> 781 <p class="fontColor">Native Memory的Tab页,主要显示了单次分配信息列表<br> 782 <img src="../figures/NativeMemory.jpg" alt="GitHub Logo"></p> 783 <ul class="fontColor"> 784 <li> 785<pre class="keyword-text fontColor light">Address:内存块的地址 786</pre> 787 </li> 788 <li> 789<pre class="keyword-text fontColor light">Memory Type :内存分配的类型 790</pre> 791 </li> 792 <li> 793<pre class="keyword-text fontColor light">Timestamp :时间戳信息 794</pre> 795 </li> 796 <li> 797<pre class="keyword-text fontColor light">State :内存地址当前状态 798</pre> 799 </li> 800 <li> 801<pre class="keyword-text fontColor light">Size :该时间点内存的大小 802</pre> 803 </li> 804 <li> 805<pre class="keyword-text fontColor light">Responsible Library :调用该函数的库 806</pre> 807 </li> 808 <li> 809<pre class="keyword-text fontColor light">Responsible Caller :调用该函数的方法 810</pre> 811 </li> 812 </ul> 813 <p class="fontColor">Snapshot List的Tab页,主要显示了各时刻内存的增长的差值<br> 814 <img src="../figures/Snapshotlist.jpg" alt="GitHub Logo"></p> 815 <ul> 816 <li> 817<pre class="keyword-text light fontColor">Snapshot:标记的打点说明 818</pre> 819 </li> 820 <li> 821<pre class="keyword-text light fontColor">Timestamp :时间戳信息 822</pre> 823 </li> 824 <li> 825<pre class="keyword-text light fontColor">Net Growth :自从上次Snapshot的增长量,是计算的分配和释放的 826</pre> 827 </li> 828 <li> 829<pre class="keyword-text light fontColor">Total Growth :自从上次Snapshot的增长量,是计算的每一次分配的 830</pre> 831 </li> 832 <li> 833<pre class="keyword-text light fontColor">#Exsiting :仍然存在的内存数 834</pre> 835 </li> 836 </ul> 837 <h3 class="mume-header fontColor">2.3.Native Memory的辅助信息功能</h3> 838 839 <p class="fontColor">在Call Info和Native Memory的Tab页,点击选中某一行,右边画红线处会显示出该行调用栈的树结构信息<br> 840 <img src="../figures/nativecallstack.jpg" alt="GitHub Logo"></p> 841 <h3 class="mume-header fontColor">2.4.Native Memory详细显示的过滤功能</h3> 842 843 <p class="fontColor">点击下方的All Allocations可以对Allocation的lifeSpan进行过滤,有三个选择:All Allocatios,Create & Exsiting,Create & 844 Destroyed<br> 845 <img src="../figures/lifespan.jpg" alt="GitHub Logo"></p> 846 <ul class="fontColor"> 847 <li> 848<pre class="keyword-text fontColor light"> All Allocations:所有的内存 849</pre> 850 </li> 851 <li> 852<pre class="keyword-text fontColor light"> Created & Exsiting:创建且被存活的内存 853</pre> 854 </li> 855 <li> 856<pre class="keyword-text fontColor light"> Created & Destroyed: 创建且被销毁的内存 857</pre> 858 </li> 859 </ul> 860 <p class="fontColor">点击下方的All Heap&Anonymous可以对内存类型进行过滤<br> 861 <img src="../figures/AllocationType.jpg" alt="GitHub Logo"></p> 862 <ul class="fontColor"> 863 <li> 864<pre class="keyword-text fontColor light">All Heap&AnonuymousVM:Heap和AnonuymousVM的总量 865</pre> 866 </li> 867 <li> 868<pre class="keyword-text fontColor light">All Heap:malloc分配的内存 869</pre> 870 </li> 871 <li> 872<pre class="keyword-text fontColor light">All Anonymous VM:mmap的匿名页 873</pre> 874 </li> 875 </ul> 876 <p class="fontColor">点击下方的Mark Snapshot可以在时间轴上打标签。出现小旗的标志,通过标注多个时间点。点击到Snapshot List标签页可以看到各个时间点的内存的增长值<br> 877 <img src="../figures/Generation.jpg" alt="GitHub Logo"></p> 878 <h3 class="mume-header fontColor">2.5.Native Memory的火焰图功能</h3> 879 <p class="fontColor">点击callinfo左下角的柱状图的图标,会切换到火焰图页面<br> 880 <img src="../figures/nativeflame.jpg" alt="GitHub Logo"></p> 881 <p class="fontColor">进入到火焰图页面,火焰图的展示跟Callinfo的tab页的调用栈显示一致,鼠标放到色块上,悬浮框可以显示调用栈名称和size大小<br> 882 <img src="../figures/nativeflameshow.jpg" alt="GitHub Logo"></p> 883 <p class="fontColor">鼠标左键火焰图,会进入下一级界面,右键回到上一级<br> 884 <img src="../figures/nativeflamelevel2.jpg" alt="GitHub Logo"></p> 885 886</div> 887<script type="text/javascript"> 888 window.onload = (() => { 889 let isDark = window.location.search; 890 if (isDark.indexOf("?") != -1) { 891 isDark = isDark.substr(1, isDark.length - 1); 892 } 893 if (isDark == 'true') { 894 document.getElementById("body").setAttribute('style', 'background-color:#272C34;') 895 let header = document.getElementsByClassName('fontColor') 896 for (let i = 0; i < header.length; i++) { 897 header[i].style.color = '#fff'; 898 } 899 let lightBackGround = document.getElementsByClassName('light') 900 for (let i = 0; i < lightBackGround.length; i++) { 901 lightBackGround[i].style.backgroundColor = '#32373F' 902 } 903 } 904 }) 905</script> 906</body> 907</html>