我学过的java2

来源:互联网 发布:疯狂的兔子知乎 编辑:程序博客网 时间:2024/05/01 03:07

1. 引用和传值

1. 事实上我根本就没怎么注意过这个问题,java就是相互调用然后 init(ddddd) 就这样传值了。2. 好了翻到了 《ThinkinJAVA》2.1 用引用操纵对象1.每种语言都有自己的的操纵内存中元素的方式,有时候程序员必须将要处理的数据是什么类型你要直接操纵元素,还是用某种基于特殊语法的简介表示来操纵对象?  重要的事情 写三遍!!!2.一切都被视为对象,因此可以采用单一的固定语法,尽管一切都看作对象,但操纵的表示服实际上是对象的一个 “**引用(referece)**”可以想象用遥控器操作电视机。 只要握住这个遥控器就能保持与电视机的连接。 3.一切都被视为对象,因此可以采用单一的固定语法,尽管一切都看作对象,但操纵的表示服实际上是对象的一个 “**引用(referece)**”可以想象用遥控器操作电视机。 只要握住这个遥控器就能保持与电视机的连接。 4.一切都被视为对象,因此可以采用单一的固定语法,尽管一切都看作对象,但操纵的表示服实际上是对象的一个 “**引用(referece)**”可以想象用遥控器操作电视机。 只要握住这个遥控器就能保持与电视机的连接。 

2.注意底下的小字,java的引用,有人认为是一个指针,但是这种说法基于底层实现的某种假设,也就是说仅仅是假设,但是它是假的,只不过看起来像 C++new xxx()引用,作者本来想叫句柄的 handle后来为了照顾C++ 程序员所以叫做引用。 String s如果 给s传一个值,s会返回一个错误(空指针) 但是如果string s=”就创建了一个对象”

2.GC

上边的太繁琐了,看来java是劣化版的C++,或者说是比较智能的C++, 智能的地方主要是gc了。 我觉的如果要设计一个内存回收机制也是很费神经的,但是一个不能够手动的gc也非常痛苦,就像男人不喜欢开自动挡一样。如果能够手动GC那么效率就可以精确计算,自动的话,那么就看天意了。内存快满就gc。。(精满自溢)!!!

  1. 事实上,new创建的对象,只要你需要就会一直保留下去,这样,许多C++编程在java的中完全消失了,因为java中有一个垃圾回收器,他用来监视new创建的所有对象。辨别哪些不会被引用的对象。随后,释放这些对象的内存空间。一旦不需要,他们就会自行消失,这样就消除了类的内存泄露问题,野指针等问题!!!!
  2. 个人认为还是会出现内存泄露问题,nozuo nodie问题。主要问题就是Map的键值对 把 键值对其中的一个=null gc也不会回收他,所以他就是内存泄露了。 还有大量的静态,以前我把 实体类 定义成static
    了,然后就没然后了。 回收不了,也使用不了,就是内存泄露吧。

3.GC 机制

如果有人学习过C++的话,或许可以更可以理解机制,3个机制,
1.傻瓜的计数机制,好像java的虚拟机从来没有使用过这种机制。!!!!!当引用连接一个对象时,那么久+1,当引用为空(=null)的时候-1,然后不断的刷新,刷新,刷新。如果出现了循环引用,那么会出现对象应该为计数为0,而不被回收的情况。
2.稍微智能一点的回收机制(stop -and-copy)停止和复制机制, 就是当创建一个堆,然后当然后正在运行的的对象复制到新的堆里。剩下的扔到垃圾桶 !
3.原始智能,这个最好想象了,就是标记给所有存活的引用标记,然后遍历所有引用,然后把不存在的删除。 java曾经使用过,但是效率非常低。
4.弱智能,java虚拟中,内存已较大的块为单位,如果对象较大它会占用单独的块了。等于操作都是在java分配的内存块中进行,停止与复制和标记与清扫,而且代码块中用相应的代数来记录它是否存活,如果快在某处被引用,器代数会增加,垃圾回收讲对上次回收动作之后新分配的块进行整理。
如果所有对象都很稳定,垃圾回收期的效率降低的话,就会回回收到”标记-清扫方式”,如果对控件出现过多的碎片,就会切换到“停止与复制” 这就是自适应技术。

0 0
原创粉丝点击