JVM相关及其拓展(五) -- Java内存模型 Java内存模型 屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到的一致的内存访问效果。 主要目标: 定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。变量包括了实例字段、静态字段和构成对象的元素,但不包括局部变量和方法参数(他们为线程私有,不被共享)。 主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存( 2018-05-09 JVM
数据结构--HashMap实现原理及解析 HashMap定义HashMap是基于Map接口实现的一种键-值对<key,value>的存储结构。内部允许null值,同时非有序,非同步(线程不安全)。它存储和查找数据时,是根据key的hashcode计算出具体的存储位置。内部最多允许一条记录的key为null。 HashMap的底层实现是数组+链表+红黑树(Java 8新增的)。 数组是HashMap的主体 所以H 2018-05-09 数据结构 Java源码
JVM相关及其拓展(四) -- 垃圾收集器与内存分配策略 垃圾收集器与内存分配策略垃圾收集器1.概述垃圾收集(Garbage Collection,GC):自动管理回收不再引用的内存数据需要完成的三件事情: 哪些内存需要回收 什么时候回收 如何回收 Java语言会自动管理和回收不再引用的内存数据,由垃圾回收机制来完成。Java自身提供了内存管理机制,应用程序不需要去关注内存如何释放,内存用完后,GC会去自动进行处理,不需要人为干预出现错误。 在 2018-05-04 JVM
JVM相关及其拓展(二) -- 虚拟机类加载机制 虚拟机类加载机制1.定义虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 2.类的生命周期 类从被加载到虚拟机内存中开始,到卸载除内存为止,生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用 2018-04-12 JVM
JVM相关及其拓展(一)-- JVM内存区域 1. JVM内存区域 JVM在执行Java程序的过程中会把管理的内存分为若干个数据局域。 程序计数器(Program Counter Register):一块较小的内存空间,可看作为当前线程所执行的字节码的行号指示器。每条线程都需要一个独立的程序计数器,所以为线程私有区域。没有规定任何OutOfMemoryError情况的区域。线程执行Java方法,则记录正在执行的虚拟机字节码指令地址,若为Na 2018-04-10 JVM
日常细节记录 强引用置为null时,不会立即回收对象,帮助回收器加快回收。但是会帮助GC 等到下次回收周期时即会回收 死锁的四个必要条件:互斥,占有且等待,不可抢占,循环等待 CAS(原子操作)是乐观锁用到的主要机制,乐观锁是不用加锁去执行操作,如果产生冲突则失败重试,直到成功为止,也叫做“自旋”。与乐观锁相对应的是悲观锁,synchronized就是悲观锁,也叫“独占锁”需要加锁进行操作,并且加锁代码块 2018-04-03 Android Java
Activity,Window,View的关联与理解 Activity,Window,View相关 1. 什么是Activity,Window,View以及职能简介 Activity:不负责视图控制,只是控制生命周期和处理事件,真正控制视图的是Window,一个Activity包含一个Window,Window真正代表一个窗口。Activity是一个控制器,控制视图的添加与显示以及通过回调方法来进行Window与View的交互。 Window:Win 2018-04-01 Android
Glide源码解析要点 该源码解析是基于最新的Glide 4.8.0进行的 Glide基本流程分析Glide的基本使用代码 1Glide.with(context).load($img$).apply(RequestOptions().transform(MultiTransformation(CenterCrop(),CircleCrop())).placeholder(R.drawable.ic_default 2018-03-18 源码解析
Java基础知识 如何理解Java的多态?其中,重载和重写有什么区别? 多态是同一个行为具有多个不同表现形式或形态的能力,多态是同一个接口,使用不同的实例而执行不同操作。多态就是程序运行期才确定,一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法。 多态存在的三个必要条件是:继承,重写,向上转型(需要将子类的引用赋值给父类对象,只有这样该引用才能具备调用父类的方 2018-01-17 Java
Android中的Hook-PLTHook 基本原理Linux在执行 动态链接的ELF时候,为了优化性能会使用一个 延迟绑定 的策略。 (延迟绑定:为了解决原本静态编译时要把各种系统API的具体实现代码都编译进ELF文件导致文件巨大臃肿的问题。) 当动态链接的ELF程序调用共享库的函数时,会去查找PLT表中的对应项目,PLT表在跳跃到GOT表中找到执行函数的实际地址,后续再调用的时候会直接去执行GOT表中对应的目标函数。(通过 _dl_ru 2025-10-02 Hook
Android中的Hook Hook主要使用场景是 绕过系统限制,修改已经实现的代码 动态化,调用隐藏的API 插件化、组件化 主要有如下几种Hook类型,会特别针对几类进行详细分析 Android进程结构 Linux进程 Art/Dalvik虚拟机 (为Java提供运行时环境) Java Framework / Java App ClassLoader 内存管理 Native区 native代码 2025-10-02 Hook
BHook源码解析 BHook简介Git地址:https://github.com/bytedance/bhook 主要是面向Android Native(C/C++)的函数Hook,基于 PLT-Hook进行实现。 2025-10-02 源码解析