JVM高级特性与实践(十一):方法调用 与 字节码解释执行引擎(实例解析)

方法调用不等于方法执行,它唯一的任务就是确定被调用方法的版本,即具体调用哪一个方法,暂时不涉及方法内部的运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,在讲解Class文件编译过程时,已经表明此过程不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于“直接引用”)。此特性给Java带来了更强大的动态扩展能力 …… 阅读全文

JVM高级特性与实践(十二):高效并发时的内外存交互、三大特征(原子、可见、有序性) 与 volatile型变量特殊规则

Amdahl 定律:该定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。 摩尔定律:该定律用于描述处理器晶体管数量与运行效率间的发展关系。 并发处理的刚反应用时使得 Amdahl 定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类“压榨”计算机运算能力的最有力武器。多任务处理几乎是现代计算机操作系统的一项必备功能,由于计算机的运算速度与它的存储和通 …… 阅读全文

JVM高级特性与实践(十三):线程实现 与 Java线程调度

衡量一个性能的高低好坏,每秒事务处理数(Transactions Per Second)是最重要的指标之一,它代表着一秒内服务端平均能响应的请求总数,而TPS值与程序的并发能力又有密切联系。对于计算量相同的任务,程序线程并发协调得越有条不紊,效率自然越高;反之,线程之间频繁阻塞甚至死锁,将会大大降低程序并发能力。并发不一定要依赖多线程,但是在Java里面谈论并发,大多数都与线程脱不开关系。此 …… 阅读全文

JVM高级特性与实践(十四):线程安全 与 锁优化

在软件业发展初期,程序编写都是以算法为核心,程序员会把数据和过程分别作为独立部分考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维直接站在计算机的角度去抽象问题和解决问题,称为面向过程的编程思想。面向过程的编程思想极大地提升了现代软件开发的生产效率和软件可达的规模,但是现实世界与计算机世界之间存有差异,导致良好的设计原则不得不向现实做出让步。开发人员必须让程序在计算机中正确执行, …… 阅读全文

Java高级知识点:并行计算(外部排序) 及 死锁分析

一. 并行计算通常单机运算时将数据放入内存中进行计算,但随着数据量的增大,最好是使用并行计算的方法。1. 算法如何设计并行排序算法?在并行计算的工作中,将每一个参与的电脑当作一个节点,节点通常是比较廉价的,可通过增加节点来提高效率。分为以下三个步骤及待解决问题:将数据拆分到每个节点上(如何拆分,禁止拆分数据依赖)每个节点并行计算得出结果(每个节点要算出什么结果?)将结果汇 …… 阅读全文

谈谈有关设计模式的思想精髓:变继承关系为组合关系、如何创建对象(单例、状态、装饰者模式)

说起设计模式,最广为人知的就是“四人帮”编写的设计模式,其书的副标题为软件中可重用的元素,此书本来是一篇博士论文,它将很多通用的设计思想总结并命名成设计模式,希望开发人员之间通过专有的模式名称交流,可惜最为熟悉的是被滥用最多的Singleton单例模式,但是此书中有许多值得学习的思想。从当今角度看此书,其中一部分模式是教我们如何对现实的事物去建模,这是“设计”。而有一部分则是受到了“语言限制” …… 阅读全文