Kinsomy Blog

Thinking will not overcome fear but action will.

深入理解java虚拟机(五)

HotSpot JIT

1.HotSpot 即时编译器 即时编译器叫做JIT,另一个编译技术叫预编译(AOT),即时编译器是针对频繁被调用的代码块,也就是俗称的热点代码块进行编译,将它编译成本地机器码,有助于提高执行效率。 1.1 解释器和编译器 HotSpot即时编译器包括了解释器和编译器两部分,他们之间配合工作。 那么为什么需要解释器和编译器并存呢?它们分别又是在什么时工作? 解释器顾名思义就是对代码解释执...

深入理解java虚拟机(四)

javac 编译过程

1. Javac编译过程 Javac是编译器的前端,将java文件转变成class字节码文件。 Javac编译过程大致分三个过程: 解析与填充符号表过程 插入式注解处理器的注解处理过程 分析与字节码生成过程  1.1 解析与填充符号表 解析步骤包括词法分析和语法分析两个过程。 词法分析将源代码转变为标记,将代码拆分成最小元素,可以被标记的最小元素包括关键字、变量名、...

深入理解java虚拟机(三)

类加载机制

类加载机制 类加载过程的生命周分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载。 验证、准备、解析三个阶段成为连接。 1. 类加载的时机 1.1 加载 虚拟机规范中没有明确规定加载时机,由不同的虚拟机实现自行决定。 1.2 初始化 下面5种情况必须立即初始化: 1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过...

深入理解java虚拟机(二)

垃圾回收

1.内存回收 1.1 判断对象是否存活 垃圾收集器会对不再被使用的对象进行GC操作,那么就要判断一个对象是否存活,有以下几种算法: 1.1.1 引用计数算法 概述:对堆内存中的每个对象添加一个引用计数器,有其他地方引用它计数器加一,引用断开就减一。 优点:算法时间简单,判端高效。 缺点:难以解决对象之间循环引用的问题。 class O { public Object o; } ...

深入理解java虚拟机(一)

虚拟机内存

1.Java虚拟机内存区域  有图上可以看出,java虚拟机的运行时数据区主要分为几个区域,每个线程独有的程序计数器、虚拟机栈、本地方法栈和线程共享的方法区和堆。 1.1 程序计数器 程序计数器保存当前线程执行的字节码指令,jvm通过读取程序计数器的值来获得下一条需要执行的字节码指令,常用的分支、循环、跳转、异常处理、线程回复的功能都是要依赖程序计数器。 为什么程序计数器是线程独有?...

Android进阶(七)Activity启动流程解析

Android advance

1 前言 ActivityThread在Application进程中管理着主线程的执行,同时根据Activity Manager Service(AMS)的请求负责调度和执行activities,broadcasts和其他操作。 ActivityThread作为app的入口,启动一个app时会先执行里面的main()方法,这个逻辑和一个普通的java程序相同。通过分析ActivityThr...

centos 配置端口

linux

前言 最近在VPS上重新安装了centos6的系统,同时配置了ngnix服务器,但是当这些工作都搞定后,发现ss连接不上了,ip能ping通,所以并不是ip被墙了,于是那端口扫描工具随机扫了一遍端口,发现都是出于关闭状态,因此确定了是端口被禁用导致的连接失败。 扫描端口 执行命令扫描系统开放的端口: /etc/init.d/iptables status 结果centos的防火墙导致初始...

Glide替换Picasso

Migrate from Picasso to Glide

1 背景 之前的项目中有一些较老的模块使用了Picasso。 因为前期项目没有做组件化,缺少底层基础设施库,并且Picasso没有支持Gif加载,Glide又逐渐成为谷歌官方推荐的图片库,所以后面开发的新模块和APP都使用到了Glide,项目中存在两套图片加载库的情况。 因此需要用Glide替换Picasso库,为组件化做准备。 2 对比 Glide 和 Picasso在API的调用...

Android进阶(六)Glide解析-加载流程

Android advance

1 引言 一直想要阅读Glide源码,但是苦于时间和功力都不够,总是断断续续的,趁着现在有一些空暇时间,来简要分析Glide的源码。Glide的实现太过复杂,不可能做到面面俱到,如果每一行都细致分析,很容易陷入作者的优化细节中去而偏离主线,因此只针对几个主要功能做解析即可。 以下分析全部基于Glide v4.9.0。 2 初始化 Glide最常见的用法就是如下一行代码: Glide.wit...

Android进阶(五)DataBinding解析

Android advance

1 概述 在上篇文章Android进阶(四)LiveData解析中讲到了关于JetPack框架的LiveData解析,这是一个基于ViewModel和观察者模式的实践。 这篇文章要讲的DataBinding同样可以认为是基于ViewModel的实践,同时做到了数据和UI的双向绑定。DataBinding允许你使用声明式的而不是以编程方式将布局中的UI组件绑定到应用程序中的数据源。免去了编写...