Java 标签

NIO知识点总结

  |   0 评论   |   183 浏览

NIO允许使用单个或者少量的线程去管理多个channel(网络请求/文件),代价是相对基于流的方式,解析数据变得更加复杂。

对于单个socket连接来说,不考虑zero-copy的因素,引入NIO实际会增加请求延时,降低吞吐量。所以如果是写一个客户端程序,完全可以用BIO来降低编程的复杂度。

但如果你需要管理的是成千上万的连接,每个连接只有少量的数据。最典型的就是类似于聊天室这种应用,NIO就具有非常明显的优势。

JVM-类加载机制 有更新!

  |   0 评论   |   228 浏览

今年网上充斥着各种令人焦虑的中年危机新闻,很自然的影响到了我。思来想去,还是需要提升自己的核心竞争力。稍微出去面了一下,看看自己竞争力还够不够,发现了问题比我想象中还要严重,随便问两个问题就能把我难倒。原因在于随着时间的流逝,好多以前倒背如流的知识点,现在不给点提示,我自己压根想不起来。这背后的原因,并不能简单用没有持续学习来搪塞的,因为问到的知识点也没有多深入,刚毕业那会儿就很清楚了。这当然是自己工作中疏于总结,疏于温故知新造成的。所以我决定从近期开始,对自己的知识体系重新开始梳理。就从这篇JVM的类加载开始吧~~

Hotspot JVM 1.8参数查阅手册 有更新!

  |   0 评论   |   494 浏览

这里整理下JVM相关的参数信息,本文档使用的是MAC OS平台的Hotspot JVM,版本为1.8.0_181。

Hotspot JVM有两种运行模式,分别是server和client。
它们的区别是server的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。client VM相对来讲会保守一些,初始堆空间会小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快,但运行速度会比server模式慢些。
可以使用-server和-client选项来指定JVM的类型。

理解Java内存模型 有更新!

  |   0 评论   |   980 浏览

从抽象的角度来看,JMM定义了线程与主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程已读/写共享变量的副本。

这里需要注意的是,本地内存是JMM的一个抽象概念,并不是真实存在,它涵盖了缓存、写缓冲区、寄存器以及其他的硬件与编译器优化。

那么,JMM怎么来控制线程之间共享变量的同步呢?首先我们需要了解下,同步共享变量在JMM中主要有什么挑战:重排序。

JEP 193:Variable Handles 有更新!

  |   0 评论   |   1,105 浏览

学习JDK源码过程中,发现了java.lang.invoke.VarHandle这个类,查了一下,这个类来源于JEPS193,因此查了一下规范。以下便是规范的具体内容以及对应的翻译,其中上半段翻译是我自己翻译的,后半段翻译时,发现网上已有,翻译比我靠谱多了,但他只有中文版,以下是我整理的中英文对照着看,方便理解。
Summary(摘要)

Define a standard means to invoke the equivalents of variousjava.util.concurrent.atomic and sun.misc.Unsafe operations upon object fields and array elements, a standard set of fence operations for fine-grained control of memory ordering, and a standard reachability-fence operation to ensure that a referenced object remains strongly reachable.

定义了一些标准方法来执行java.util.concurrent.atomic和sun.misc.Unsafe包下对对象属性和数组元素的操作,提供了对内存序列细粒度访问对象属性的操作,和一个标准可达性栅栏操作来确保被引用的对象是强可达的(strongly reachable)。

JVM学习总结-垃圾回收器 有更新!

  |   0 评论   |   927 浏览

JVM迄今为止(JDK10),常见的垃圾回收器有7种,分别是:Serial 、Serial Old、ParNew、Parallel Scaverage 、 Parallel Old、 CMS、Garbage First(G1).我们来总结一下这七种垃圾器。