如何测试能判断Java代码,是否存在内存泄漏的问题?

我自己封装了一个jdbc的包

如何能判断出,我这段代码是否存在内漏泄漏的情况

 /**
 * oracle jdbc
 * @author rgy
 *
 */
public class OracleJdbc {

    private Connection conn;
    private ResultSet rs;
    private ResultSetMetaData md;
    private PreparedStatement ps;
    private Properties prop;
    private String url;
    private String user;
    private String psw;
    private List<Map<String,Object>> list;
    private Map<String,Object> map;
    private Integer flg;
    private FileInputStream fis;
    private String path = "src/orcl.properties";

    //测试代码
    public static void main(String[] args)  {
        OracleJdbc oracle = new OracleJdbc();
        try {
            String sql = "select * from GC_EXAMTYPE t where t.examtype_id= ?  or examtype_id=?";
            List<Map<String, Object>> query = oracle.query(sql,5,6);
            System.out.println(query);
            String inser_sql = "insert into test (id, name) values (?, ?)";
            Integer add_flg = oracle.add(inser_sql, 2,2);
            System.out.println(add_flg);
            String mod_sql = "update test set name = ? where id=?";
            Integer mod_flg =oracle.mod(mod_sql, 2,1);
            System.out.println(mod_flg);
            String del_sql = "delete test where id=?";
            Integer del_flg =oracle.del(del_sql, 1);
            System.out.println(del_flg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 连接数据库
     * @throws Exception
     */
    public void open(){
        try {
            fis = new FileInputStream(path);
            prop = new Properties();
            prop.load(fis);
            url = prop.getProperty("db.url");
            user = prop.getProperty("db.user");
            psw = prop.getProperty("db.password");
            Class.forName(prop.getProperty("driverClass"));
            conn = DriverManager.getConnection(url, user, psw);
        } catch (IOException | ClassNotFoundException | SQLException e) {
            close(conn,ps,rs);
        }
    }
    /**
     * 关闭连接
     */
    public void close(Connection conn,PreparedStatement ps,ResultSet rs) {
        try {
            if(ps!=null) ps.close();
            if(rs!=null) rs.close();
            if(conn!=null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
    /**
     * 执行dml语句
     * @param sql dml语句
     * @param objs 参数
     * @return 0失败 1成功
     * @throws SQLException sql异常
     */
    public int dml(String sql, Object... objs) {
        open();
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i+1, objs[i]);
            }
            flg = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            close(conn,ps,rs);
        }
        return flg;
    }
    /**
     * 执行查询语句
     * @param sql 查询语句
     * @param objs 参数
     * @return 查询结果
     */
    public List<Map<String,Object>> query(String sql,Object...objs){
        open();
        list = new ArrayList<>();
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i+1, objs[i]);
            }
            rs = ps.executeQuery();
            md = rs.getMetaData();
            while (rs.next()) {
                map = new HashMap<>();
                for (int i = 1; i <= md.getColumnCount(); i++) {
                    String key = md.getColumnName(i);
                    Object value = rs.getObject(i);
                    map.put(key, value);
                }
                list.add(map);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            close(conn,ps,rs);
        }
        return list;
    }
    /**
     * 添加数据
     * @param sql 添加语句
     * @param objs 参数
     * @return 0失败 1成功
     */
    public int add(String sql,Object...objs) {
        flg = dml(sql, objs);
        return flg;
    }
    /**
     * 修改数据
     * @param sql 修改语句
     * @param objs 参数
     * @return 0失败 1成功
     * @throws SQLException sql异常
     */
    public int mod(String sql,Object...objs){
        flg = dml(sql, objs);
        return flg;
    }
    /**
     * 删除数据
     * @param sql 删除语句
     * @param objs 参数
     * @return 0失败 1成功
     */
    public int del(String sql,Object...objs){
        flg = dml(sql, objs);
        return flg;
    }
}
0

3个回答

内存泄漏,其实说简单点,就是手机内存都是有限的,当你的应用切出界面了,或者通过别的方式方法不在手机当前界面了,系统有个垃圾回收机制,会把你的应用中不同的页面或者service服务当做垃圾回收,但是如果你的应用中写了有关于网络加载的代码,系统就不会消除你的页面,导致该消除没消除,你的那个代码页面就会占用系统的内存,系统内存被占用的多了,就卡,导致死机。。。。说的不好 见谅

0
1

代码是否健壮和内存泄漏有什么关系?
你去看一下,什么叫做内存泄漏就知道你自己的代码写得好不好了

-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何查看应用是否存在内存泄漏
查看内存信息: 一般来说内存占用大小有如下规律: VSS &gt;= RSS &gt;= PSS &gt;= USS VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)是单个进程全部可访问的地址空间 RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)是单个进程实际占用的内存大小,对于单个共享库, 尽管无论多少个进程使用,实...
使用JDK工具检查运行系统是否存在内存泄露
转自:http://crane-ding.iteye.com/blog/715450     首先在实验之前,先给大家介绍几个jdk自带的工具:  1. jps  查看所有java进程的pid的命令,与Unix的ps命令类似  2. jmap 打印出某个java进程(使用pid)内存内的所有‘对象’的情况  3. jhat 主要用于分析jmap产生的dump并提供web页面查看分析
app的内存泄漏的检测(转)
开发接近尾期 主体功能已经实现  现在开始进行优化 其中内存泄漏时检测的重点 以下为使用Android studio自带的工具和LeakCanary的相关知识  本文转载自 http://blog.csdn.net/zxc123e/article/details/52924264  如有侵权 请联系删除 内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是
性能测试瓶颈分析之内存泄漏
关于内存泄漏,相信大家都不陌生,压力测试中经常会出现,本人最近在做一个压力测试中就着实体会了一下,上来分享分享。   内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。   以发生的方式来分类,内存泄漏可以分为4类:   1.
简单说说如何测试内存泄漏
内存泄漏产生的原因: 内存分配后忘了回收(new或malloc后没有delete或free);程序代码问题造成内存无法回收(如死循环造成无法执行到回收步骤);API函数操作不当,造成内存泄漏。 检查方法 人工静态法:代码走读,人工查找未被回收的内存。自动工具法:借助相应测试内存泄漏的工具,如Visual Leak Detector,记录每次内存分配,清楚告诉用户内存是如何泄漏的。
验证内存泄漏的简单方法
最近我们的openresty服务器出现了内存泄露现象,这个方法是运维在解决问题的时候传授给我们的。验证内存泄漏的简单方法:pmap -d 进程号 每隔一段时间pmap一下,看看上面这三个值有没有增加,没增加的话就代表没有泄漏
如何检查Javascript中的内存泄漏
js内存泄漏通常是由于闭包所引起的,我们在判断是否存在内存泄漏的时候往往会觉得无从下手。通常我们通过codereview去判断是否泄漏,但是这种方法不够客观。我们需要一种客观的方法来证明泄漏的存在。 Chrome Devtool 其实Devtool已经提供了检查的工具,这就是Memory面板。它大概长这样。 我们可以通过这个工具对页面中某一时刻的内存状态做一个快照,这个快照中包含此刻...
如何判断JVM内存泄露
(1)代码走审:技术要求较高,纯经验法,遗漏可能性较大,可操作性较强,但一般要求互相审查。(2)工具一 输出JDK的GC日志数据: 设置:JAVA_OPTS增加以下参数打开jdk的GC输出日志:  -verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError(3)jmap获得运行中的JVM内存快照:jmap -dump:format=
JAVA内存泄漏原因和检测工具
摘要   虽然Java虚拟机(JVM)及其垃圾收集器(garbage collector,GC)负责管理大多数的内存任务,Java软件程序中还是有可能出现内存泄漏。实际上,这在大型项目中是一个常见的问题。避免内存泄漏的第一步是要弄清楚它是如何发生的。本文介绍了编写Java代码的一些常见的内存泄漏陷阱,以及编写不泄漏代码的一些最佳实践。一旦发生了内存泄漏,要指出造成泄漏的代码是非常困难的。因此
Android开发中的APP内存泄漏检测
使用android shell命令查看内存使用情况使用adb shell dumpsys meminfo pkgname或者直接使用AndroidStudio里面的memory usage功能然后就会出现如下信息:Applications Memory Usage (kB): Uptime: 14237237 Realtime: 23790474** MEMINFO in pid 8071 [com
在Linux下编写C程序,怎么检查程序是否有内存泄漏?
From: http://bbs.chinaunix.net/thread-908769-1-1.html 如题。 ------------------------------- 找到了!  http://www.valgrind.org/ 同时附一个转自 http://blog.chinaunix.net/u/18381/showart.php?id=16
内存泄漏的检测、几种常见场景及解决方法
内存泄漏的检测 几种常见场景和解决方法
查找activity是否存在内存泄漏--简单粗暴
转载自:这里 测试跟你说你的XXActivity泄露了,你如何确认是否真的泄漏? 确认泄漏后,你又如何定位是哪里的问题导致内存泄漏? Android日常开发中,内存泄漏的重灾区就是Activity,相信这两个是每个Android开发者都碰到过的问题,遇到这种问题,我们一般都会祭出我们的杀手锏:Dump Java Heap然后MAT静态分析GC链。然后今天我想另辟蹊径,从更简单的角度定位并解决
一次排查Java项目内存泄漏的过程
发现问题 公司自己维护的服务三四个,有的服务还分多个节点,自己也有几个私人服务器,所以为了能实时知道各个服务器的情况,就使用ServerStatus做了个云探针,功能很简单,能实时的监控每个服务器的内存、cpu、硬盘、流量的使用情况,如下 虽然只有几个指标,但是已经能让我全面的掌握各服务的性能,再搭配chrome插件iChrome,每天打开浏览器就能第一时间看到监控界面, 我始终相信...
性能指标之资源指标-内存-内存泄漏为什么不易判断
内存泄漏为什么不容易判断 在性能问题里面内存有没有泄露、如果有泄露是哪里泄露了这两个问题是非常难判断和定位的。甚至有厂商对内存是否健康的评判就是:下次系统重启之前,应用能正常运行。换句话说,有内存泄露找不出来也没关系,定期重启一下服务器,而且在生产环境,的确有些企业是这么干的。 CPU如果利用率异常,可以查哪个进程中的哪个函数占用CPU多,相应的,内存也可以
内存泄漏及其检测方法
1、内存泄漏的定义   内存泄漏指的是在程序里动态申请的内存在使用完后,没有进行释放,导致这部分内存没有被系统回收,久而久之,可能导致程序内存不断增大,系统内存不足……引发一系列灾难性后果。 2、内存泄漏的检测方法 #define CRTDBG_MAP_ALLOC //放在程序最前 #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; ...
java判断本地文件是否存在.txt
通过java代码来判断本地文件是否存在
内存泄漏测试命令及程序
/* 文件名称为test_list.cpp 测试std::list内存是否泄漏的问题 g++ -o test_list test_list.cpp -lpthread 查看进程占用的方法为: pidof  test_list linux系统假设输出进程号:9875 cat /proc/9875/status|grep VmRSS 输出的值为正在使用的物理内存的大小 */
什么是内存泄漏?怎么产生的?如何检测?
1.什么是内存泄漏(Memory Leak)?    简单地说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。2、如何检测内存泄露第一:良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和...
解决SAT问题的JAVA代码
解决SAT问题的JAVA代码,判断输入的范式是否存在可满足性。
Hbase使用Java API测试表是否存在
1.创建Maven工程,添加pom.xml和配置文件 pom.xml &amp;lt;dependencies&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.apache.hbase&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;hbase-server&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;1
windows下内存泄露检测
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比
Android内存泄漏查找和解决
内存泄漏的概念 一个内存泄漏的例子 Java中”失效”的private修饰符 回头看内存泄漏例子泄漏的重点 强引用与弱引用 解决内部类的内存泄漏 Context造成的泄漏 使用LeakCanary工具查找内存泄漏
chrome 如何查看开发的页面是否存在内存泄漏
chrome浏览器识别法 按以下步骤执行 打开chrome浏览器 按F12 打开开发工作(或者右键 点 检查) 选择Timeline 标签 点击左上角的 “●”(快捷键 Ctrl+E),进行录制 然后再你需要测试的网站上进行正常的各种用户操作,模拟用户的操作。 经过一段时间,点击对话框里的 stop 按钮,此时就会显示相应的数据了。 内存占用 处在平稳,则说明没有内存泄漏; 如果内存占用 一...
C/C++如何监测内存泄漏
C/C++内存泄漏及检测 内存溢出就是内存越界。内存越界有一种很常见的情况是调用栈溢出(即stackoverflow),虽然这种情况可以看成是栈内存不足的一种体现。例如:递归调用栈;比如说C/C++标准库有个strcpy,会一直复制内存,直到遇到\0。; 内存泄漏就是内存申请后,用完没有释放,造成可用内存越来越少。 实际上很多内存泄漏对程序的运行不会有任何影响,有的内存泄漏,要连续不关机不重...
java判断数据库表是否存在
用java代码判断一张表在数据库中是否存在............
检测程序性能和是否存在内存泄露
对于一个c++程序,内存泄露几乎是我们无法避免的问题,我们也无法直观的知道内存是否泄露,一个程序的瓶颈在什么地方?这时候,我们就需要借助一个工具,来进行分析,作为宇宙最强大的IDE,VS当然提供了不错的性能探查器。 作者发现通过该工具成功的降低了内存的占用,以及发现了程序中耗时严重的函数。 这时我的一些心得,在c++中,有些时候,我们我们会在容器中存储大量的数据,但是当我们执行完特殊的步骤之后,就...
浏览器内存泄漏
1 什么是内存泄漏? 内存泄漏是指内存资源得不到释放 && 失去对该内存区的指针 => 无法复用内存资源,最终导致内存溢出。 2 JS中可以操作的对象有哪些? Script中我们能操作的对象可分为三种:JS EngineObject、DOM Element 和 BOM Element。 JSEngine Object: var obj = Object(); var array = []
linux中内存泄漏的检测(四)记录泄漏的大小
《linux中内存泄漏的检测(三)定制化的new/delete》讲到,利用C++的函数重载的特性,使C++的代码,也能方便地为new/delete加上用于检测内存泄漏的统计代码。然而,也因此引入的新的问题。目前的统计方式仅仅统计申请/释放内存的次数,并没有统计每次申请/释放内存的大小。 这种方法对于C来说是够用了,因为在C中申请和释放的大小是相同的,而在C++中就不一定了。 考虑以下两种情况:(
如何检测内存泄露,如何进行内存优化? 【面试题】
如何检测内存泄露,如何进行内存优化?     答:RAM和ROM 是什么?   内存溢出更多的再java内存中。 Android系统为每一个应用程序都设置了一个硬性的DalvikHeap Size最大限制阈值,这个阈值在不同的设备上会因为RAM大小不同而各有差异 检测内存泄漏  Android Studio上可以通过Memory Monitor查看内存中Dalvik Heap的实时变化
如何检查内存泄露并进行定位
1. 定义:应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费2. 对于C和C++这种没有Garbage Collection 的语言来讲,我们主要关注两种类型的内存泄漏:   堆内存泄漏(Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删
Java中会存在内存泄漏吗?
一般来说内存泄漏有两种情况。一种情况如在C/C++ 语言中的,在堆中的分配的内存,在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(如指针重新赋值);另一种情况则是在内存对象已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。Java内存管理机制在C++ 语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵...
Linux 内存泄露检测技巧
由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就会在系统中导入内存错误。同时,内存错误往往非常严重,一般会带来诸如系统崩溃,内存耗尽这样严重的后果。无论何时何地发生内存泄漏,都可能表现为应用程序完全无法接受,同时内存泄漏不是显而易见[1]。存在内存错误的 C 和 C++ 程序会导致各种问题。如果它们泄漏内存,则运行速度会逐渐变慢,并最终停止运行;如果覆盖内存,则会变得非常脆
【C语言】如何判断出现内存泄漏
如何判断出现了内存泄漏? VS下的调试器CRT库提供了方法,其原理是在申请和释放的时候做下标记 通过标记来判断是否出现内存泄漏 #include using namespace std; void TestMemoryLeak() { int* p = (int*)malloc(sizeof(int)* 10); if (p == NULL) cout << "内存不足!" << e
(五十八)java中是否存在内存泄漏问题
一、释放对象的根本原则就是对象不会再被使用: 给对象赋予了空值null,之后再没有调用过。 另一个是给对象赋予了新值,这样重新分配了内存空间。 二、容易引起内存泄漏的几大原因①静态集合类 像HashMap、Vector等静态集合类的使用最容易引起内存泄漏,因为这些静态变量的生命周期与应用程序一致,如示例1,如果该Vector 是静态的,那么它将一直存在,而其中所有...
Java 判断远程服务器上文件是否存在
//首先,拼接你的文件路径 String Path = Constants.upload_url + expertDoctor.getDoctorId() +&quot;.png&quot;; //然后,判断文件是否存在 URL url = new URL(Path); HttpURLConnection urlcon = (HttpURLConnection) url.op...
内存泄漏的定义及解决方法(智能指针)
内存泄漏是指由于疏忽或错误,程序没有释放掉不再使用内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了堆该段内存的控制,因而造成了内存的浪费。 对于C++这种没有垃圾回收机制的语言来说,主要关注两种类型的内存泄漏: (1)、堆内存泄漏:比如使用new、malloc等从堆中分配的资源,没有用delete和free删掉。 (2)、系统资源泄漏:系统分配的...
Python内存泄漏问题查找
1 前言: 1.1 像Java程序一样,虽然Python本身也有垃圾加收的功能,但是同样也会产生内存泄漏的问题 1.2 在Python程序里,内存泄漏是由于一个长期持有的对象不断的往一个dict或者list对象里添加新的对象, 1.3 而又没有即时释放,就会导致这些对象占用的内存越来越多,从而造成内存泄漏。 1.4 另外,对象的交叉引用也会造成内存无法释放的问题。 2 那么如果在Pyth
使用智能指针解决可能导致的内存泄漏的问题
一个程序中可能会因为各种情况导致内存泄漏的问题,程序泄漏可能不会一下子被写程序的人发现,因为它可能是一点点的被泄漏,直到内存被耗尽之后才会知道内存泄漏这个问题,但是我们不应该写出这样的程序来坑我们自己。因此在写程序的时候应该尽量避免这类问题的产生 执行流跳转是什么??在一个程序顺序往下执行的时候,在遇到return , break, goto,continue等语句的时候,就会引发执行流跳转。假...
如何测试是否存在内存泄漏
如何测试内存泄漏 命令: jsp jmap -histo:live [进程号] &gt; [文件路径] 命令解释: jps:查看当前代码的进程号; jmap -histo:live [进程号] &gt; [文件路径]:讲得到的信息放到某一个文件下,运行后打开此文件,查看还有多少个实例。 具体实现: 在测试代码中加上一句 Thread.sleep(1000); 并在这个地方打上一个断点,...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习 存在的问题 如何学习写java代码