麦克周的技术博客(微信号:michael_tec),保持软件工匠心态

已出版《大话Java性能优化》、《深入理解JVM&G1 GC》,即将出版《技术领导力-如何带领一支软件开发团队》。
401
原创
11
转载
0
译文
76
评论
489389
访问

我的博客文章

2017
10

JVM 垃圾回收器工作原理及使用实例介绍

垃圾收集基础Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别。在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间。当内存释放不够完全时,即存在分配但

(35)(0)
2017
28

Java永久代去哪儿了

在JDK8之前的HotSpot虚拟机中,类的这些“永久的”数据存放在一个叫做永久代的区域。永久代一段连续的内存空间,我们在JVM启动之前可以通过设置-XX:MaxPermSize的值来控制永久代的大小,32位机器默认的永久代的大小为64M,64位的机器则为85M。永久代的垃圾回收和老年代的垃圾回收是绑定的,一旦其中一个区域被占满,这两个区都要进行垃圾回收。但是有一个明显的问题,由于我们可以通过‑XX:MaxPermSize 设置永久代的大小,一旦类的元数据超过了设定的大小,程序就会耗尽内存,并出现内存溢出错

(588)(0)
2017
19

Apache kafka 工作原理介绍

本文首先介绍了 Apache Kafka 的基本原理及专业术语,然后通过一个在线网络游戏的例子进一步解释 Kafka 的功能,最后通过具体案例介绍 Kafka 与 Flume 的差异。

(145)(0)
2017
17

博客更新放缓

工作较为繁忙,博客文章更新时间拉长,有需要的朋友请加微信号 michael_tec,每天在那里发布文章或技术分享。

(173)(3)
2017
02

JVMs across data center and twitter's jdk

第十届国际软件开发者大会(2016年11月7日-11月11日)在旧金山召开,昨天(11月7日)首日会上,来自Twitter JVM组的John Coomes(团队成员,两个孩子的父亲,昨天Twitter发文说参加大会同时也拿到了旧金山地区的超速罚单)介绍了团队基于OpenJDK的一个分支设立了自己的小组,并介绍了在此基础上所做的开发、上线、维护公司内部JDK版本的具体情况。

(100)(0)
2016
28

《大话Java性能优化》面向对象及基础类型相关部分

Java语言里面的所有类都默认继承自java.lang.Object类,在java.lang.Object类里面有一个clone()方法,JDK API的说明文档里面解释了这个方法会返回Object对象的一个拷贝。我们需要说明两点:一是拷贝对象返回的是一个新对象,而不是一个对象的引用地址;二是拷贝对象与用new关键字操作符返回的新对象的区别是,这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息,即每次拷贝动作不是一个针对全新对象的创建。

(535)(0)
2016
24

关于若干选举算法的解释与实现

分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不一致,最后导致各节点的数据不一致。要确保数据一致,需要选举算法的支撑,这就引申出了今天我们要讨论的题目,关于选举算法的原理解释及实现,选举包括对机器的选举,也包括对消息的选举。

(1516)(0)
2016
20

Java程序为什么需要调优(《大话Java性能优化》第一章第一节)

随着互联网业务的不断拓展、繁荣,越来越多的系统架构开始参照互联网+企业的系统架构方式。笔者认为,任何技术都离不开对业务需求的支撑,所以开始研究程序性能问题之前,我们需要先了解系统业务逻辑。

(1048)(0)
2016
16

Apache ZooKeeper Watcher 机制源码解释

本文首先讲解了 Apache ZooKeeperWatcher 机制的使用方式,通过一个集群内部状态监听、触发动作的实例以及回调函数的基本知识,引发对于 Watcher 机制内部实现原理和源代码的讨论,然后通过对实现原理的解释让读者有一些工作方式的理解,接下来对源代码进行分析,进一步加深读者对 Watcher 机制的理解。

(1733)(0)
2016
09

Java 程序死锁问题原理及解决方案

我们发现,死锁虽然是较早就被发现的问题,但是很多情况下我们设计的程序里还是经常发生死锁情况。我们不能只是分析如何解决死锁这类问题,还需要具体找出预防死锁的方法,这样才能从根本上解决问题。总的来说,还是需要系统架构师、程序员不断积累经验,从业务逻辑设计层面彻底消除死锁发生的可能性

(3779)(0)
2016
03

MapReduce转化为Spark

本文首先对 MapReduce 和 Spark 的基本信息做了对比性介绍,接着分别对 MapReduce 和 Spark 进行基础性知识讲解,然后在单台 Linux 服务器上安装了 Spark,并以实际代码演示了从 MapReduce 转换代码到 Spark 时需要注意的事项。本文针对的是对 Spark 完全没有了解的用户,后续文章会从实际应用出发,从安装、应用程序的角度给出更加实用的教程。

(3558)(0)
2016
05

Java I/O 操作及优化建议(原文已发表于IBM Developworks)

I/O 与 NIO 一个比较重要的区别是我们使用 I/O 的时候往往会引入多线程,每个连接使用一个单独的线程,而 NIO 则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。而由于 NIO 的非阻塞需要一直轮询,比较消耗系统资源,所以异步非阻塞模式 AIO 就诞生了。本文对 I/O、NIO、AIO 等三种输入输出操作方式进行一一介绍,力求通过简单的描述和实例让读者能够掌握基本的操作、优化方法。

(3853)(0)
2016
27

Spark 附带示例完整解释(原文已在IBM Developworks发表)

本文首先对 Spark 日志解析示例从运行、输出结果、源代码解释、涉及知识面拓展解释等多方位开始讲解,然后对 Page Rank 示例也按照同样的方式进行讲解,最后对程序中示例代码里出现的其它知识点进行解释。

(7981)(0)
2016
22

Java集合类操作优化经验总结(原文已发表于IBM Developworks)

综合前面的介绍和实例代码,我们可以知道,如果涉及到堆栈、队列等操作,应该考虑用 List。对于需要快速插入、删除元素等操作,应该使用 LinkedList。如果需要快速随机访问元素,应该使用 ArrayList。如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高。如果多个线程可能同时操作一个类,应该使用同步的类。要特别注意对哈希表的操作,作为 Key 的对象要正确复写 Equals 和 HashCode 方法。尽量返回接口而非实际的类型,如返回 List 而非 ArrayLis

(10892)(0)
2016
20

你若顽强到底,一切皆有可能——谈工程师职业素养(《大话Java性能优化》前言)

7岁那年,当我合上《上下五千年》一套三册书籍时,我对自己说,我想当个作家。这一晃27年了,等待了27年,我的第一本书《大话Java性能优化》即将面世了。我是多么的忐忑、惊喜,就像第一次面对我的女儿“小顽子”,给她取这个小名,希望她顽强到底,因为我相信,你若顽强到底,一切皆有可能。

(7343)(1)
412条 共28页1 2 3 4 5 ... 下一页 尾页
img

zmycoco2

等级:

排名:第1992名

博客专栏
文章分类
文章存档
阅读排行
评论排行
推荐文章
最新评论
img