内存分配策略

JVM栈帧及方法调用详解

JMM、Java Memory Model

对象优先在Edenf分配

大对象直接进入老年代

长期存活的对象将进入老年代

动态对象年龄判定

空间分配担保

垃圾回收机制

对象存活

GC算法

运行时数据区

可达性分析与引用计数

引用计数法

给对象增加一个引用计数器,每当有一个地方引用它时,计数器就+1;当引用失效时,计数器就-1;任何时刻计数器为 0 的对象就是不能再被使用的,即对象已“死”。
在主流的 JVM 中没有选用引用计数法来管理内存,最主要的原因是引用计数法无法解决对象的循环引用问题。

可达性分析算法

通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称为“引用链”,当一个对象到 GC Roots 没有任 何的引用链相连
时(从 GC Roots 到这个对象不可达)时,证明此对象不可用。以下图为例:

Read More

集合知识点总结


通过迭代器fail-fast属性,你明白了什么?

每次我们尝试获取下一个元素的时候,Iterator fail- fast属性检查当前集合结构里的任何改动。如果发现任何改动,它抛出 ConcurrentModificationException。
Collection中所有Iterator的实现都是按fail-fast来设计的(ConcurrentHashMap和CopyOnWriteArrayList这类并发集合类除外)


fail-fast与fail-safe有什么区别?

Read More

Fragment

来源

Fragment的概念来源于Android3.0,主要目的是为大屏幕(如平板电脑)上更加动态和灵活的界面设计提供支持。他可添加到Activity中,
所以多个Activity可添加同一个Fragment,提高了代码复用性。

生命周期

Fragment跟Activity的生命周期类似,不过只有在显示调用addToBackStack()时,系统才会将片段放入由宿主 Activity 管理的返回栈。

生命周期方法

onCreate()

系统会在创建片段时调用此方法。当片段经历暂停或停止状态继而恢复后,

Read More

原型模式

定义

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

有时候当你想复制一个对象时,先会想到用new,但有时候你拿到的只是抽象类,亦或者这个对象内部有一些私有属性你是拿不到的。
还有时候,如果对象没有实现clone方法来实现克隆,则这个时候通过clone获取的是浅克隆,如果里面有其他对象,则返回的是引用。

原型模式是一种另类的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。

类图

Read More