摘要:其实每个模式名称就表明了该模式的作用,代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该 地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思。再如我们有的时候打官司,我们需要请律师,因为律师在法律方面有 专长,可以替我们进行操作,表达我们的想法。先来看看关系图: 代理模式的应用场景:... 阅读全文
posted @ 2017-07-09 13:21 jiumao 阅读 (27) 评论 (0) 编辑
摘要:垃圾收集器 引用计数器: 从gc日志可以看出是回收了,java虚假没有选用引用计数器算法管理内存 可达性分析算法 ?线程池中线程是维持一个数量还是,用已经有的线程? 回收方法区 垃圾收集器 垃圾收集器根据应用场景和内存回收范围来选择。根据新生代、老年代,高性能服务器、客户端,计算密集场景、高响应场景。选择不同的收集器。 单线程收集器 单线程收集器,是使用单线程... 阅读全文
posted @ 2017-07-08 20:34 jiumao 阅读 (44) 评论 (0) 编辑
摘要:在Eclipse 配置运行参数或者在命令行中加上参数 eclipse 安装 MAT插件,使用。 虚拟机栈内存溢出: 创建很多线程导致内存溢出,可以减少最大堆和减少栈容量。 方法区和运行时常量池溢出 在jdk1.6中intern()方法会把首次遇到的字符串实例复制到永久代。而由StringBuilder创建的字符串实例在jav... 阅读全文
posted @ 2017-07-08 20:32 jiumao 阅读 (83) 评论 (0) 编辑
摘要:标记-清除 标记-清除算法是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象 标记-整理 根据老年代的特点提出标记-整理算法。它在标记-清除算法的基础上做了一些优化。和标记-... 阅读全文
posted @ 2017-07-08 20:30 jiumao 阅读 (23) 评论 (0) 编辑
摘要:如果了解java虚拟机更系统的操作。请阅读 Charlie Hunt , Binu John著《java性能优化权威指南》,James Gosling,Java之父、Steve Wilson,Oracle公司工程副总裁写序。 Java虚拟机运行时数据区: PC寄存器(程序计数器):program counter线程私有的较小的内存空间,保存当前线程所执行的字节码指令地址。在虚拟机概念模型里... 阅读全文
posted @ 2017-07-08 20:29 jiumao 阅读 (25) 评论 (0) 编辑
摘要:内存自动管理20 内存模型20 Jvm垃圾收集算法22 标记-清除22 标记-整理22 复制算法22 分代思想23 Stop-The-World23 java堆溢出:24 方法区和运行时常量池溢出27 本机直接内存溢出29 垃圾收集器30 引用计数器:... 阅读全文
posted @ 2017-07-08 20:28 jiumao 阅读 (19) 评论 (0) 编辑
摘要:回收 对象回收 对象在不可达的情况下,如果对象覆盖finalize()方法,而且finalize()没有被调用过。这些对象会放置在F-Queue队列中,由Finalizer线程执行。由于是单线程,线程异常的情况导致线程不能执行下去也是可能的。 finalize()方法类似析构函数,在对象结束的时候会被调用。但这并不是推荐的使用方法。客观上,没有什么操作非得在这个时候执行。子类覆盖finaliz... 阅读全文
posted @ 2017-07-08 20:26 jiumao 阅读 (38) 评论 (0) 编辑
摘要:对象的三种状态: 可达的 从根节点可以触及到这个对象 可复活的 一旦所有引用被释放,就是可复活状态 因为在finalize()中可能复活该对象 不可达的 在finalize()后,可能会进入不可触及状态 不可达的对象不可能复活 可以回收 引用标记 Java虚拟机提供自动内存管理机制。在GC中,没用的对象,内存是要回收的。如何高效判断对象存活是个重要的问题。 引用计数法 此算法计算... 阅读全文
posted @ 2017-07-08 20:25 jiumao 阅读 (148) 评论 (0) 编辑
摘要:对象内存布局 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 对象头 HotSpot虚拟机的对象头包括两部分信息:运行时数据和类型指针。 运行时数据 用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。... 阅读全文
posted @ 2017-07-08 20:23 jiumao 阅读 (34) 评论 (0) 编辑
摘要:一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。 主要流程如下: 1. 类加载检查 JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行... 阅读全文
posted @ 2017-07-08 20:21 jiumao 阅读 (22) 评论 (0) 编辑