程序那些事

其他

JIT的Profile神器JITWatch

其实吧,JITWatch为了大家方便使用,自带一个Sandbox功能,提供了一些可以直接在JITWatch中运行的代码,同时JITWatch可以实现源码的实时比对功能。所以需要大家下载源码。
2020年7月4日
其他

深入理解编译优化之循环展开和粗化锁

之前在讲JIT的时候,有提到在编译过程中的两种优化循环展开和粗化锁,今天我们和小师妹一起从Assembly的角度来验证一下这两种编译优化方法,快来看看吧。
2020年7月3日
其他

JIT中的PrintAssembly续集

其实最开始的时候,我发现JDK14中Assembly没能正常显示的时候,我也有想过拷贝一个hsdis-amd64.dylib过来试试,但是一看还需要下载JDK的代码,重新编译,就打起了退堂鼓。
2020年7月2日
其他

比特币中的共识

如图所示,这些节点会根据结果将“蓝色-绿色-粉色”这条链设置为主链,将“蓝色-红色”这条链设置为备用链。这些节点接纳了新的更长的链,被迫改变了原有对区块链的观点,这就叫做链的重新共识。
2020年7月1日
其他

小师妹学JVM之:逃逸分析和TLAB

上面的代码可以看到,如果设置了TLAB(默认是0),那么TLAB的大小是定义的TLABSize除以HeapWordSize和max_size()中最小的那个。
2020年6月30日
其他

一张PDF了解JDK9 GC调优秘籍-附PDF下载

https://github.com/ddean2009/www.flydean.com/blob/master/cheatSheet/JDK9GC-cheatsheet.pdf
2020年6月29日
其他

小师妹学JVM之:JIT中的PrintAssembly

小师妹:F师兄,当然不是机器码,有没有比机器码更高级一点点的,我记得上大学的时候学过汇编语言,好像就是离机器码最近的语言了,JVM有没有相应的汇编语言呢?
2020年6月28日
其他

比特币中的挖矿

挖矿是增加比特币货币供应的一个过程。挖矿同时还保护着比特币系统的安全,防止欺诈交易,避免“双重支付”,“双重支付”是指多次花费同一笔比特币。矿工们通过为比特币网络提供算力来换取获得比特币奖励的机会。
2020年6月26日
其他

java字节码byte code简介

小师妹:F师兄,我有一个大胆的想法,JVM的作用是将字节码解释或者编译成为机器码。然后在相应的运行环境中执行。那么有没有可能,不需要JVM,不需要机器码,而是直接在对应的平台上执行字节码呢?
2020年6月25日
其他

JIT中的PrintCompilation

当然有的,那就给你介绍一下LogCompilation的妹妹PrintCompilation,为什么是妹妹呢?因为PrintCompilation输出的日志要比LogCompilation少太多了。
2020年6月24日
其他

八张图彻底了解JDK8 GC调优秘籍-附PDF下载

如果一个对象的分配是在方法内部,并且没有多线程访问的情况下,那么这个对象其实可以看做是一个本地对象,这样的对象不管创建在哪里都只对本线程中的本方法可见,因此可以直接分配在栈空间中。
2020年6月23日
其他

区块链系列教程之:比特币中的网络和区块链

区块主标识符是它的加密哈希值,一个通过SHA256算法对区块头进行二次哈希计算而得到的数字指纹。产生的32字节哈希值被称为区块哈希值,但是更准确的名称是:区块头哈希值,因为只有区块头被用于计算。
2020年6月22日
其他

比特币的钱包与交易

将一个字节的地址版本号连接到『公钥哈希』头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对其进行两次SHA256运算,将结果的前4字节作为『公钥哈希』的校验值,连接在其尾部。
2020年6月20日
自由知乎 自由微博
其他

JDK14中JVM的性能优化

实时上,在应用程序中,这种对象的指针是非常非常多的,从而导致如果同样一个程序,在32位机子上面运行和在64位机子上面运行占用的内存是完全不同的。64位机子内存使用可能是32位机子的1.5倍。
2020年6月19日
其他

深入理解JIT和编译优化

但是因为bar和foo对象都只是在example方法中调用的,所以,JVM可以分析出来没有其他的对象需要引用他们,那么直接在example的方法栈中分配这两个对象即可。
2020年6月18日
其他

小师妹学JVM之:GC的垃圾回收算法

JVM定义了一些Root对象,从这些对象开始,找出他们引用的对象,组成一个对象图。所有在这个图里面的对象都是有效的对象,反之不在对象图中的对象就应该被回收。有效的对象将会被Mark为alive。
2020年6月17日
其他

小师妹学JVM之:JVM的架构和执行过程

这个加载器是加载定义在ClassLoader中的类。它的实现类是sun.misc.Launcher$AppClassLoader,这个类的实现很长,这里就不完整列出来了:
2020年6月16日
其他

MappedByteBuffer多大的文件我都装得下

小师妹:F师兄,你有没有发现,最近硬盘的价格真的是好便宜好便宜,1T的硬盘大概要500块,平均1M五毛钱。现在下个电影都1G起步,这是不是意味着我们买入了大数据时代?
2020年6月14日
其他

NIO中那些奇怪的Buffer

小师妹:F师兄不都说JDK源码是最好的java老师吗?为程不识源码,就称牛人也枉然。但是我最近在学习NIO的时候竟然发现有些Buffer类居然没有注释,就那么突兀的写在哪里,让人好生心烦。
2020年6月13日
其他

小师妹学JavaIO之:NIO中Channel的妙用

AbstractInterruptibleChannel实现了InterruptibleChannel接口,interrupt大家都知道吧,用来中断线程执行的利器。来看一下下面一段非常玄妙的代码:
2020年6月12日
其他

小师妹学JavaIO之:文件系统和WatchService

Watchable通过register将该对象的WatchEvent注册到WatchService上。从此只要有WatchEvent发生在Watchable对象上,就会通知WatchService。
2020年6月9日
其他

终于我用JOL打破了你对java对象的所有想象

log.info("{}",ClassLayout.parseInstance("www.flydean.com".getBytes()).toPrintable());
2020年6月7日
其他

区块链系列教程之:比特币的世界

2008年到2020年,经过12年的发展,比特币已经成为市值最高的虚拟货币,也是当之无愧的虚拟货币大当家。那么比特币的发展中有哪些有趣的事情呢?且随着本文的步伐来一步一步揭开比特币的神秘面纱吧。
2020年6月5日
其他

并发和Read-copy update(RCU)

最后,read_lock方法将会读取reclaimerVersion的值。这里会读取两次,如果两次的结果不同,则会调用readersVersion.lazySet方法,延迟设置reader的值。
2020年6月4日
其他

你不知道的java对象序列化的秘密

interface,因为java.io.Serializable并没有需要实现的接口。继承java.io.Serializable就表明这个class对象是可以被序列化的。
2020年6月3日
其他

ABA问题的本质及其解决办法

第二类问题其实算是整体集合对象的CAS问题了。一个简单的解决办法就是每次做CAS更新的时候再添加一个版本号。如果版本号不是预期的版本,就说明有其他的线程更新了集合中的某些节点,这次CAS是失败的。
2020年6月1日
其他

使用site-maven-plugin在github上搭建公有仓库

最近Github好消息频出,先是对个人用户取消了repositories和协作用户的个数限制,后面对于企业用户也进行了升级和降价处理。如果仓库不大的话,完全可以把仓库搬到github上面去。
2020年5月29日
其他

12个月大厂主机免费领AWS Azure Google-Cloud还不快到碗里来

EC2就是服务器,每个月750个小时的免费时间,嗯,一天24个小时,750小时可以用31.25天。想想有哪个月可以超出这个数目?
2020年5月28日
其他

小师妹学JavaIO之:文件写入那些事

还记得int需要占用多少个字节吗?4个,char需要占用2个字节。这样强制从int转换到char会有精度丢失的问题,只会保留低位的2个字节的数据,高位的两个字节的数据会被丢弃,这个需要在使用中注意。
2020年5月27日
其他

Java中的类型推断和lambda表达式

java是强类型的编程语言,每个java中使用到的变量都需要定义它的类型,否则会编译失败。强类型语言的好处就是可以尽可能的在编译期间就发现代码中可能出现的问题,从而减少在运行时出现问题的可能性。
2020年5月26日
其他

小师妹学JavaIO之:文件编码和字符集Unicode

unicode字符集最后是要存储到文件或者内存里面的,那怎么存呢?使用固定的1个字节,2个字节还是用边长的字节呢?根据编码方式的不同,可以分为UTF-8,UTF-16,UTF-32等多种编码方式。
2020年5月24日
其他

响应式系统reactive system初探

上面的四个特性中,及时响应性(Responsive)是系统最终要达到的目标,恢复性(Resilient)和有弹性(Elastic)是系统的表现形式,而消息驱动(Message
2020年5月14日
其他

JDK 14的新特性:Lombok的终结者record

为了解决这个问题,也产生了很多解决方案,比如Lombok,可以通过注解就自动生成特定的存取方法和构造函数。但是Lombok生成的代码看不到,在代码调试方面有一定的劣势。
2020年5月13日
其他

使用spring boot创建fat jar APP

在很久很很久以前,我们部署web程序的方式是怎么样的呢?配置好服务器,将自己写的应用程序打包成war包,扔进服务器中指定的目录里面。当然免不了要配置一些负责的xml和自定义一些servlet。
2020年2月14日
其他

Hyperledger Fabric基础知识

nodes。Peer是网络的基本元素,因为它们托管共享账本和智能合约。Peer执行链码,访问共享账本数据,认可交易并与应用程序对接。Peer可以是endorsing
2020年1月13日
其他

Libra教程之:来了,你最爱的Move语言

resources永远不能被复制,重用或丢弃。资源类型只能由定义该类型的模块创建或销毁。这是由Move虚拟机通过字节码验证来强制进行保证的。Move虚拟机将拒绝运行尚未通过字节码验证程序的代码。
2019年11月30日
其他

Libra白皮书解读

Libra是匿名的,每个用户都可以创建多个与真实身份无关的地址。但是这个和监管是冲突的,如果Libra真的想实现世界货币的职能,不可能避开各国央行监管的问题,所以说,这个匿名性是有限制的。
2019年6月26日