- 浏览: 98068 次
- 性别:
- 来自: 深圳
最新评论
文章列表
基于 REST 的 Web 服务:基础
Alex Rodriguez
, 软件工程师, WSO2 Inc
简介:
代表性状态传输(Representational State Transfer,REST)在
Web 领域已经得到了广泛的接受,是基于 SOAP 和 Web 服务描述语言(Web Services Description
Language,WSDL)的 Web 服务的更为简单的替代方法。 接口设计方面这一转变的关键证据是主流 Web 2.0 服务提供者(包括
Yahoo、Google 和 Facebook)对 REST 的采用,这些提 ...
Java 理论与实践: 流行的原子
新原子类是 java.util.concurrent 的隐藏精华
Brian Goetz
(brian@quiotix.com
), 首席顾问, Quiotix
简介:
在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java
语言编写无等待、无锁定的算法。在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化。请跟随并行专家 Brian
Goetz 一起,了解这些新类如何使用 Java 语言开发高度可伸缩的无阻塞算法。您可以在本文的
论坛
中与作者或其 ...
5.2
调优
找出性能瓶颈后,接下来就是调优,调优通常可从硬件,操作系统、
JVM
以及程序四方面着手,硬件和操作系统不是本书的重点。下面主要介绍
JVM
及程序方面的一些调优。
5.2.1 JVM
调优
JVM
调优主要是 ...
5.1
寻找性能瓶颈
通常性能瓶颈的表象是资源消耗过多、外部处理系统性能不足,或者资源消耗不多,但程序的响应速度却仍达不到要求。
资源主要消耗在
CPU
、文件
IO
、网络
IO
、以及内存方面。
外部处理的性能不够主要是调用其他系统的功能或数据库操作的响应速度不够。
资源消耗不多,但程序的响应速度仍达不到要求的主要原因是程序代码运行效率不高,未充分使用资源或程序结构不合理。
对于
JAVA
应用而言,寻找性能瓶颈的方法通常为首先分析资源的消耗,然后结合
JAVA
的一些工具来查找程序中资源消 ...
4.1
集合包
ArrayList,
LinkedList,Vector,TreeSet,HashMap,TreeMap
等,无需多说
4.2
并发包
(java.util.concurrent)
4.2.1 ConcurrentHashMap
线程安全的
HashMap
实现,主要原理是将集合分成多个段
(
默认
16
个
)
,分段加锁,实现高并发。
据作者的测试结果,在线程数较少时,无论元素数量多少,
ConcurrentHashMap
带来的性能提升不明显,但在线程数为
50
以上时,
...
Avro
和Thrift都是跨语言,基于二进制的高性能的通讯中间件. 它们都提供了数据序列化的功能和RPC服务. 总体功能上类似,但是哲学不一样.
Thrift出自Facebook用于后台各个服务间的通讯,Thrift的设计强调统一的编程接口的多语言通讯框架.
Avro出自Hadoop之父Doug Cutting,
在Thrift已经相当流行的情况下Avro的推出,其目标不仅是提供一套类似Thrift的通讯中间件更是要建立一个新的,标准性的云计算的数据交换和
存储的Protocol。
这个和Thrift的理念不同,Thrift认为没有一个完美的方案可以解决所有问题,因此尽量保 ...
接下来网上没有,貌似非公开章节,继续摘要。
3.3.2 线程交互机制
1. 常规方法:wait/notify/notifyAll
当线程调用了对象的wait方法后,JVM线程执行引擎会将此线程放入一个wait sets中,并释放此对象的锁,在wait sets中的线程将不 ...
3.3 JVM线程资源同步及交互机制
Java程序采用多线程的方式来支撑大量的并发请求处理,程序在多线程方式执行的情况下,复杂程度远高于单线程串行执行的程序。尤其是在多核或多
CPU系统中,多线程执行的程序所带来的最明显的问题是线程之间共同管理的资源的竞争及线程之间的交互。JVM的线程实现及调度方式(抢占式、协作式)取
决于操作系统,超出了本书范围,本节中仅介绍JVM线程资源同步机制和线程之间的交互机制。
3.3.1 线程资源同步机制
首先来看典型获取下一ID的程序:
int i = 0 ;
public int getNextId(){
...
3.2.4 JVM内存状况查看方法和分析工具(1)
Java本身提供了多种丰富的方法和工具来帮助开发人员查看和分析GC及JVM内存的状况,同时开源界和商业界也有一些工具可用于查看、分析GC及
JVM内存的状况。通过这些分析,可以排 ...
Brian Goetz
(brian@quiotix.com
), 首席顾问, Quiotix
简介:
Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent
包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 —— 例如比较和交换
。非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞吐率,对生存问题(例如死锁和优先级反转)也能提供更好的防御。在这期的 Java 理论与实践
中,并发性大师 Brian Goetz 演示了几 ...
3.2.3 内存回收(2)
Full GC
除CMS GC外,当旧生代和持久化触发GC时,其实是对新生代、旧生代及持久代都进行GC,因此通常又称为Full GC。当Full
GC被触发时,首先按照新生代所配置的GC方式对新生代进行GC(在新生代采用PS
GC ...
3.2.3 内存回收(1)
收集器
JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存,通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪 ...
3.2 JVM内存管理
Java不需要开发人员来显式分配内存和回收内存,而是由JVM来自动管理内存的分配及回收(又称为垃圾回收、Garbage
Collection或GC),这对开发人员来说确实大大降低了编写程序的难度,但副作用可能是在不知不觉中浪费了很多内存,导致JVM花费很多时间进行
内存的回收。另外还可能会带来的副作用是由于不清楚JVM内存的分配和回收机制,造成内存泄露,最终导致JVM内存不够用。因此对于Java开发人员而
言,不能因为JVM自动内存管理就不掌握内存分配和回收的知识了。
除了内存的分配及回收外,还须掌握跟踪分析JVM内存的使用状况,以便更加准确地判断程序的 ...
3.1.3 类执行机制
在完成将class文件信息加载到JVM并产生Class对象后,就可执行Class对象的静态方法或实例化对象进行调用了。在源码编译阶段将源码
编译为JVM字节码,JVM字节码是一种中间代码的方式,要由JVM在运行期对其进行解释并执行,这种方式称为字节码解释执行方式。
字节码解释执行
由于采用的为中间码的方式,JVM有一套自己的指令,对于面向对象的语言而言,最重要的是执行方法的指令,JVM采用了invokestatic、
invokevirtual、invokeinterface和invokespecial四个指令来执行不同的方法调用。invokestat ...
Java程序运行在JVM之上,JVM的运行状况对于Java程序而言会产生很大的影响,因此,掌握JVM中的关键机制对于编写稳定、高性能的Java程序至关重要。
JVM规范 定义的标准结构如图3.1所示。
(点击查看大图)图3.1 JVM标准 ...