设计模式简单总结

20140118133026285

 

阅读全文

JUC中Atomic class之lazySet的一点疑惑

最近再次翻netty和disrupt的源码, 发现一些地方使用AtomicXXX.lazySet()/unsafe.putOrderedXXX系列, 以前一直没有注意lazySet这个方法, 仔细研究一下发现很有意思。我们拿AtomicReferenceFieldUpdater的set()和lazySet()作比较, 其他AtomicXXX类和这个类似。

阅读全文

Adopt OpenJDK 翻译计划

大家好,并发编程网同GreenTeaJUG和Adopt openjdk官方达成合作,组织翻译Adopt OpenJDK的中文版,翻译完成后会从官网链接到中文版,有兴趣的同学可以通过评论领取任务进行翻译,请尽量在领取后2天内完成翻译,目前GreenTeaJUG已经组织了六名同学参与翻译。

阅读全文

《JVM故障诊断指南》之4 —— Java 8:从持久代到metaspace

原文链接 原文作者:Byron Kiourtzoglou 翻译:梅小西(904516706)

Java 8介绍了一些新语言以及运行时新特点。其中一个特点便是完全移除了持久代(PermGen),自从Oracle公司发布了JDK1.7后就已经宣布了这个决定。还有比如内部字符串,从JDK1.7开始就从持久代移除了,JDK8的发布彻底废除了它。在这个部分,我们会讨论持久代的继任者:Metaspace。

当执行一个Java程序并出现了“泄露”类元数据对象时我们会比较HotSpot 1.7和HotSpot 1.8的运行时行为的不同点。

一旦Java 8 正式发布,关于Metaspace的最终的参考规范,调优标记以及文档应该就能使用了。

阅读全文

《JVM故障诊断指南》之3 —— Java 线程: JVM持有内存的分析

原文链接 原文作者:Byron Kiourtzoglou 翻译:梅小西(904516706)

前面我们已经讨论过JVM里不同的堆空间,这节我们会给你提供教程,是关于如何从你的活动的应用Java线程中确定它持有多少堆空间,以及在哪里占用。这里有个来自Oracle Weblogic 10.0生产环境的真实案例,它能使你更好的理解分析过程。

我们也会演示这种情况,过多的垃圾收集或者堆空间内存占用问题并不总是由于真实的内存泄露引起,也可能是由于线程执行模型问题和太多的短生命对象引起。

阅读全文

《JVM故障诊断指南》之2 —— 调整合适的Java堆大小的技巧

原文链接 原文作者:Byron Kiourtzoglou 翻译:梅小西(904516706)

在生产系统上决定合适的Java堆大小不是一个容易的操作。许多性能问题的发生都是由于不恰当的Java堆容量的错误调整。这部分将从介绍一些技巧作为开头,它能帮助你在当前的或者新的生产系统上决定最佳的Java堆大小。其中一些技巧对预防OutOfMemoryError问题和内存泄露方面也同样有用。

请注意这些技巧是倾向于“帮助你”决定合适的Java堆大小。因为每一个IT环境都不相同,实际上你是处于最好的时机来精确决定你客户环境所需要的Java堆参数。

阅读全文

《JVM故障诊断指南》之1 —— JVM概览与介绍

原文链接 原文作者:Byron Kiourtzoglou 翻译:梅小西(904516706)

Oracle HotSpot JVM 内存

Java HotSpot 虚拟机堆空间

这个部分将向你介绍Oracle Java HotSpot虚拟机里不同的Java堆内存空间概览。理解这个对于任何一个涉及到线上经常出现的内存问题的解决非常重要。而具有合适的Java 虚拟机堆空间的知识是很关键的。

Java虚拟机是你Java程序的基础,它提供了动态内存管理服务,垃圾收集,线程,IO以及本地操作等等。

Java堆空间是运行时Java程序的内存“容器”,它为你的Java程序提供了它需要的(Java堆,本地堆)合适的内存空间,并由JVM自身管理。

JVM HotSpot内存被分为3个内存空间:
• The Java Heap(堆)
• The PermGen (持久代)
• 本地堆(C-堆)

阅读全文

JAVA面试题100问第一部分

原文地址 译者:Borg

译者注:由于原文太长,这只是大概三分一的部分,即翻译至第五页倒数第三个问题。

以下是面试时常问到的JAVA面试题,能让你对JAVA面试有基本的了解。根据我个人的经验,一个好的面试官在面试的时候是不会事先准备一列问题清单,一般来说都从关于JAVA最基本的概念开始,然后再根据你的回答继续深入讨论。

阅读全文

Java I/O : Java中的进制详解

作者:李强强

上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算。这一讲,泥瓦匠带你走进Java中的进制详解。

一、引子

在Java世界里,99%的工作都是处理这高层。那么二进制,字节码这些会在哪里用到呢?

自问自答:在跨平台的时候,就凸显神功了。比如说文件读写数据通信,还有Java编译后的字节码文件。下面会有个数据通信的例子哦。

Java对对象实现Serializablle接口,就可以将其转化为一系列字节,而在通信中,不必要关系数据如何在不同机器表示和字节的顺序。这里泥瓦匠对Serializablle接口,不做详细讲解,以后单独详解。

阅读全文

[译]深入 NGINX: 为性能和扩展所做之设计

原文链接:Inside NGINX: How We Designed for Performance & Scale 翻译:丁一

NGINX在web性能上的表现尤为出众,这完全得益于其设计方式,许多web和应用服务器都是基于线程或进程这种简单的架构,NGINX用了一种精妙的事件驱动架构,在现代的硬件上,它可以处理成千上万的并发连接。

Inside NGINX中的信息图对高级别的进程架构和NGINX如何在单个进程中处理多个连接进行了深入探讨。本文更进一步地阐述了NGINX的所有工作原理。

阅读全文

戏(细)说Executor框架线程池任务执行全过程(下)

原文链接:   首发表于infoq.com 2015年6月

上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单。并通过剖析ExecutorService的一种经典实现ThreadPoolExecutor来分析接收任务的主要逻辑,发现ThreadPoolExecutor的工作思路和我们带项目的老大的工作思路完全一致。在本文中我们将继续后面的步骤,着重描述下任务执行的过程和任务执行结果获取的过程。会很容易发现,这个过程我们更加熟悉,因为正是每天我们工作的过程。除了ThreadPoolExecutor的内部类Worker外,对执行内容和执行结果封装的FutureTask的表现是这部分着重需要了解的。

为了连贯期间,内容的编号延续上篇。

阅读全文

Java内存模型

原文地址  作者:Jakob Jenkov 译者:张坤

Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为Java内存模型。 阅读全文

JavaEE 要懂的小事:二、图解 Cookie(小甜饼)

作者:李强强

上一篇 图解Http协议 ,这次继续Http家族中的Cookie。泥瓦匠最近看到博客园中一篇好文《超大cookie拒绝服务攻击》,这就是因为浏览器Cookie太大,导致请求时,请求头域过大造成发送失败。下面咱们就了解一下Cookie。按着以前的思路图文并茂哈,没图说个XX。

阅读全文

JavaEE 要懂的小事:一、图解Http协议

作者:李强强

笔者记得上次和左潇龙【博客园】聊天时,龙哥问了一个Session的问题。我当时的理解就是云里雾里,通过一番研究之后,逐渐有了思路和自己的理解,让我们先从HTTP协议理解开始吧。

一、技术基石及概述

问:什么是HTTP?
答:HTTP是一个客户端和服务器端请求响应标准TCP。其实建立在TCP之上的。

当我们打开百度网页时,是这样的:https://www.baidu.com,多了个S,其实S表示TLS、SSL。在这里不做解释,因此HTTP的技术基石如图所示:

阅读全文

戏(细)说Executor框架线程池任务执行全过程(上)

原文链接   归档下发表于infoq.com 2015年6月的两篇文章。

内容综述

基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交任务并获取任务执行结果,封装了任务执行的全部过程。本文尝试通过对j.u.c.下该部分源码的解析以ThreadPoolExecutor为例来追踪任务提交、执行、获取执行结果的整个过程。为了避免陷入枯燥的源码解释,将该过程和过程中涉及的角色与我们工作中的场景和场景中涉及的角色进行映射,力图生动和深入浅出。

阅读全文

return top