精华内容
下载资源
问答
  • A1COSC2406HeapFile-源码

    2021-04-08 11:10:18
    A1COSC2406堆文件
  • 数据库在磁盘上的存储布局HeapFile

    千次阅读 2014-09-16 09:31:35
    这篇依然是学习《大规模分布式存储系统:原理解析与架构实战》一书之外的一个话题。通过学习本书,知道了分布式键值系统,通常使用SSTable(一个无序的键值对集合容器)作为其磁盘...这就是今天要探讨的主题----HeapFile.

    ----《大规模分布式存储系统:原理解析与架构实战》读书笔记

    这篇依然是学习《大规模分布式存储系统:原理解析与架构实战》一书之外的一个话题。通过学习本书,知道了分布式键值系统,通常使用SSTable(一个无序的键值对集合容器)作为其磁盘上的布局。这不禁让人产生联想,传统数据库使用的是什么存储布局来存储数据呢?这就是今天要探讨的主题----HeapFile.

    HeapFile是什么?

    HeapFile是一种保存Page数据的数据结构,类似于链表,HeapFile也是一种无序容器。
    HeapFile和SSTable其实都是具有特殊结构的文件。既然都是保存数据,为什么不直接使用文件呢?因为系统文件并不区分文件的内容。处理起来粒度大。而HeapFile和SSTable都能够提供记录级别的管理,从这一点上来说,二者的功能都是相同的,都是为系统提供更细粒度的存储管理。

    基本上,Oracle,MySql,PostgreSql,SQLServer等传统数据库都使用HeapFile作为其存储布局管理。如同SSTable一样,HeapFile的结构实际很简单,但是你需要时刻知道,数据库中存储使用的是HeapFile。

    我们都知道,数据库通常使用B+树作为索引,但是国内很少有人提到数据库使用的是HeapFile来管理记录的存储。国外的一些大学在“数据库系统实现”这门课上通常会让学生实现一个简单的数据库,因此有不少HeapFile的资料。

    基于Page的HeapFile

    采用链表形式的是HeapFile如下:

    Heap file和链表结构类似的地方:

    • 支持增加(append)功能
    • 支持大规模顺序扫描
    • 不支持随机访问

    这种方式的HeapFile在寻找具有合适空间的半空Page时需要遍历多个页,I/O开销大。因此一般常用的是采用基于索引的HeaFile.在HeapFile中使用一部分空间来存储Page作为索引,并记录对应Page的剩余量。如下:

    像上图那样,索引单独存在一个page上。数据记录存在其他page上,如果有多个索引的page,则可以表示为:

    下面是Heap file自有的一些特性:

    • 数据保存在二级存储体(disk)中:Heapfile主要被设计用来高效存储大数据量,数据量的大小只受存储体容量限制;

    • Heapfile可以跨越多个磁盘空间或机器:heapfile可以用大地址结构去标识多个磁盘,甚至于多个网络;

    • 数据被组织成页;

    • 页可以部分为空(并不要求每个page必须装满);

    页面可以被分割在某个存储体的不同的物理区域,也可以分布在不同的存储体上,甚至是不同的网络节点中。我们可以简单假设每一个page都有一个唯一的地址标识符PageAddress,并且操作系统可以根据PageAddress为我们定位该Page。

    一般情况下,使用page在其所在文件中的偏移量就可以表示了。

    一种简单的布局实现方案

    File的布局

    在实现数据在文件中的布局的时候,为了实现更简单,我先做了一个简单的约定:一个文件表示一个关系
    这意味着一个关系的记录的条数受到文件系统的限制,如果是FAT32位系统,一个文件最大只能是4G,如果是普通的etx3,单个文件则是2TB。

    同样为了实现简单,采用了数组的方式来组织页。
    HeapFile的组织如下:


    其中N和P为文件的最开始的16(或32)个字节。即N和P实际保存的是两个long型的值。N表示文件中页的数目,P表示每页的大小。则:

    • 文件的总大小 FileSize = N * P + 2 * sizoeof(long).
    • 任意一页的页首地址 Page(k) = P * ( k - 1 ) +2 * sizeof(long) (k = 1,2,...,N)

    Page的布局

    页中可以包含多条记录。如果每天记录的长度都相同,则称为定长记录,如果每条记录的长度有不相同,则称为变长记录。定长记录可以采用数组的方式记录,但是变长记录不行。因此采用偏移量的方式来记录。page的布局如下:

    从页首开始一条条记录。页尾用一个int整形记录剩余空间的偏移量,再用一个Int整形该页已存储的记录数,每一条记录在页中的偏移量和是否被删除的标记。
    其中,

    • FreeSpace表示该页空间剩余量的首地址,也是最后一条记录的尾地址+1;
    • N表示该页中已经存在的记录的条数,包括哪些被标记为删除的记录;
    • 尾部的R1,R2,..表示其对应记录在页内的偏移地址,同时还会分出1个bit位标记这条记录是否被删除。如果要支持记录跨页存储的话,还需要再分出2bit来标记其是否是跨页的记录。
      尾部的R1,R2等可以定义为如下结构体:
      struct IndexRecord
      {
      unsigned int pos:29; //记录在页内的偏移地址
      unsigned int isdelete:1; //是否删除的标记
      unsigned int spanned:2;  //是否跨页存储
      };
      
      IndexRecord总共为32bit,其中29bit表示记录的页内偏移地址 ; 1bit表示记录是否被删除 ; 2bit表示是否跨页存储,0x00表示不跨页,0x01表示跨页,记录为开始的部分,0x10表示跨页,记录为中间部分,中间部分可以有多条,0x11表示跨页,记录为结尾的部分。
      则:
    • 任意一条记录的IndexRecord首地址为 R(k) = P-(2+k)*sizeof(int); (k=1,2,..,N)
    • 计算一个页还能容纳的长度为 FreeLength = P-(2+N)*sizeof(int)
    • 判断一个页是否装满的条件为 FreeLength > 0

    一个Page通常的大小为2K,4K,8K,16K等。

    这里还要再提下空隙的问题,同时删除记录时直接采用标记法,但是当更新记录的时候,由于是变长记录。存在以下3种情况:

    1. 新记录和原记录一样长:原处更新记录即可
    2. 新纪录比原记录长:原记录标记删除,并新增一条记录,如果有索引,更新索引文件。
    3. 新纪录变原记录短:原处更新记录,无需更新索引文件,但是出现了记录的空隙。

    当空间紧张时,可以尝试压缩页,剔除其中的空隙。

    记录的布局

    定长记录的布局可以比较简单,此处不提。本节主要讨论变长记录的布局,也叫记录的序列化。

    一个常见的例子为给定表Person的定义,使name可以是不超过1024个字符。Schema如下:

    CREATE TABLE Person (
        name      VARCHAR(1024) NOT NULL,
        age       INTEGER NOT NULL,
        birthdate DATETIME
    )
    

    上面表的记录是变长的原因为:

    1. name字段是一个变长的字符串;
    2. birthdate可以为NULL;

    变长record的序列化的关键是字段边界的界定。一种比较流行的方法是在record的首部保存字段边界的offset。
    Person的record的编排方式如下:


    Note:我们在首部设置4个整型去存储三个字段的四个边界offset。
    上面的编排方式很自然的提供一种NULL字段的编排方式--可以标识该字段的值为NULL,如下图:


    第三个offset和第四个offset指向同一个位置,那么就表明第三个字段的大小是零,即是一个NULL值。

    可以看到,使用偏移量无论是Page的布局,还是记录的序列化,都是非常方便的。

    根据以上介绍, 可以有以下推断:

    • 记录的总长度 RecordLength = R[k] k为字段数
    • 每个字段的长度为 ColnumLength(k) = R[k] - R[k-1] , (k=1,2,3,...)
    • 判断一个字段是否为NULL ColnumLength[k] = 0 ,(k=1,2,3,...)

    最后我们在来看一遍关系Person的HeapFile文件的整体布局图


    参考

    这里有一篇关于HeapFile的翻译 关系型数据在磁盘上的存储布局
    原文来自http://dblab.cs.toronto.edu/courses/443/tas/


    欢迎光临我的网站----蝴蝶忽然的博客园----人既无名的专栏
    如果阅读本文过程中有任何问题,请联系作者,转载请注明出处!


    展开全文
  • 例如,如果指定的页面大小是4096,则生成的堆文件将是heap.4096,以运行此文件命令:java dbLoad -p <page> file.csv dbQuery-此文件包含用于在给定堆文件中搜索指定字符串的代码。 它为堆文件的每一页提供输出...
  • Heapfile 用来管理heap file里的dir page们 成员 _firstDirPageId:这个文件的第一个dir page _ftype:文件类型 _file_deleted:删除的时候用的falg _fileName:文件名 方法 HeapFile:接收名字,...

    Heapfile

    用来管理heap file里的dir page们

    成员

    • _firstDirPageId:这个文件的第一个dir page
    • _ftype:文件类型
    • _file_deleted:删除的时候用的falg
    • _fileName:文件名

    方法

    • HeapFile:接收名字,如果是null就开个临时的heapfile(离开的时候会被destructor干掉),否则打开已有文件or创建新文件

      1. 先假设文件已经被干掉,设置filedeleted与_fileName
      2. 如果name是null,起一个临时文件名,否则用给的名字。(这里看到了古老的strdup……)
      3. 试图用DB->getfileentry获得第一个dir page并将得到的page id写进_firstDirPageId
        1. 如果失败,说明文件还不存在
          1. 用Buffer Manager创建一个新dir page到frame中
          2. 将这个创建了第一个dir page的file entry加入DB中
          3. 接着为这个已经在内存里的dir page初始化一个实体HFPage,设好id,将前后设为空,然后让Buffer manager unpin并指明它是dirty的
        2. 如果成功,说明文件已经存在,往下走
      4. 将暂设的_file_deleted设回去
      5. 完成之后保证:firstDirPageId指向这个file的第一个 dir page,fileName对应系统里实际存在的文件,此时还没pin过任何data page
    • ~HeapFile:执行前需要保证所有page都没有被pin,所有private member都是有效的

      1. 首先删除_fileName
      2. 如果是temp file,用deleteFile删掉这个临时文件
      3. 如果不是,而且这时有多个USER,需要对第一个dirPage加锁然后unpin
    • getRecCnt:返回整个文件里有多少record

      1. 遍历每个dir page(查看前要先pin),把里面每个data page的info里的recct累加进answer
      2. 每个dir page遍历之后要转换到下一个page,并且unpin
    • insertRecord:接收一个record的指针,内容长度,用来写分配好的rid的参数

      1. 遍历每个dir page,寻找其中有足够空间(dpinfo.availspace>=recLen)的data page
      2. 如果当前dir page里已有的data page都不够放:
        1. 目前的dir page还能够增加新的data page,创建新的data page(_newDataPage),将新的data page插入当前dir page(调用dir page的insertRecord),再在这个新的data page插入record
        2. 目前的dir page已满,去找下一个dir page(。。。有点蠢?不过record是尽量放到前面的dir page里好点)
        3. 如果有下一个dir page,unpin现在的dir page,pin下一个dir page,回到outer loop继续找
        4. 如果已经没有下一个dir page了,怒再创建一个dir page,先buffer manager的newPage,各种初始化,设current dir page的下一个dir page是这个新的dir page(接到链表尾巴),unpin现在的dir page,current dir page轮换到这个新的,然后回到outer loop,这下空间总够了。。
      3. 找到了可以放的data page之后,pin之,一通检查,然后将record插进去,将它的recct++,更新availspace
      4. unpin datapage,注意要说明它是dirty的
      5. 更新dir page里作为record的dpinfo(前面更新的是data page自带的dpinfo)
    • deleteRecord:接收rid,删除record

      1. 先把关联的dir page、data page的指针、id和info都拿到手
      2. 在data page里删掉record,修改recct
      3. 如果这个时候data page空了(recct==0),free掉data page,在dir page里删掉对应的record
      4. 如果这个时候dir page也跟着空了(getFirstRecord没返回OK),也删掉这个dir page
        1. 要检查有没有前一个dir page,有的话绕过去
        2. 再检查有没有后一个dir page,有的话绕过去
        3. 检查完之后unpin这个dir page,然后free掉
      5. 如果没啥空的,该unpin就unpin,然后返回
    • updateRecord:接收rid,新record的指针和长度,负责把新的record覆盖掉rid所指的record

      1. 先找data page,找到了去找record,如果长度不和原来一样,报错就跑(= =b)
      2. 用memcpy修改,unpin掉data page和dir page,返回
    • getRecord:接收rid,指针,长度,读取指定长度的数据写进指针里

      1. 调用_findDataPage找有这个rid的data page
      2. 如果找不到,返回状态码
      3. 如果找得到,再对这个data page调用getRecord,将record写进来,unpin掉用过的page,返回
    • openScan:发起scan

      1. new一个scan,传进this。。。跑人。。
    • deleteFile:将这个file从database删除

      1. 如果_file_deleted这个flag是true,说明已经删掉了,报错
      2. 遍历所有dirPage,删除它们reference的所有data Page(没删完之前要pin住dir page)
        1. 遍历dirPage的每一个record,里面存有这个file里每一个data page的id,用buffer manager free掉每一个data page(deallocate硬盘空间)
        2. 获取它后面的dir Page(如果有),删除它自己。如果有下一个dir Page,让buffer manager pin住再进入下一个pass
      3. 最后删掉file_entry和header page,搞定
    • _newDatapage:接收DataPageInfo来分配一个新的data page,注意这个只是用来分配新page的,需要在其他地方将这个新的data page加入directory中
      1. 先让buffer manager newPage,这样可以进到buffer pool里
      2. 设置好这个新page的信息(前后为空,pageid设好)
      3. 设置对应的dpinfo
    • _findDatapage:给getRecord和upadateRecord用的,接收rid,将找到的reocrd的位置对应记录在dirPage和dataPage的id与指针参数里,datapage在dir page里的rid,也就是根据rid找它对应的datapa page
      • 遍历每个dir page的每个data page,用returnRecord确定在不在data page里,找啊找直到找到为止,把对应的参数写好,返回
      • 查看之前要pin,看完要unpin
      • 如果找不到,最后面把指针设为NULL,各种id设为INVALID_PAGE,返回

    DataPageInfo

    描述data page的状况,这是dir page里的record

    • availspace: 还剩多少可用空间
    • recct: 里面有多少record
    • PageId

    转载于:https://www.cnblogs.com/joyeecheung/p/3672096.html

    展开全文
  • MIT6.830 lab2 part3 对HeapFile添加Insert和Delete操作.pdf
  • 我有一个11个字段上万行的csv文件,老师要求把这些记录按照heapfile组织起来。并且用C语言实现。请问大家如何定义相关的结构?
  • heapdump file must have .hprof extention javax.management.RuntimeMBeanException: java.lang.IllegalArgumentException: heapdump file must have .hprof extention at ...

    heapdump file must have .hprof extention

    javax.management.RuntimeMBeanException: java.lang.IllegalArgumentException: heapdump file must have .hprof extention
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.rethrow(DefaultMBeanServerInterceptor.java:839)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.rethrowMaybeMBeanException(DefaultMBeanServerInterceptor.java:852)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:821)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at com.tongweb.server.monitor.snapshot.Generater.generateJmap(Generater.java:440)
        at com.tongweb.server.monitor.snapshot.Generater.generateJmaporJstack(Generater.java:476)
        at com.tongweb.server.monitor.snapshot.Generater.access$300(Generater.java:27)
        at com.tongweb.server.monitor.snapshot.Generater$4.run(Generater.java:172)
        at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.IllegalArgumentException: heapdump file must have .hprof extention
        at sun.management.HotSpotDiagnostic.dumpHeap(HotSpotDiagnostic.java:51)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
        at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
        at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193)
        at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175)
        at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117)
        at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54)
        at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
        at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
        at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
        at javax.management.StandardMBean.invoke(StandardMBean.java:405)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
        ... 6 more
    

    1、具体原因:
    TongWeb快照功能通过jmap生成内存镜像文件名为heap.bin, 而某些JDK要求以.hprof为后缀。

    解决方式一:

    1、在TongWeb/bin/external.vmoptions添加-XX:+HeapDumpOnOutOfMemoryError 
    2、或者在tongweb的控制界面(9060/console)启动参数配置去添加
    

    解决方式二:

    1、在TongWeb/bin/external.vmoptions修改启动参数Xmx、-XX:MaxPermSize调大一点重启TongWeb
    2、也可以在tongweb控制台->启动参数设置去修改
    

    解决方式三:最优解推荐使用

    1、 将TongWeb的快照关闭
    2、 只关闭jmap生成功能。
    

    在这里插入图片描述

    展开全文
  • JProfiler和JavaVisualVM分析Heap dump文件 下面将介绍利用常见的两个工具分析Heap dump文件。 接下来分析的heap dump文件,都是由于下面的代码引起的内存泄漏。 List<Integer> temp = new ArrayList<>...

    JProfiler和JavaVisualVM分析Heap dump文件

    下面将介绍利用常见的两个工具分析Heap dump文件。

    接下来分析的heap dump文件,都是由于下面的代码引起的内存泄漏。

    List<Integer> temp = new ArrayList<>();
     for(int i=0;i>=0;i++){
         temp.add(i);
     }
    

    1、JProfiler分析heap dump

    JProfiler打开->“Open Snapshot”—>找到dump文件—>查看“Heap walker”。
    在这里插入图片描述
    右击,选择这一个References。
    在这里插入图片描述
    这个基本能看出来是ArrayList引起的问题。

    2、Java VisualVM分析heap dump

    文件—>装入,选择heap dump文件
    在这里插入图片描述

    点击“ 导致 OutOfMemoryError 异常错误的线程”,会跳转到异常部分
    在这里插入图片描述
    很清晰直观定位到哪个方法。

    展开全文
  • Java Heap dump文件分析工具jhat简介

    千次阅读 2018-03-28 15:58:11
    jhat 是Java堆分析工具(Java heap Analyzes Tool)....用法:jhat [ options ] heap-dump-file 参数:options 可选命令行参数,请参考下面的 Optionsheap-dump-file 要查看的二进制Java堆转储文件(Java...
  • 1.基于page的heap file Heap file是保存page数据的一种数据结构。从功能上来说,Heap file类似于内存数据结构中的链表。它可以作为通用数据项的一种无序容器。 Heap file和链表结构类似的地方: --高效的增加...
  • Protostar Heap Write Up

    2017-12-04 11:14:52
    protostar heap write up
  • Exercise 5

    2016-11-08 18:56:13
    这次感觉比前几次都难,尤其卡在...详细代码如下HeapFile.java 在文本编译器上删的sout测试语句,可能会带来一些错误,欢迎指正public class HeapFile implements DbFile { /** * Constructs a heap file backed by t
  • jmap -dump:format=b,file=heapdump.hprof Pid;生成一个关于此进程的堆栈使用情况;使用工具做出对比
  • Java Heap Dump 是特定时刻 JVM 内存中所有对象的快照。它们对于解决内存泄漏问题和分析 Java 应用程序中的内存使用情况非常有用。 Java Heap Dump 通常以二进制格式的 hprof 文件存储。我们可以使用 jhat 或 ...
  • Heap Analyzer

    2020-11-12 09:04:55
    快速定位可能发生内存泄露的区域,提高排查效率,由于jvisualvm或jmap生成的dump文件太大,常常需要用到dump文件分析工具对dump文件进行...启动后使用open file菜单,浏览打开我们需要进行内存堆栈分析的heapdump文件
  • mysql内存表heap使用总结

    千次阅读 2011-05-04 00:11:00
    3、一旦服务器重启,所有heap表数据丢失,但是heap表结构仍然存在,因为heap表结构是存放在实际数据库路径下的,不会自动删除。重启之后,heap将被清空,这时候对heap的查询结果都是空的。 4、如果heap是复制的某...
  • native_heapdump_viewer.py

    2020-02-18 09:59:03
    通过如下命令: python native_heapdump_viewer.py (--html) --symbols . heap.txt > heapinfo.txt 解析导出的内存信息文件,解析出可供查询的内存信息文件
  • redis启动错误

    2018-09-21 09:55:23
    1 通过命令行窗口运行redis-server,查看错误信息 2 错误信息内容为: The Windows version of Redis allocates a large ...the heap with the forked process used in persistence operations. This file...
  • 最近一段时间经常使用JDK自带工具jmap和jstack来dump JVM heap和JVM 线程栈的log来分析问题,执行这两个命令当时让我最摸不着头脑的就是碰到这个问题:well-known file is not secure eg:    上网google了一把...
  • 写在前面   写这篇文章时,网上已经有了铺天盖地的文章来介绍 FreeRTOS 的动态...  FreeRTOS 支持 5 种动态内存管理方案,分别通过文件 heap_1.c,heap_2.c,heap_3.c,heap_4.c 和 heap_5.c 实现。这 5 个文件...
  • 关于Heap Dump

    万次阅读 2019-04-08 22:58:48
    关于Heap DumpHeap Dump是什么?Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap du...
  • Java heap dump及分析

    千次阅读 2019-07-12 19:15:03
    1. 如何进行 heap dump 2. MAT 的使用 3. object 的 Incoming 与 Outgoing References 4. object 的 Shallow Size 与 Retained Size 以及计算方法 5. dump 分析(一般的OOM,同一Class被加载多次,ClassLoader泄漏...
  • jmap -heap 命令结果分析

    万次阅读 2018-06-01 20:51:02
    jmap -heap pid Attaching to process ID 3764, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.171-b11 using thread-local object allocat...
  • Java Heap堆分析

    千次阅读 2018-06-20 10:39:52
    Heap dump file created jmap中包含live选项,会在堆转储前执行一次Full GC;jcmd默认就会这么做。如果因为某些原因,不希望包含其他对象(即死对象),可以在jcmd命令的最后加上-all。 2.3、自动堆转储 ...
  • Using local file /home/fangliang/gperftools_test/heap_checker/leak. Leak of 16 bytes in 1 objects allocated from: @ 55f9903b8723 main @ 7fed6bbc9b97 __libc_start_main @ 55f9903b862a _start If the...
  • 在《内存泄漏分析的利器——gperftools的Heap Checker》一文中,我们介绍了如何使用gperftools分析内存泄漏。本文将介绍其另一个强大的工具——Heap Profiler去分析堆的变化过程。(转载请指明出于breaksoftware的...
  • IBM HeapAnalyzer简介使用

    万次阅读 2017-11-28 17:26:30
    IBM®HeapAnalyzer   创建者:Jinwoo Hwang(JinwooHwang.com)     欢迎来到IBM HeapAnalyzer。IBM HeapAnalyzer允许您使用其获得专利的启发式搜索引擎查找可能的Java™堆泄漏,并分析Java堆转储。   介绍 Heap...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,237
精华内容 40,494
关键字:

Heapfile