chchaooo Blog

想想再说

JVM / DVM / ART虚拟机

JVM Java虚拟机(Java Virtual Machine,缩写为JVM)是一种能够运行Java bytecode的虚拟机 JVM有三个概念:规范,实现和实例。 JVM规范是一个正式描述JVM实现所需要的文档,具有单个规范确保所有实现是可互操作的。 JVM实现是一种满足JVM规范要求的计算机程序。 JVM的实例是在执行编译成Java字节码的计算机程序的过程中运行的实现。 ...

Timer源码解读

Timer是个古老的基础库,进去看看细节,实现的很精炼。找到它的局限性方便理解Java后续的演进

Timer Timer在JDK5.0之前是唯一的内置任务调度方法。其惯常的使用方式是 final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { // do sth }, 10*1000, 10*1000); ...

Git

概念 工作区: 当前存在于电脑上的文件(不包含.git隐藏文件夹) 隐藏目录.git中保存的东西很多,其中最重要的是称为stage的暂存区,还有Git会自动为我们创建第一个分支master,以及指向master的一个指针叫HEAD 由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以想要上传内容到github,需要向github的账户中设置公...

Android流量统计

流量统计 项目中需要对Android设备进行流量统计来进行资费结算,所以对Android设备流量统计进行了一些调研。发现流量统计主流上有两种方式 使用系统统计类TrafficStats获取 通过系统文件解析读取 TrafficStats static long getMobileRxBytes() //获取通过Mobile连接收到的字节总数,不包含WiFi ...

Iterable & Iterator

Iterable Iterable接口:实现了该接口的类需要实现iterator()方法,表示当前的数据结构是可迭代的。(内部实现迭代器,并对外提供获取迭代器的方法) public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<?...

ConcurrentModificationException

ConcurrentModificationException出现的原因和解决方案

ConcurrentModificationException 在对集合类进行操作时,有很多情况会出现ConcurrentModificationException。这篇文章我们来分不同的遍历方式和线程场景来讨论ConcurrentModificationException产生的原因和解决的方法。 下面我们先就使用迭代器进行遍历出现异常来进行讨论,最后再讨论其他的遍历形式。 Itera...

(九)图片预览内存优化实践

针对图片加载的内存优化过程

项目中包含一个如下的页面,其作用是对拍摄过的照片进行优化,包含一个大图预览和一个可以滑动的缩略图预览栏 使用Android Studio Profiler来进行内存的跟踪。先拍摄了700张照片用于预览,然后停留在预览页面,再采集结果中随机浏览了30分钟,每秒钟随机切换一张照片,整体的内存占用并没有上升迹象,这可以说明该过程中并没有内存泄漏,但是可以看到局部的内存波动很大 我们缩小...

(八)Bitmap内存管理

使用inBitmap结合LruCache来优化Bitmap的内存使用

Bitmap内存管理 除了在CachingBitmaps中描述的几个措施之外,你还可以做一些明确的事情来促进垃圾回收和位图的重用。Android目标版本决定了我们将推荐使用什么策略。BitmapFun这个示例app包含了这样一个类,这个类向你展示了怎样设计你的app,才能在android的不同版本之间高效率的工作。 为了给这节课打好基础, 先来看看Android关于Bitmap内存管理的...

(七)Bitmap缓存

图片缓存 在Android开发中,加载一个图片到界面很容易,但如果一次加载大量图片就复杂多了。在很多情况下(比如:ListView,GridView或ViewPager),能够滚动的组件需要加载的图片几乎是无限多的。 有些组件的child view在不显示时会回收,并循环使用,如果没有任何对bitmap的持久引用的话,垃圾回收器会释放你加载的bitmap。当这些图片再次显示的时候,要想避...

(五)Java对象内存占用测试

纸上得来终觉浅,绝知此事要躬行

使用java的java.lang.instrument.Instrumentation来测试各个不同类型占用的内存空间。中间有些波折,最后使用最直接将所有类都放到同一个目录下,不使用IDE生成的目录结构,完成了相关的测试。 1. 编译Tools类 javac SizeOfObject.java 2. 编辑META-INF(文件内部内容) Premain-Class: SizeOfO...