一种从数据库快速加载mat文件的方法
- 格式:pdf
- 大小:430.55 KB
- 文档页数:5
内存管理与防范手段目录内存管理与防范手段 (1)一.内存分配跟踪工具DDMS–>Allocation tracker 使用 (2)二.内存监测工具DDMS-->Heap (2)三.内存分析工具MAT(MemoryAnalyzerTool) (3)1.生成.hprof文件 (4)2.使用MAT导入.hprof文件 (5)3.使用MAT的视图工具分析内存 (5)四.MAT使用实例 (5)1.生成heap dump (7)2.用MAT分析heap dumps (9)3.使用MAT比较heap dumps (11)五.防范不良代码 (11)1.查询数据库没有关闭游标 (11)2.缓存convertView (12)3.Bitmap对象释放内存 (13)4.释放对象的引用 (13)5.Context的使用 (14)6.线程 (17)7.其他 (20)六.优化代码 (20)1.使用自身方法(Use Native Methods) (20)2.使用虚拟优于使用接口 (20)3.使用静态优于使用虚拟 (20)4.尽可能避免使用内在的Get、Set方法 (20)5.缓冲属性调用Cache Field Lookups (21)6.声明Final常量 (21)7.慎重使用增强型For循环语句 (22)8.避免列举类型Avoid Enums (23)9.通过内联类使用包空间 (23)10.避免浮点类型的使用 (24)11.一些标准操作的时间比较 (24)12.为响应灵敏性设计 (25)一.内存分配跟踪工具DDMS–>Allocation tracker 使用运行DDMS,只需简单的选择应用进程并单击Allocation tracker标签,就会打开一个新的窗口,单击“Start Tracing”按钮;然后,让应用运行你想分析的代码。
运行完毕后,单击“Get Allocations”按钮,一个已分配对象的列表就会出现第一个表格中。
jdbctemplate插入大量数据提高效率的方法使用批处理操作是提高JdbcTemplate插入大量数据效率的方法之一。
可以通过以下步骤实现:1. 创建一个包含所有要插入的数据的列表。
2. 使用JdbcTemplate的`batchUpdate()`方法执行批处理操作。
- 将INSERT语句作为参数传递给`batchUpdate()`方法。
- 将数据列表作为批处理的输入参数。
3. 在INSERT语句中使用占位符来代替具体的值。
- 使用`?`作为占位符。
- 在INSERT语句的VALUES子句中提供相应的占位符。
4. 使用`batchUpdate()`方法执行批处理操作。
以下是一个示例代码:```javapublic void insertBatchData(List<Data> dataList) {String sql = "INSERT INTO table_name (column1, column2, ...) VALUES (?, ?, ...)";jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {@Overridepublic void setValues(PreparedStatement ps, int i) throws SQLException {Data data = dataList.get(i);ps.setString(1, data.getValue1());ps.setInt(2, data.getValue2());// 设置其他占位符对应的值}@Overridepublic int getBatchSize() {return dataList.size();}});}```注意事项:- 在使用`batchUpdate()`方法执行批处理操作时,通常需要将数据分成较小的批次进行插入。
使用C++语言读取*.mat文件中的数据简介:借助于Matlab的接口函数,在Visual Studio中使用C++语言读取*.mat文件中的数据(这里主要是2维矩阵(灰度图像)和3维矩阵(彩色图像))到OpenCV 中的Mat数据结构中并显示图像,同时实现将灰度图像转化为伪彩色图像(类型为Matlab中的colormap jet),最后调用Windows的API函数实现窗口尺寸的自由调整。
工具:(1)Matlab R2015b(x64) (2)Visual Studio 2013 (3)OpenCV 3.0.0一、在Visual Studio配置Matlab和OpenCV假设Matlab的安装路径为“E:\Program Files\MATLAB”,OpenCV的安装路径为“E:\Program Files\opencv”。
1.配置环境变量在“控制面板》系统和安全》系统》高级系统设置》环境变量》系统变量”中找到变量名“Path”,编辑之,在变量值的末尾添加“;E:\Program Files\MATLAB\R2015b\bin\win64;E:\Program Files\opencv\build\x64\vc12\bin”。
如图1所示。
图12.配置配置管理器在Visual Studio 2013中新建一个“Win32控制台应用程序”,在菜单栏“生成”中打开“配置管理器”选项。
将“活动解决方案平台”中的“Win32”选为(新建为)“x64”。
如图2所示。
图23.配置属性管理器在菜单栏“视图”中打开“属性管理器”选项,右键点击Debug|x64下的er并打开“属性”选项,如图3所示。
在“er属性页”中找到“通用属性”下的“VC++目录”,在其右侧的“包含目录”下添加路径“E:\Program Files\opencv\build\include”“E:\Program Files\opencv\build\include\opencv”“E:\Program Files\opencv\build\include\opencv2”“E:\Program Files\MATLAB\R2015b\extern\include”“E:\Program Files\MATLAB\R2015b\extern\include\win64”一共5个路径。
Global Mapper海量数据加载方法1.创建映射目录
2.命名映射名称
3.加载数据(按文件或目录加载;可连续加载)。
4.蒙板默认即可。
5.设置空间参考
6.点击确定后加载数据
7.加载完后确定
8.设置光栅图层显示方式、设置透明色
9.完成以上设置后即加载完数据
3.1.需要合并的影像都导入到软件后,在菜单栏File中选择“输出栅格数据”
3.2.在弹出的对话框中选择第一个选项卡:选择24-bit RGB;勾选Generate TFW File,如下图
3.3.单击确定,在弹出的对话框中选择存放路径,输入文件名称,点击保存。
等软件合并后之后,合并的影像就保存到制定的目录下了,如下图:。
教你⽤MAT⼯具分析Java堆内存泄漏问题的解决⽅法⼀、MAT概述与安装MAT,全称Memory Analysis Tools,是⼀款分析Java堆内存的⼯具,可以快速定位到堆内泄漏问题。
该⼯具提供了两种使⽤⽅式,⼀种是插件版,可以安装到Eclipse使⽤,另⼀种是独⽴版,可以直接解压使⽤。
我把独⽴版MAT安装包放到了⽹盘上,⽅便直接下载提取码: 42qt独⽴版解压后,其内部⽂件是这样的——这⾥有⼀个MemoryAnalyzer.ini⽂件,⾥⾯有⼀个Xmx参数,默认是-Xmx1024m,这代表MAT的最⼤内存⼤⼩,根据具体分析的dump⽂件⼤⼩来做适当调整。
点击MemoryAnalyzer.exe,启动完成后,即可以使⽤它来检查定位内存泄漏相关的问题了。
⼆、内存泄漏案例分析下⾯,我会结合⼀个⼩案例来分享MAT的使⽤。
⾸先,⽤IDEA建⽴⼀个测试类——public class example {public static void main(String[] args) {List<User> list=new ArrayList<>();while (true){list.add(new User());}}}class User {private String name="demo";public User() {}}给这个测试类设置虚拟机参数,设置如:-Xms2m -Xmx2m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/local_system/git/demo/heapdump.hprof这⼏个参数的意义是:-Xms2m -Xmx2m:堆最⼩内存为2M,最⼤内存为2M。
这⾥没有显⽰设置新⽣代⼤⼩,它会⾃动分配新⽣代⼤⼩,分配完剩下的,就是⽼年代⼤⼩了。
-XX:+HeapDumpOnOutOfMemoryError:指发⽣内存溢出的时候,会⾃动⽣成⼀个⼆进制的堆快照⽂件,这个快照⽂件以.hprof后缀结尾。
Global Mapper海量数据加载方法1.创建映射目录
2.命名映射名称
3.加载数据(按文件或目录加载;可连续加载)。
4.蒙板默认即可。
5.设置空间参考
6.点击确定后加载数据
7.加载完后确定
8.设置光栅图层显示方式、设置透明色
9.完成以上设置后即加载完数据
3.1.需要合并的影像都导入到软件后,在菜单栏File中选择“输出栅格数据”
3.2.在弹出的对话框中选择第一个选项卡:选择24-bit RGB;勾选Generate TFW File,如下图
3.3.单击确定,在弹出的对话框中选择存放路径,输入文件名称,点击保存。
等软件合并后之后,合并的影像就保存到制定的目录下了,如下图:。
FOXBASE数据库的基本操作数据库的建立和显示1.建立数据库结构*建立库结构的命令CREATE格式CREATE <驱动器号> <路径> <库文件名> <文件扩展名>功能在磁盘上建立一个库结构执行该命令后,进入全屏幕编辑状态。
用户一般可以编辑每一个字段的4个特征值。
它们是,字段名称由汉字、字母、数字、和下划线组成,长度不超过10个字符,以汉字或字母开始的的字串字段类型可以是N、C、L、D、M中的任何一种。
系统的缺省值为C。
字段宽度L、D、M这三种类型的宽度是固定的,分别为1、8、10,C型的宽度可由用户在1-254之间定义,N型的宽度在1-19之间小数位数对于C型字段,小数位数可以在1-15之间定义,并且必须至少比该字段的宽度小22.输入数据库的记录*建立库结构之后立即输入在建立了数据库结构并存盘退出之前,系统提问是否立即输入记录数据。
若是,则键入“Y”,屏幕显示输入记录数据的屏幕。
在需要向备注字段输入内容时,当光标移到该字段上后,按下<CTRL+HOME>,则进入备注字段的全屏幕编辑状态。
可按一般文本编辑方式输入所需的内容。
之后,按<CTRL+END>返回先前的屏幕,可继续输入其它记录。
*事后向数据库中追加记录命令格式:APPEND [BLANK]功能:向当前数据库末尾追加记录。
若含有参数BLANK,则在数据库末尾追加一条空的记录并返回系统的“点状态”。
若不含BLANK参数,则进入记录编辑屏幕,可在末尾一条记录之后开始添加新的记录*退出输入记录状态(1)存盘退出1)在确信要终止记录输入并将正编辑的库文件存盘时,按<CTRL+W>或<CTRL+END>键。
2)当光标位于一新记录的首字段时,按回车即可。
(2)不存盘退出键入<ESC>或<CTRL+Q>。
*显示库结构命令格式:LIST|DISPLAY STRUCTURE [TO PRINT]功能:显示当前数据库的结构LIST:连续显示DISPLAY:分屏显示*显示库记录命令格式:LIST|DISPLAY [<范围>] [[FIELDS]<表达式表>] [FOR<条件>] [WHILE<条件>] [OFF] [TO PRINT]功能:显示当前数据库中指定范围内,满足条件的所有记录OFF:不显示记录号,系统默认为显示记录号LIST:不分屏显示,且在无<范围>、<条件>参数时,默认是ALLDIAPLAY:分屏显示,且在无<范围>、<条件>参数时,默认显示当前一条记录打开和关闭数据库1.选择工作区命令格式:SELECT <工作区号>|<工作区明>|<别名>功能:选定一个工作区为当前工作区FOXBASR在内存中设置了10个工作区,每一个区中可以打开一个库文件,故可以同时打开10个库文件。
内存分析工具MAT的使用一、MAT插件安装MAT(Memory Analyzer Tool) 是基于heap dumps来进行分析的,它的分析速度比jhat快,分析结果是图形界面显示,比java内置jhat的可读性更高,通过Eclipse市场安装方法/步骤1打开Eclipse - >help - > Eclipse Marketplace2点击install,等待下面的进度条加载完毕后,勾选全部,点击Next3同意协议后,点击Finish就开始安装MAT了直接输入URL安装方法/步骤21.打开Eclipse - >help - > Install New Software2.在work with输入图中下载地址,勾选Memory Analyzer forEclipse IDE选项3.若没有勾选Memory Analyzer for Eclipse IDE选项,点击地址栏旁边的Add,在location里输入以上地址,点击OK即可。
4.安装完成后提示重启Eclipse,重启后打开window - > openperspective,看到Memory Analysis证明安装成功。
二、MAT的使用案例一问题线上某一台机器出现异常.接口调用的rt达到了万级别..基本可以判断这个机器已经挂了.进而分析该机器一直在fgc.然后马上dump内存,进而进行分析(中间一些异常的gc日志没有截图).之前学习的jvm知识都是纯理论的,这次是实打实线上出现的问题.所以记录一下.步骤1 、先dump对应的堆,然后从线上发到自己本机dump的命令是jmap -dump:format=b, <pid>2、调整eclipse的内存具体的数值,需要看dump的文件大小.比如我的dump文件是1.3G,我就给了eclipse 2G的内存..据说有些dump文件有几十个G的大小,那么分析的机器也必须比这个大才行,否则eclipse本身就OOM了.3、分析.调整到 Memory Analysis 窗口,然后File->Open Heap Dump然后选择dump的文件,然后MAT就自动会进行分析..分析完了,直接查看Leak Suspects Report . MAT会自动帮你找内存泄露的疑凶.然后给你点下面的Detail .可以看到最直观的类和所占用的大小可以看到, IosPushClient 的直接引用是40byte 但是对应的间接引用达到了恐怖的420M 那么再点击该类,list obejcts .重点看间接引用占用的大的可以看到这个LinkedHashMap中,有47528个1776byte的对象。