JAVA ’ 目录归档

Netty框架中的@Skip使用说明

最近在学习Netty框架,对着教程上写了个简单的netty应用,可是死活调试不成功,对着程序跟教程上看了几遍也找不到原因,后来又重新写了一遍,服务端程序终于调试成功,原因出在了那个@Skip注释上了,代码如下:
阅读全文

Java并发编程之CAS

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

CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术。简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。这听起来可能有一点复杂但是实际上你理解之后发现很简单,接下来,让我们跟深入的了解一下这项技术。

阅读全文

并发环境下HashMap引起的full gc排查

作者:佐井    原文地址

现象

最近上线一个需求,完成需求的过程对代码进行了一次重构。应用发布后半个小时左右,发现一个机器报警,load过高。登陆机器看CPU使用情况,发现load已经正常,看下CPU使用情况,发现有一个核跑满,其他CPU使用率很低。大概一个小时后,其他机器陆续报警,发现同样的问题,紧急回滚应用。

应用运行在16G内存的虚机上,整个JVM11G内存,其中新生代3G,CMS gc,JDK7。

第一反应是JVM可能在进行full gc,因为只有一个线程跑满,其他线程被JVM暂停了。先去应用日志看下应用运行情况,果然日志已经没有任何输出。jstat -gcutil查看JVM内存使用情况,发现Old区使用已经100%。

阅读全文

源码剖析AQS在几个同步工具类中的使用

感谢网友【张超盟】的投稿

1. 前言

AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础。J.U.C中宣传的封装良好的同步工具类SemaphoreCountDownLatchReentrantLockReentrantReadWriteLockFutureTask等虽然各自都有不同特征,但是简单看一下源码,每个类内部都包含一个如下的内部类定义:

[code lang=”java”] abstract static class Sync extends AbstractQueuedSynchronizer [/code]

阅读全文

Java中不同的并发实现的性能比较

原文链接   作者:Alex Zhitnitsky   译者:有孚ForkJoinWars

Fork/Join框架在不同配置下的表现如何?

正如即将上映的星球大战那样,Java 8的并行流也是毁誉参半。并行流(Parallel Stream)的语法糖就像预告片里的新型光剑一样令人兴奋不已。现在Java中实现并发编程存在多种方式,我们希望了解这么做所带来的性能提升及风险是什么。从经过260多次测试之后拿到的数据来看,还是增加了不少新的见解的,这里我们想和大家分享一下。

阅读全文

Groovy模板引擎下(The MarkupTemplateEngine引擎细节介绍)

模板格式

1.1基础:

模板包含Groovy代码,下面详细具体的解析一下第一个样例:

xmlDeclaration()                                (1)
cars {                                          (2)
   cars.each {                                  (3)
       car(make: it.make, model: it.model)      (4)
   }                                            (5)
}

1 渲染XML的声明字符串
2 打开一个cars标签
3 cars是模板数据模型的一个变量包含了所有的car实例
4 遍历每一项,从car实例创建car标签
5 关闭上述的cars标签

阅读全文

深入理解G1垃圾收集器

G1 GC是Jdk7的新特性之一、Jdk7+版本都可以自主配置G1作为JVM GC选项;作为JVM GC算法的一次重大升级、DK7u后G1已相对稳定、且未来计划替代CMS、所以有必要深入了解下:

不同于其他的分代回收算法、G1将堆空间划分成了互相独立的区块。每块区域既有可能属于O区、也有可能是Y区,且每类区域空间可以是不连续的(对比CMS的O区和Y区都必须是连续的)。这种将O区划分成多块的理念源于:当并发后台线程寻找可回收的对象时、有些区块包含可回收的对象要比其他区块多很多。虽然在清理这些区块时G1仍然需要暂停应用线程、但可以用相对较少的时间优先回收包含垃圾最多区块。这也是为什么G1命名为Garbage First的原因:第一时间处理垃圾最多的区块。

阅读全文

JAVA语言规范-线程和锁章节之同步、等待和通知

原文链接  本文是Oracle官方《Java语言规范》的译文

JAVA语言规范:线程和锁

1 同步

JAVA编程语言提供了线程间通信的多种机制。这些方法中最基本的是同步化,此方法是使用监视器实现的。JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视器。一次仅有一个线程可能在监视器上持有锁。尝试锁住该监视器的任何其他线程被阻塞,直到它们可以再该监视器上获得一个锁。线程t可以多次锁住特别的监视器;每个解锁将一个加锁操作的作用反转来了。

synchronized语句计算了一个对象的引用;然后它尝试在该对象的监视器上执行加锁操作,并不进一步继续,直到锁操作已经成功完成。在加锁操作被执行完后,会执行synchronized语句体。如果语句体的执行没有完成(正常或突然)。那么将在相同的监视器上自动执行相同的解锁操作。 阅读全文

在java 7中捕获多个异常

原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)

java 7使得我们能够在同一个catch语句块中捕获多种不同的异常,这也叫做多重异常捕获。

阅读全文

Java 8新的时间日期库的20个使用示例

原文链接 作者:Javin Paul 译者:之诸暇

除了lambda表达式stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。 阅读全文

Java 7中的Try-with-resources

原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)
Try-with-resources是java7中一个新的异常处理机制,它能够很容易地关闭在try-catch语句块中使用的资源。
阅读全文

基本的try-cathc-finally异常处理

原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)

这一小节概述了try-catch-finally 语句是怎样处理错误的,文中的例子是Java的,但是同样的规则也适用于C#。java和C#中异常的唯一区别就是C#中没有已检查异常。已检查异常和未检查异常将在后面小节更加详细地介绍。

阅读全文

JAVA面试700问(六)

原文地址 译者:olive(yhfolive@gmail.com)

1.wait(),notify()和notifyAll()的作用是什么?

  • wait():使当前线程停止,直到另一个线程调用notify()方法或notifyAll()方法.。
  • notify():唤醒这个对象的监视器上等待的一个线程。
  • notifyAll():将引发wait()状态的所有的线程变为就绪状态,所有的线程继续执行。这些线程将基于优先级以及基于JVM选择来执行。
  • 注意:这三个方法在被调用之前必须获得对象的锁。 阅读全文

JAVA异常处理

原文链接 作者:Jakob Jenkov  译者:fangqiang08(fangqiang08@gmail.com)

JAVA异常处理能够让你的程序更加方便、巧妙地处理错误。异常处理对于写出具有鲁棒性的JAVA程序、组件是非常重要的,但是这也经常被我们所忽视。当java程序中的一个错误发生时,经常导致一个异常被抛出。你怎么抛出、捕获、处理异常是重要的。有多种不同的方式来处理异常。但不是所有的方法都是同样有效以及能够确保安全的。

阅读全文

《七周七并发模型》第五章Actor总结

购买本书 作者:Paul Butcher   译者:黄炎  出品方:图灵  出版社:人民邮电出版社 (感谢图灵授权并发编程网发布此文)

5.5 复习

Smalltalk的设计者、面向对象编程之父Alan Kay曾经这样描述面向对象的本质①:很久以前,我在描述“面向对象编程”时使用了“对象”这个概念。很抱歉这个概念让许多人误入歧途,他们将学习的重心放在了“对象”这个次要的方面。
真正主要的方面是“消息”……日文中有一个词ma,表示“间隔”,与其最为相近的英文或许是“ interstitial”。创建一个规模宏大且可生长的系统的关键在于其模块之间应该如何交流,而不在于其内部的属性和行为应该如何表现。这段话也概括了使用actor模型进行编程的精髓——我们可以认为actor模型是面向对象模型在并发编程领域的扩展。 actor模型精心设计了消息传输和封装的机制,强调了面向对象的精髓,可以说actor模型非常“面向对象”。

阅读全文

return top