关于事务和内存泄漏

   昨天面试了的时候,做了一个笔试题,只有5个题目这个样子。

    其中有一道是这样子的,为什么要有事物,当时我的回答大概是防止脏数据的产生。

    还有一道题是写一段导致内存泄漏的程序,好吧,我是空白的。我当时想内存泄漏不是C中指针导致的吗?java中没有概念

    今天在家待业中,就百度了一下。

    事务对数据库来说就是进行统一的提交或回滚。在sql developer中就有提交和回滚的按钮。就是对于一些操作要么成功,要么失败,没有中间领域,不能成功了一半。

    在jdbc中是通过Connection对象进行事物管理的,默认是自动提交事务,默认是制动提交的。可以手动关闭。通过commit方法进行提交,rollback方法进行回滚。

    如果不提交的话,数据不会真正的插入到数据库中。

    Hibernate中是通过Transaction进行事物管理,处理方法与jdbc中类似

    spring中也有自己的事务管理机制,使用transactionManager进行管理,可以通过spring注入来实现。

    事务实在的作用是在异常时保持数据一致,执行或取消执行(上面是参考百度知道的)

   

     一般来说内存泄漏有两种情况。一种情况如在C/C++,在堆中分配的内存,在没有将其释放掉的时候就将所有能访问这块的内存的方式都删掉(如指针重新赋值);令一种

情况则是在内存对象已经不需要的时候,还仍然保留这块内存和它的访问方式(引用)。

    在java中也存在内存泄漏。虽然有垃圾收集器自动管理内存的回收,程序员不需要通过调用函数来释放内存。C++中的内存泄漏表现为

无用对象,不可达。而在java中的内存对象表现为无用对象,可达。

    下面给出了一个简单的内存泄露的例子。在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。因此,如果对象加入到Vector后,还必须从Vector中删除,最简单的方法就是将Vector对象设置为null。

Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
	Object o=new Object();
	v.add(o);
	o=null;	
}
//此时,所有的Object对象都没有被释放,因为变量v引用这些对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值