自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序那些事

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在程序那些事!...

原创 JVM系列之:通过一个例子分析JIT的汇编代码

文章目录简介一个简单的例子使用jitWatch进行分析分析字节码分析汇编代码总结 简介 我们知道JIT会在JVM运行过程中,对热点代码进行优化,传说自然是传说,今天我们通过一个简单的例子来具体分析一下JIT到底是怎么进行优化的。 一个简单的例子 说干就干,我们先准备一个非常简单的例子: publi...

2020-07-31 10:09:34 763 4

原创 看动画学算法之:双向队列dequeue

文章目录简介双向队列的实现双向队列的数组实现双向队列的动态数组实现双向队列的链表实现双向链表的时间复杂度 简介 dequeue指的是双向队列,可以分别从队列的头部插入和获取数据,也可以从队列的尾部插入和获取数据。 本文将会介绍一下怎么创建dequeue和dequeue的一些基本操作。 双向队列的实...

2020-07-30 15:04:15 4618 3

原创 JVM详解之:HotSpot VM中的Intrinsic methods

文章目录简介什么是Intrinsic Methods内置方法的特点多样性兼容性java语义的扩展Hotspot VM中的内置方法intrinsic方法和内联方法intrinsic方法的实现Graal总结 简介 内置方法是什么呢?它和inline method有什么关系呢?内置方法是怎么实现的呢?所...

2020-07-30 08:14:06 4637 2

原创 看动画学算法之:队列queue

文章目录简介队列的实现队列的数组实现队列的动态数组实现队列的链表实现队列的时间复杂度 简介 队列Queue是一个非常常见的数据结构,所谓队列就是先进先出的序列结构。 想象一下我们日常的排队买票,只能向队尾插入数据,然后从队头取数据。在大型项目中常用的消息中间件就是一个队列的非常好的实现。 队列的实...

2020-07-29 14:11:30 5143 3

原创 JVM详解之:汇编角度理解本地变量的生命周期

文章目录简介本地变量的生命周期举例说明优化的原因总结 简介 java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束,这个创建的对象才会被回收呢? 带着这个问题我们来看一下今天的这篇文章。 本地变量的生命周期 在类中,变量类型有类变量,成员变量和本地变量。 本地变量指的是定义在...

2020-07-29 09:09:20 5634 2

原创 看动画学算法之:栈stack

文章目录简介栈的构成栈的实现使用数组来实现栈使用动态数组来实现栈使用链表来实现 简介 栈应该是一种非常简单并且非常有用的数据结构了。栈的特点就是先进后出FILO或者后进先出LIFO。 实际上很多虚拟机的结构都是栈。因为栈在实现函数调用中非常的有效。 今天我们一起来看学习一下栈的结构和用法。 栈的构...

2020-07-28 14:05:04 5259 10

原创 JVM系列之:String.intern的性能

文章目录简介String.intern和G1字符串去重的区别String.intern的性能举个例子 简介 String对象有个特殊的StringTable字符串常量池,为了减少Heap中生成的字符串的数量,推荐尽量直接使用String Table中的字符串常量池中的元素。 那么String.in...

2020-07-28 08:39:24 4712 2

原创 看动画学算法之:doublyLinkedList

文章目录简介doublyLinkedList的构建doublyLinkedList的操作头部插入尾部插入插入给定的位置删除指定位置的节点 简介 今天我们来学习一下复杂一点的LinkedList:doublyLinkedList。 和LinkedList相比,doublyLinkedList中的节点...

2020-07-27 13:49:38 4673 1

原创 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
原力计划

5万字长文详解介绍Stream和Lambda表达式最佳实践,干货实在太多,最后附上PDF下载,方便大家查阅!

2020-07-27 07:40:16 5315 6

原创 看动画学算法之:linkedList

文章目录简介linkedList的构建linkedList的操作头部插入尾部插入中间插入删除节点 简介 linkedList应该是一种非常非常简单的数据结构了。节点一个一个的连接起来,就成了linkedList。今天我们使用动画的方法一起来看看linkedList是怎么插入和删除的。 linked...

2020-07-26 11:47:16 5213 2

原创 JVM系列之:String.intern和stringTable

文章目录简介intern简介intern和字符串字面量常量分析intern返回的String对象分析实际的问题G1中的去重功能总结 简介 StringTable是什么?它和String.intern有什么关系呢?在字符串对象的创建过程中,StringTable有起到了什么作用呢? 一切的答案都在本...

2020-07-26 11:25:57 4940 2

原创 看动画学算法之:排序-基数排序

之前的文章我们讲了count排序,但是count排序有个限制,因为count数组是有限的,如果数组中的元素范围过大,使用count排序是不现实的,其时间复杂度会膨胀。 而解决大范围的元素排序的办法就是基数排序。

2020-07-25 13:07:35 4717 2

原创 一文了解JDK12 13 14 GC调优秘籍-附PDF下载

想了解JDK12,13,14中的GC调优秘籍吗?想知道这三个版本中JVM有什么新的变化吗? 一起来看看这期的GC调优秘籍,因为JDK12,13,14中的GC变化不太大,所以这里一起做个总结,文末附有相应的PDF下载,希望大家能够喜欢。

2020-07-25 12:07:46 5290 2

原创 看动画学算法之:排序-count排序

今天我们介绍一种不需要作比较就能排序的算法:count排序。 count排序是一种空间换时间的算法,我们借助一个外部的count数组来统计各个元素出现的次数,从而最终完成排序。

2020-07-24 09:30:49 5276 2

原创 JVM系列之:对象的锁状态和同步

文章目录简介java对象头java中锁状态的变化偏向锁biased locking轻量级锁thin lock重量级锁三种锁状态的不同 简介 锁和同步是java多线程编程中非常常见的使用场景。为了锁定多线程共享的对象,Java需要提供一定的机制来实现共享对象的锁定,从而保证一次只有一个线程能够作用于...

2020-07-24 09:14:07 5166 3

原创 JVM系列之:Contend注解和false-sharing

文章目录简介false-sharing的由来怎么解决?使用JOL分析Contended在JDK9中的问题padded和unpadded性能对比Contended在JDK中的使用总结 简介 现代CPU为了提升性能都会有自己的缓存结构,而多核CPU为了同时正常工作,引入了MESI,作为CPU缓存之间同...

2020-07-23 09:11:24 5034 2

原创 看动画学算法之:排序-快速排序

快速排序也采用的是分而制之的思想。那么快速排序和归并排序的区别在什么地方呢? 归并排序是将所有的元素拆分成一个个排好序的数组,然后将这些数组再进行合并。 而快速排序虽然也是拆分,但是拆分之后的操作是从数组中选出一个中间节点,然后将数组分成两部分。 左边的部分小于中间节点,右边的部分大于中间节...

2020-07-22 18:31:38 6607 4

原创 一张PDF了解JDK11 GC调优秘籍-附PDF下载
原力计划

JDK11相比JDK10,添加了一个新的Source-File Mode,可以直接通过java来运行单个java源文件,而不需要进行编译。同时还提供了新的HTTP API,支持响应性stream。 当然上面的都不是重点,重点的是JDK11是一个LTS版本,是继JDK8之后的又一个LTS版本,也可...

2020-07-22 09:20:34 5425 2

原创 JVM系列之:String,数组和集合类的内存占用大小

文章目录简介数组StringArrayListHashMapHashSetLinkedListtreeMap总结 简介 之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章...

2020-07-21 09:24:49 6120 3

原创 JVM系列之:详解java object对象在heap中的结构

文章目录简介对象和其隐藏的秘密Object对象头数组对象头整个对象的结构 简介 在之前的文章中,我们介绍了使用JOL这一神器来解析java类或者java实例在内存中占用的空间地址。 今天,我们会更进一步,剖析一下在之前文章中没有讲解到的更深层次的细节。一起来看看吧。 对象和其隐藏的秘密 java....

2020-07-20 08:16:21 6812 3

原创 看动画学算法之:排序-归并排序

文章目录简介归并排序的例子归并排序算法思想归并排序的java实现归并排序的时间复杂度 简介 归并排序简称Merge sort是一种递归思想的排序算法。这个算法的思路就是将要排序的数组分成很多小的部分,直到这些小的部分都是已排序的数组为止(只有一个元素的数组)。 然后将这些排序过的数组两两合并起来,...

2020-07-19 10:20:58 5535 3

原创 看动画学算法之:排序-选择排序

文章目录简介选择排序的例子选择排序的java代码实现选择排序的第二种java实现选择排序的时间复杂度 简介 选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交互。 因为首先做的是一个选择的过程,所以叫做选择排序。 选择排序的例子 假如我们有一个数组:29,10,14...

2020-07-18 20:04:25 5532 1

原创 计算机揭秘之:网络分类和性能分析

程序员天天都在写代码,关注的都是更高层次的封装,今天我们换个思路,让程序那些事来带你看一看隐藏在表象之下的网络和他们的性能分析。 本文主要涉及5个模块,分别是网络七层协议,延迟与带宽,IP,TCP,UDP。

2020-07-17 09:47:11 6360 2

原创 JVM详解之:运行时常量池
原力计划

JVM在运行的时候会对class文件进行加载,链接和初始化的过程。class文件中定义的常量池在JVM加载之后会发生什么神奇的变化呢?快来看一看吧。

2020-07-16 09:04:10 5550 4

原创 JVM详解之:java class文件的密码本
原力计划

一切的一切都是从javac开始的。从那一刻开始,java文件就从我们肉眼可分辨的文本文件,变成了冷冰冰的二进制文件。 变成了二进制文件是不是意味着我们无法再深入的去了解java class文件了呢?答案是否定的。 机器可以读,人为什么不能读?只要我们掌握java class文件的密码表,我们可...

2020-07-15 09:21:52 4914 4

原创 一张PDF了解JDK10 GC调优秘籍-附PDF下载
原力计划

JDK10 GC调优秘籍,一张PDF就能搞定的事情,还不快来看看!

2020-07-14 09:13:32 5091 4

原创 看动画学算法之:排序-插入排序

文章目录简介插入排序的例子插入排序的java程序插入排序的时间复杂度 简介 插入排序就是将要排序的元素插入到已经排序的数组中,从而形成一个新的排好序的数组。 这个算法就叫做插入排序。 插入排序的例子 同样的,假如我们有一个数组:29,10,14,37,20,25,44,15,怎么对它进行插入排序呢...

2020-07-13 09:12:54 5275 2

原创 看动画学算法之:排序-冒泡排序
原力计划

排序可能是所有的算法中最最基础和最最常用的了。排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序。 排序算法有很多种,每个都有其自身的优点和局限性。 今天我们来学习最最简单的冒泡排序算法。

2020-07-12 08:29:36 5655 3

原创 如果你想写自己的Benchmark框架
原力计划

使用过JMH的同学一定会惊叹它的神奇。JMH作为一个优秀的Benchmark框架带给了我们无数的欢乐。作为一个有极客精神的程序员,那么有没有想过去自己实现一个Benchmark框架呢? 在实现Benchmark框架的时候有需要注意些什么问题呢?快来一起看看吧。

2020-07-11 11:03:13 5677 5

原创 JVM中栈的frames详解
原力计划

文章目录简介JVM中的栈FrameLocal Variables本地变量Operand StacksDynamic Linking动态链接方法执行完毕 简介 我们知道JVM运行时数据区域专门有一个叫做Stack Area的区域,专门用来负责线程的执行调用。那么JVM中的栈到底是怎么工作的呢?快来一...

2020-07-10 08:34:37 5690 3

原创 小师妹学JVM之:Dirty cards和PLAB
原力计划

文章目录简介分代收集器中的空间划分Write barrier和Dirty cardsPLABold space分配对象总结 简介 分代垃圾回收器在进行minor GC的时候会发生什么操作呢?有没有什么提高效率的手段呢?今天我们和小师妹一起来了解一下垃圾回收中的Dirty cards和PLAB 分代...

2020-07-09 09:01:18 5306 4

原创 小师妹学JVM之:JVM中的Safepoints
原力计划

java程序员都听说过GC,大家也都知道GC的目的是扫描堆空间,然后将那些标记为删除的对象从堆空间释放,以提升可用的堆空间。今天我们会来探讨一下隐藏在GC背后的一个小秘密Safepoints。

2020-07-08 09:15:46 5497 4

原创 小师妹学JVM之:cache line对代码性能的影响
原力计划

文章目录简介一个奇怪的现象两个问题的答案CPU cache lineinc 和 add总结 简介 读万卷书不如行万里路,讲了这么多assembly和JVM的原理与优化,今天我们来点不一样的实战。探索一下怎么使用assembly来理解我们之前不能理解的问题。 一个奇怪的现象 小师妹:F师兄,之前你讲...

2020-07-07 09:05:11 5554 2

原创 区块链系列教程之:比特币的问题
原力计划

比特币网络是中本聪作为一个实验性的网络提出来并运行的。没想到的是这一个实验性质的网络,居然成了现在虚拟货币世界的龙头老大。这个结局估计是中本聪本人都没有想到过的。 既然是一个实验性的网络,那么比特币网络中又隐藏着哪些痛点呢?快来看看吧。

2020-07-06 08:56:01 6635 2

原创 JIT的Profile神器JITWatch
原力计划

简介 老是使用命令行工具在现代化社会好像已经跟不上节奏了,尤其是在做JIT分析时,使用LogCompilation输出的日志实在是太大了,让人望而生畏。有没有什么更加简便的方法来分析JIT日志呢?快来和小师妹一起来学习JITWatch吧。 什么是JIT 小师妹,F师兄,JIT就是Just In T...

2020-07-05 17:13:50 5929 2

原创 深入理解编译优化之循环展开和粗化锁
原力计划

文章目录简介循环展开和粗化锁分析Assembly日志禁止Loop unrolling总结 简介 之前在讲JIT的时候,有提到在编译过程中的两种优化循环展开和粗化锁,今天我们和小师妹一起从Assembly的角度来验证一下这两种编译优化方法,快来看看吧。 循环展开和粗化锁 小师妹:F师兄,上次你讲到在...

2020-07-04 09:04:03 5857 4

原创 小师妹学JVM之:JIT中的PrintAssembly续集
原力计划

文章目录简介JDK8和JDK14中的PrintAssemblyJDK8中使用AssemblyJDK14中的Assembly在JMH中使用Assembly总结 简介 上篇文章和小师妹一起介绍了PrintAssembly和PrintAssembly在命令行的使用,今天本文将会更进一步讲解如何在JDK8...

2020-07-03 09:02:42 5422 2

原创 区块链系列教程之:比特币中的共识
原力计划

文章目录简介比特币中的共识交易的校验区块的构建区块的校验区块链的分叉区块链分叉的种类总结 简介 在比特币的P2P网络中是怎么达成共识的呢?达成共识需要做哪些交易的校验呢?交易和区块是怎么传播到整个区块链网络的呢?看完这篇文章你就明白了。 比特币中的共识 之前我在讲分布式系统的时候有讲过分布式系统的...

2020-07-02 09:11:59 5986 1

原创 小师妹学JVM之:逃逸分析和TLAB
原力计划

逃逸分析我们在JDK14中JVM的性能优化一文中已经讲过了,逃逸分析的结果就是JVM会在栈上分配对象,从而提升效率。如果我们在多线程的环境中,如何提升内存的分配效率呢?快来跟小师妹一起学习TLAB技术吧。

2020-07-01 09:03:23 5331 2

提示
确定要删除当前文章?
取消 删除