线程安全与锁优化
概述
软件也发展的初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种思维方式是直接站在计算机的角度去抽象问题和解决问题,称为面向过程的编程思想。与此相对,面向对象的编程思想...
water
8年前 (2017-03-16) 2188℃ 0评论
0喜欢
Java内存模型与线程
并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力最有力的武器
概述
计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个重要原因是计算机的运算速度与它的存储和通讯子系统速度的差...
water
8年前 (2017-03-14) 2375℃ 0评论
0喜欢
晚期(运行期)优化
概述
Java程序最初是通过解释进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁,就会把这些代码认定为“热点代码”,为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器曾...
water
8年前 (2017-03-14) 2646℃ 0评论
0喜欢
早期(编译期)优化
概述
Java语言的“编译期”是一段“不确定的操作过程,它可能是指一个前段编译器把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器)把字节码转变成机器码的过程,还可能是指使用静态提前编译器(AOT编译器,Ahe...
water
8年前 (2017-03-13) 2466℃ 0评论
1喜欢
类加载及执行子系统的案例与实战
在Class文件格式与执行引擎这部分里,用户的程序能直接影响的内容并不太多,Class文件以何种格式存储,类型核实加载、如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户程序无法对其进行改变。能通过程序进行操作的,主要是字节码...
water
8年前 (2017-03-13) 2243℃ 0评论
0喜欢
虚拟机字节码执行引擎
代码编译的结果是从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。
概述
执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器...
water
8年前 (2017-03-09) 2250℃ 0评论
0喜欢
虚拟机类加载机制
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步。
概述
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机类加载机制
与那些在编...
water
8年前 (2017-03-02) 2270℃ 0评论
0喜欢
类文件结构
代码编译的结构从本地机器码转变为字节码,是存储格式发展的一小步,确实编程语言发展的一大步
计算机只认识0和1,我们写的程序需要被编译器翻译成0和1构成的二进制格式才能被计算机执行。由于虚拟机及建立在虚拟机之上的大量程序语言大量出现,越来越多的程序语言选择了与操作系统和...
water
8年前 (2017-02-25) 2674℃ 0评论
0喜欢
虚拟机性能监控与故障处理工具
概述
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore)文件、堆转储快照(heapdump/hprof文件)。
...
water
8年前 (2017-02-24) 2361℃ 0评论
0喜欢
垃圾收集器与内存分配策略
当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们需要对这些“自动化技术”内存动态分配与内存回收的技术实施必要的监控和调节
对象已死
垃圾收集器在对堆进行回收之前,第一件事就是确定这些对象有哪些存活哪些死去(不可能再被...
water
8年前 (2017-02-24) 2375℃ 0评论
0喜欢
Java自动内存管理机制
Java程序员把内存控制的权利交给Java虚拟机,一旦出现内存泄漏和溢出方面的问题,不了解虚拟机是怎样使用内存的,排查错误将会成为一项异常艰难的工作
Java虚拟机内存的各个区域都有不同的作用、服务对象及可能产生的问题
运行...
water
8年前 (2017-02-23) 2535℃ 0评论
0喜欢
什么是Mock?
Mock是虚拟对象,是为了模拟真实对象而创建的,这些虚拟对象的行为是可控的。为方便理解,可以把Mock视为『汽车碰撞实验』中的『假人』。
真实软件架构
测试软件架构
为什么需要Mock?
真实软件架构中的对象行为是不确定的(eg:时间、对象的状态)
...
water
8年前 (2017-02-20) 3158℃ 0评论
0喜欢
1. Junit介绍
1.1. 简介
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和...
water
8年前 (2017-02-18) 2711℃ 0评论
0喜欢
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:
我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。
Java NIO和IO的主要区别
下表总结了Java NIO和IO之...
water
8年前 (2017-02-14) 2340℃ 0评论
0喜欢
8. CodeChef
CodeChef由Directi创建的一个开发者社区,为开发者提供实践、竞赛和进步的平台。该社区拥有大量的编码竞赛问题,允许访问此前别人解答编码挑战赛的源码。该社区也设置了难易度,你可以根据自身条件选择挑战。
9. CodeEv...
water
8年前 (2017-02-10) 3630℃ 0评论
0喜欢
一般情况下,Java中分配的非空对象都是由Java虚拟机的垃圾收集器管理的,也称为堆内内存(on-heap memory)。虚拟机会定期对垃圾内存进行回收,在某些特定的时间点,它会进行一次彻底的回收(full gc)。彻底回收时,垃圾收集器会对所有分配的堆内内存进行完整的扫描,...
water
8年前 (2017-01-20) 2549℃ 0评论
0喜欢
男装(低档到中高档): 低:美特斯邦威、班尼路、佐丹奴 中:杰克琼斯、selected、GXG、太平鸟、马克华菲、卡宾、H&M、C&A、优衣库、ZARA、GAP、Esprit、dickies、狼爪 中高:CKJ、AJ、EA、LEE、LEVIS、G-star、NAU...
water
8年前 (2017-01-18) 3109℃ 0评论
1喜欢
作为程序员,选择好合适的开发社区对提高自己的编程能力会有很大的帮助,我也说不出为什么,但是一些优秀的实时开发社区确实能帮你积累不少开发经验。
下面我们来看一下程序员经常去的14个顶级开发者社区,如果你还不知道它们,那么赶紧去看看,也许会有意想不到的收获。
Stack Over...
water
8年前 (2017-01-11) 2827℃ 0评论
0喜欢
现代软件对近乎实时地处理数据的需求越来越强烈。对变化的信息的即时响应中蕴含着巨大的商业价值,而这个速度是传统的基于批处理的架构所无法比拟的。流处理是一种快速将数据转换为知识的手段,Kevin Webber在introduction to Reactive Streams一文中对此...
water
8年前 (2017-01-10) 3037℃ 0评论
1喜欢
背景
生产环境中可能出现各种问题,但是这些问题又不是程序error导致的,可能是逻辑性错误,这时候需要获取程序运行时的数据信息,如方法参数、返回值来定位问题,通过传统的增加日志记录的方式非常繁琐,而且需要重启server,代价很大。BTrace应运而生,可以动态地跟踪java运行...
water
8年前 (2016-12-06) 2930℃ 0评论
0喜欢