JVM详解之:运行时常量池
JVM在运行的时候会对class文件进行加载,链接和初始化的过程。class文件中定义的常量池在JVM加载之后会发生什么神奇的变化呢?快来看一看吧。 之前我们在讲class文件的结构时,提到了每个class文件都有一个常量池,常量池中存了些什么东西呢? 字符串常量,类和接口名字,字段名,和其他一些在class中引用的常量。
JVM详解之:java class文件的密码本
一切的一切都是从javac开始的。从那一刻开始,java文件就从我们肉眼可分辨的文本文件,变成了冷冰冰的二进制文件。 变成了二进制文件是不是意味着我们无法再深入的去了解java class文件了呢?答案是否定的。 机器可以读,人为什么不能读?只要我们掌握java class文件的密码表,我们可以把二进制转成十六进制,将十六进制和我们的密码表进行对比,就可以轻松的解密了。
一张PDF了解JDK10 GC调优秘籍-附PDF下载
今天我们讲讲JDK10中的JVM GC调优参数,JDK10中JVM的参数总共有1957个,其中正式的参数有658个。 其实JDK10跟JDK9相比没有太大的变化,一个我们可以感受到的变化就是引入了本地变量var。 为了方便大家的参考,特意将JDK10中的GC参数总结成了一张PDF,这个PDF在之前的JDK9的基础上进行了增减和修正,欢迎大家下载。
看动画学算法之:排序-冒泡排序
排序可能是所有的算法中最最基础和最最常用的了。排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序。 排序算法有很多种,每个都有其自身的优点和局限性。今天我们来学习最最简单的冒泡排序算法。 冒泡排序的原理很简单,我们想象一下一个一个的气泡上浮的过程。
看动画学算法之:排序-插入排序
插入排序就是将要排序的元素插入到已经排序的数组中,从而形成一个新的排好序的数组。这个算法就叫做插入排序。 同样的,假如我们有一个数组:29,10,14,37,20,25,44,15,怎么对它进行插入排序呢?先看一个插入排序的动画,对它有个直观的了解:
看动画学算法之:排序-冒泡排序
点击上方的蓝字关注我吧程序那些事简介排序可能是所有的算法中最最基础和最最常用的了。排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序。排序算法有很多种,每个都有其自身的优点和局限性。今天我们来学习最最简单的冒泡排序算法。冒泡排序的原理冒泡排序的原理很简单,我们想象一下
Dirty cards和PLAB
分代垃圾回收器在进行minor GC的时候会发生什么操作呢?有没有什么提高效率的手段呢? 今天我们和小师妹一起来了解一下垃圾回收中的Dirty cards和PLAB。
JVM中的Safepoints
简介 java程序员都听说过GC,大家也都知道GC的目的是扫描堆空间,然后将那些标记为删除的对象从堆空间释放,以提升可用的堆空间。 今天我们会来探讨一下隐藏在GC背后的一个小秘密Safepoints。
cache line对代码性能的影响
读万卷书不如行万里路,讲了这么多assembly和JVM的原理与优化,今天我们来点不一样的实战。探索一下怎么使用assembly来理解我们之前不能理解的问题。一个奇怪的现象小师妹:F师兄,之前你讲了那么多JVM中JIT在编译中的性能优化,讲真的,在工作中我们真的需
区块链系列教程之:比特币的困境
比特币网络是中本聪作为一个实验性的网络提出来并运行的。没想到的是这一个实验性质的网络,居然成了现在虚拟货币世界的龙头老大。这个结局估计是中本聪本人都没有想到过的。既然是一个实验性的网络,那么比特币网络中又隐藏着哪些痛点呢?快来看看吧。
JDK9的新特性:JVM的xlog
在java程序中,我们通过日志来定位和发现项目中可能出现的问题。在现代java项目中,我们使用log4j或者slf4j,Logback等日志记录框架来处理日志问题。
JDK9的新特性:JPMS模块化
JDK9引入了一个新的特性叫做JPMS(Java Platform Module System),也可以叫做Project Jigsaw。模块化的本质就是将一个大型的项目拆分成为一个一个的模块,每个模块都是独立的单元,并且不同的模块之间可以互相引用和调用。
JDK9的新特性:String压缩和字符编码
String的底层存储是什么?相信大部分人都会说是数组。如果要是再问一句,那么是以什么数组来存储呢?相信不同的人有不同的答案。
JDK10的新特性:var和匿名类
匿名类相信大家都用过了,学过JDK8中的lambda表达式之后,可以发现有些匿名类是可以用lambda表达式来替代的,能够被替代的类叫做funcational interface。 具体的有关lambda表达式和匿名类的介绍,大家可以查阅我之前写的文章。这里就不多讲了。
JDK10的新特性:var泛型和多个接口实现
在JDK10的新特性:本地变量类型var中我们讲到了为什么使用var和怎么使用var。 今天我们来深入的考虑一下var和泛型,多个接口实现的问题。
JDK10的新特性:本地变量类型var
java以面向对象的特性显著于世并得到了蓬勃的发展。在语言的发展过程中,为了让java语言更加简洁和方便使用,JDK也在不断的进行改进。 今天本文将要介绍一下JDK10中引入的本地变量类型var。
JDK11的新特性:HTTP API和reactive streams
在JDK11的新特性:新的HTTP API中,我们介绍了通过新的HTTP API,我们可以发送同步或者异步的请求,并获得的返回的结果。 今天我们想探讨一下这些同步或者异步请求和响应和reactive streams的关系。
JDK11的新特性:新的HTTP API
JDK11之前,java的HTTP功能很弱,只提供了HttpURLConnection来进行HTTP连接,并且使用起来非常复杂。所以一般大家都是用第三方的HTTP client(Apache HttpComponents 或者 OkHttp)来进行HTTP请求。
JDK12的新特性:CompactNumberFormat
JDK12引入了新的格式化数字的类叫做CompactNumberFormat。主要方便我们对很长的数字进行简写。比如1000可以简写为1K或者1 thousand。 本文将会讲解CompactNumberFormat的基本构成和使用方法,最后在实际的例子中结束文章的讲解。
JDK12的新特性:teeing collectors
JDK12为java.util.stream.Collectors添加了一个新的teeing方法,怎么翻译呢?看到很多人都把它翻译成“发球台”,我不禁潸然泪下,哪里有那么复杂,tee就是T。它的作用就像是一个T型,数据从两头进入,然后从一头流出。teeing的作用也就在此。