java

Thread和UncaughtExceptionHandler

相信现在大家在写java程序时,必然会接触到多线程的概念。多线程很强大,但是也很容易出错。其中一个经常被忽略的错误就是线程无故异常退出,这种情况多数是因为某些未被捕获的异常直接抛出导致的,而且这时候如果处理不当,可能会导致系统资源的泄露,比如数据库连接未释放等。

阅读更多

大家知道,在计算中,数据的存储器常见的有内存,硬盘,为了提高CPU的访问速度,通常还会又L1,L2,L3缓存。根据CPU访问速度由快到慢排序的话,依次是L1缓存->L2缓存->L3缓存->内存->磁盘,且从L1缓存到磁盘,存储容量通常越来越大。所以,L1缓存通常最快也最小,而且每个CPU核心都有独立的L1缓存;L2缓存稍大稍慢,且每个CPU核心都有一个L2缓存;L3缓存则更大更慢,被单个CPU插槽上的所有核心共享。主内存则不必多说,被所有CPU核心共享,访问速度则更慢。

CPU在访问内存数据的时候,首先会检查L1缓存中是否存在,如果不存在,则会搜寻L2缓存,其次L3缓存,如果缓存中都没有,则需要到内存中去拿数据。经过的节点越多,耗时则越长,应用程序最好尽量保证缓存尽早命中,即保证数据缓存在L1缓存中。

阅读更多

disruptor是一个高并发的框架,该项目源于LMAX。LMAX是一个高频交易系统,他们早起的设计多是基于SEDA和Actors来提高吞吐量,通过无数的性能分析,他们发现队列往往成为多级系统中最耗时的一部分,并尝试了开发更高性能的队列。但最终发现,队列作为一种主要的数据结构,主要用于解决生产者,消费者问题,以及存储数据,并不能满足他们的需求。而disruptor就是他们设计开发的一种并发结构,具有很高的吞吐量和很低的时延。

复杂的并发问题

在并发情况下,通常会有两个或者更多的任务同时执行,并且多个任务会同时访问同一个资源。资源可以是一个文件,数据库,端口,甚至内存地址。

对于并发代码,我们关心两点,一个是互斥,一个是修改的可见性。互斥负责管理资源的更新,可见性则指如何保证改动对其他线程可见。在大多数的环境中,写操作是系统中最耗时的操作,允许多个线程并发写同一个资源需要复杂和繁重的协调。通常通过锁策略来进行协调,然而不可否认的一点,加锁通常意味着增加时延。

We are trying to measure a server’s SSL configurations. So, I wrote this article to list what conditions we should take in concern, and what are the related exceptions in Java.

阅读更多

JDK9中最重要的一个新功能就是模块系统,但是我们为啥需要模块系统呢?说穿了,模块系统为我们提供了一个全新的组织JAVA程序的方式,下面让我们看看在JDK9之前,我们在开发JAVA程序的过程中遇到了哪些问题。

阅读更多

JDK9是今年7月份发布的,是JDK(Java Development Kit)的第9个major release的版本。本文主要介绍下JDK9的几个主要新特性,至于所有的feature,可以参考文献1

阅读更多

try-with-resources是jdk7引入的新功能,它通过一个try语句,声明一个或着多个资源。这里的资源指的是实现了closeable或者AutoCloseable接口的类的实例。在try-with-resource中声明的资源,不管在整个过程中有没有抛出异常,都会把声明的资源释放掉。

阅读更多

最近处理了两个让人头疼的BUG。代码一直没有改过,之前一直也没出过问题,但是最近却老是报NPE的问题。我们的项目中,有个多线程的异步状态机框架,多线程之间存在着数据的共享,直觉让我嗅到了并发问题。

阅读更多

众所周知,Java语言是啰嗦的,写久了就会发现很多地方的代码看着就很冗余。lombok提供了一种简化Java代码的解决方案,通过注解的方式,来生成模板化的代码。最典型的就是生成类的构造函数,getter/setter,toString方法等。

阅读更多

如果你的程序运行在JDK8u111或者更高的版本之上,对于HTTPS请求,如果你的连接会走HTTP代理,且该代理使用的是BASIC认证的方式,那么你的连接将没法完成PROXY的鉴权认证。因为从JDK8u111开始,JVM默认禁用了对HTTPS tunnel的BASIC authentication。

In some environments, certain authentication schemes may be undesirable when proxying HTTPS. Accordingly, the Basic authentication scheme has been deactivated, by default, in the Oracle Java Runtime

阅读更多

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×