logo头像

路漫漫兮其修远兮

后端

消息推送

1 什么是消息推送很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的“消息推送”。 对于APP或者桌面客户端这种C/S架构的...

初步尝试秒杀架构

秒杀这个东西虽然快被玩“烂”了,但如果仅仅是浏览网上的文章的话,并不能真正理解那些文章中说到的各种方案。例如都说要消息队列来削峰,那该如何做?就算知道如何做,那真正上手写的时候,情况真的那么简单么?所以,计算机这个玩意,尤其是软件工程...

Java虚拟机(七):编译及优化

1 什么是编译“编译”这个词汇在各种关于编程语言的资料中都能看到,那究竟什么是编译呢?简单地说,编译是一个行为,是一个将一种语言翻译成另一种语言的行为,而实现这个行为的东西就是“编译器”。例如,C语言编译器会将C语言源代码翻译成汇编代...

Java虚拟机(六):类加载机制

大家都知道,我们编写的Java类经过编译器编译后会生成class文件,class文件描述了类的各种信息,最终都要加载到内存中才能运行使用,那虚拟机是如何加载这些class文件的呢?加载又有哪些过程呢?是否程序一启动就把所有的类都加载到...

Java虚拟机(五):性能监控和分析工具

1 概述在之前的文章,我们了解了Java内存布局、内存模型、对象模型和垃圾回收的知识。在实际生产中,绝大多数Java开发者都不会参与到JVM的开发中,那我们为什么要理解JVM呢?因为我们要排查、解决生产中出现的问题,在理解了理论知识的...

Java虚拟机(四):垃圾回收

1 什么是垃圾回收Java包含了自动内存管理机制,使得我们不用像C/C++那样为每个malloc/new都配对一个free/delete操作。当代码复杂的时候,会非常容易遗漏free/delete操作,这样会使得内存无法被释放,...

Java虚拟机(三):Java对象模型

1 什么是Java对象Java是一门面向对象语言,对象是其最基本的一个组件,在Java程序运行过程中无时无刻不在创建对象、销毁对象,有些对象的生命周期非常短暂(例如在方法内部创建的对象,一般在方法调用之后不长的时间内会被回收销毁...

Java虚拟机(二):Java内存模型

1 基本概念在上一篇文章Java内存区域 中,我们讲了JVM为了更好的管理内存,将Java进程的内存划分成了几个功能、用途不同的区域,所以很多人会认为划分后的内存布局就是Java内存模型。严格来说,这个说法是不准确的,不过大家在...

Java虚拟机(一):Java内存区域

1 什么是Java内存区域总所周知,现代计算机中的程序要想得到执行,得先将代码载入内存中,程序在运行时产生的数据也会放置在内存中。为了更好的管理内存中的数据,JVM规范规定了几个运行时数据区域,这些区域都有各自的用途以及创建和销...

理解Java内存泄露

今天在看Effective Java 第三版的时候,看到第7条 Eliminate obsolete object references。发现即使书中的Java版本已经到了Java9,仍然认为将不活跃的数组元素设置为null可以让GC...