JVM系列之:通过一个例子分析JIT的汇编代码
我们知道JIT会在JVM运行过程中,对热点代码进行优化,传说自然是传说,今天我们通过一个简单的例子来具体分析一下JIT到底是怎么进行优化的。一个简单的例子说干就干,我们先准备一个非常简单的例子:publicclassAddTest{staticinta=1;sta
JVM详解之:HotSpot VM中的Intrinsic methods
什么是内置方法呢? 维基百科给出的定义是这样的: 在计算机软件中,按照编译器理论,固有方法(或内置方法)是可在给定编程语言中使用的方法,该编程语言的实现由编译器专门处理。通常,它可以将自动生成的指令序列替换为原始方法调用,类似于内联方法。与内联方法不同,编译器对内置方法有深入的了解,因此可以针对给定情况更好地集成和优化它。
JVM系列之:String.intern的性能
String对象有个特殊的StringTable字符串常量池,为了减少Heap中生成的字符串的数量,推荐尽量直接使用String Table中的字符串常量池中的元素。 那么String.intern的性能怎么样呢?我们一起来看一下。 之前我们提到了,String.intern方法会返回字符串常量池中的字符串对象的引用。
JVM系列之:对象的锁状态和同步
锁和同步是java多线程编程中非常常见的使用场景。为了锁定多线程共享的对象,Java需要提供一定的机制来实现共享对象的锁定,从而保证一次只有一个线程能够作用于共享对象。当第二个线程进入同一个区域的时候,必须等待第一个线程解锁该对象。 JVM是怎么做到的呢?为了实现这个功能,java对象又需要具备什么样的结构呢?快来一起看看吧。
一张PDF了解JDK11 GC调优秘籍-附PDF下载
JDK11相比JDK10,添加了一个新的Source-File Mode,可以直接通过java来运行单个java源文件,而不需要进行编译。同时还提供了新的HTTP API,支持响应性stream。 当然上面的都不是重点,重点的是JDK11是一个LTS版本,是继JDK8之后的又一个LTS版本,也可能是大家日后使用的最多的一个版本。 所以JDK11的JVM参数吸收了JDK9,JDK10的新
JVM系列之:String,数组和集合类的内存占用大小
之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。 先看下JOL的代码和输出:
JVM系列之:详解java object对象在heap中的结构
在之前的文章中,我们介绍了使用JOL这一神器来解析java类或者java实例在内存中占用的空间地址。 今天,我们会更进一步,剖析一下在之前文章中没有讲解到的更深层次的细节。一起来看看吧。 java.lang.Object大家应该都很熟悉了,Object是java中一切对象的鼻祖。 接下来我们来对这个java对象的鼻祖进行一个详细的解剖分析,从而理解JVM的深层次的秘密。
看动画学算法之:排序-归并排序
归并排序简称Merge sort是一种递归思想的排序算法。这个算法的思路就是将要排序的数组分成很多小的部分,直到这些小的部分都是已排序的数组为止(只有一个元素的数组)。 然后将这些排序过的数组两两合并起来,组成一个更大一点的数组。接着将这些大一点的合并过的数组再继续合并,直到排序完整个数组为止。
看动画学算法之:排序-选择排序
选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交互。 因为首先做的是一个选择的过程,所以叫做选择排序。 假如我们有一个数组:29,10,14,37,20,25,44,15,怎么对它进行选择排序呢? 先看一个动画:
计算机揭秘之:网络分类和性能分析
程序员天天都在写代码,关注的都是更高层次的封装,今天我们换个思路,让程序那些事来带你看一看隐藏在表象之下的网络和他们的性能分析。本文主要涉及5个模块,分别是网络七层协议,延迟与带宽,IP,TCP,UDP。OSI网络七层协议在讲网络之前,一定要提到OSI网络七层协议, OSI是Open System Interconnect的缩写,意为开放式系统互联。
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在编译中的性能优化,讲真的,在工作中我们真的需
区块链系列教程之:比特币的困境
比特币网络是中本聪作为一个实验性的网络提出来并运行的。没想到的是这一个实验性质的网络,居然成了现在虚拟货币世界的龙头老大。这个结局估计是中本聪本人都没有想到过的。既然是一个实验性的网络,那么比特币网络中又隐藏着哪些痛点呢?快来看看吧。