近来学习点滴

经过上次面试打击以后,重新振作,重拾JAVA编程思想一书,大概看了基础内容,对本来不太牢固的java基础重新稳固一下,诸如容器:set,map,list,队列,垃圾回收,异常处理,正则表达式等知识都重新翻看了一遍,至今仍在继续学习,准备下一次面试的到来,今天在工作上也完成两件比较棘手的事,心情不错。希望能在接下来的日子能不断学习,不辜负青春韶华,坚持初心,不负梦想。

先来总结一下:

垃圾回收有三种基本方法:1。引用记数,速度慢,并且有一个“对象间存在相互调用时,对象应该被回收,但是引用记数却不为零”,对象没有被正确回收,依然占用内存。原理:每个对象有一个引用计数器,引用连接到对象时,对象的引用记数加1,引用离开作用域,或被置为null,引用记数减去1,引用记数为0时,达到回收条件。

2.停止-复制:先说原理:对任何活的对象,一定能追溯到存活的堆栈或静态存储区之中的引用。从堆栈和静态存储区开始,遍历此对象所有的引用,直到找出那些没有存活在堆栈或静态存储区之中的引用。 先暂停程序运行,将所有存活的对象从当前的堆复制到新的堆,没有被复制的都是垃圾。对象复制到新的堆时,都是保持紧凑队列(顺便把引用重新修正)。再把旧的堆全部清除。

3。程序进入稳定状态时,产生少量的垃圾,这时候停止-复制的方法效果低下,有了新的方式:标记-扫除。在这种状态下,回收速度很快。同样是从堆栈和静态存储区开始,遍历此对象所有的引用,找出那在堆栈或静态存储区之中的活的对象。并给他们加上标记,全部标记工作完成时候,没有标记的对象会被释放,不产生复制的动作,剩下的堆空间不连续。重新整理剩下对象。

即时编译技术,代码执行的次数越多,速度就越快。


 容器知识:(复制本人的云笔记)如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
  要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
  尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
最后,建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值