- 博客(60)
- 收藏
- 关注
原创 HashMap & LinkedHashMap
LinkedHashMap继承了HashMap,是基于数组和双向链表实现的。HashMap中的数据是无序的,也就是说访问的顺序不是存储的顺序。LinkedHashMap中的数据是有序的,并且我们可以自己决定使用哪种顺序。
2023-10-22 19:23:34
1179
1
原创 IntentService
多次启动Service,onCreate方法只会调用一次,所以自始至终只在一个线程中执行任务,并且执行任务的顺序是串行的,因为每一个任务都会放入消息队列中轮询执行。
2023-08-14 14:28:09
146
原创 Android复习(Android基础-四大组件)—— Service
Service是一个:不需要和用户交互而且还要求长期运行的任务,比如耗时操作。Service不是运行在一个独立的进程当中,不依赖于任何用户界面。。(当依赖的应用程序进程被杀掉时,Service也会被杀掉。Service的代码默认,除非我们手动创建一个子线程。(为了防止主线程被阻塞,我们需要在Service内部手动创建子线程)
2023-08-01 10:27:22
468
原创 Android复习(Android基础-四大组件)—— Activity
如果D所需的任务栈为S1,并且当前任务栈S1的情况为 ADBC,根据栈内复用的原则,此时D不会重新创建,系统会把D切换到栈而并调用onNewIntent 方法,同时由于singleTask 默认具有clearTop的效果,会导致栈内所有在D上面的 Activity全部出栈,于是最终S1中的情况为 AD。:具有这个标识位的Activity不会出现在历史Activity的列表中,当某些情况下我们用户通过历史列表回到我们的Activity的时候这个标记比较有用。我们就该在写代码的时候,进程Activity。
2023-07-31 10:48:44
439
原创 Java虚拟机——线程安全与锁优化
被synchronized修饰的同步块对于同一条线程来说是可重入的,所以同一线程反复进入同步块也不会出现把自己锁死的情况。被synchronized修饰的同步块在持有锁的线程执行完毕释放锁之前,将会阻塞后面其他线程的进入。重入锁是Lock接口(全新的互斥同步手段)最常见的一种实现形式,它与synchronized一样是可以重入的。也就是说,有一个线程访问了这个锁资源,那么就认为只有一个线程访问,完全没有其他线程访问。不过自旋会消耗处理器资源,如果锁被占用的时间长,这些资源的消耗是浪费的。
2023-07-29 09:49:17
232
原创 Java虚拟机——后端编译与优化
它是一个相对简单快速的三段式编译器,主要的关注点在于局部性的优化,而放弃了许多耗时较长的全局优化手段。无论是方法调用产生的标准编译请求,还是栈上替换编译请求。虚拟机在编译器还未完成编译之前,都将。它是一个专门面向服务端典型用场景的、为服务端的性能配置针对性调整过 的 编译器。在后台编译执行的过程中,服务端编译器和客户端编译器的编译过程是有差别的。而编译动作会进行在后台的编译线程中。
2023-07-24 09:51:45
454
原创 Java虚拟机——方法调用
解析与分派并不是二选一的排他关系,他们是在不同层次上去筛选,确定目标方法的过程。例如静态方法会在编译期确定,在类加载期就进行解析。而静态方法也可以有重载版本,选择重载版本的过程也是通过静态分派完成的。
2023-07-22 11:26:00
266
原创 Java虚拟机——虚拟机字节码执行引擎 & 运行时栈帧结构
如果执行的是实例方法(没有被static)修饰,那么局部变量表的第0位索引的变量槽默认是用于传递方法所属对象的引用。可以通过this关键字来访问这个隐含的参数。还有一种成员变量,又叫做实例变量,它在实例化的时候被赋值。
2023-07-21 15:55:21
162
原创 Java虚拟机——Java模块化系统
是一种软件设计模式,它通过将系统中的相关组件(类、函数、变量等)封装到一个独立的容器中,实现组件之间的逻辑隔离。这个容器可以被动态地配置和修改,实现不同的功能需求。
2023-07-20 09:59:42
161
原创 Java虚拟机——类加载的过程
除了在加载阶段,用户应用程序可以通过自定义类加载器的方式参与外,其余的动作都是完全由Java虚拟机来主导。类的初始化是类加载过程的最后一个步骤,之前的几个类加载动作中。的时候,变量已经赋过一次系统要求的初始零值。加载阶段与连接阶段的部分动作是交叉进行的。直到初始化阶段,Java虚拟机才真正。,将主导权移交给应用程序。
2023-07-19 09:42:11
282
原创 Java虚拟机——类加载机制概述 & 类加载的时机
在一个数据类型完成类加载只会,开发者可以调用它的静态类成员或者使用new关键字来创建对象实例。当类满足三个条件时,这个类的生命周期就结束了,会被卸载。
2023-07-18 19:29:56
332
1
原创 Java虚拟机——类文件结构
魔数不仅是Class文件,很多文件格式标准中都使用魔数来进行身份识别的习惯,例如GIF或者JPEG等的文件头。方法中的代码,经过Javac编译器编译成字节码指令之后,存放在方法属性表集合中的一个名为"Code"的属性里面。如文本字符串、被声明为final的常量值等。常量池中每一项常量都是一个表,截至JDK13,常量表中已经有了17种不同类型的常量。不同常量类型有着各自完全独立的数据结构,并且它们在常量池中占据的字节大小也是不一样的。它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。
2023-07-17 10:04:40
419
原创 Java虚拟机——低延迟垃圾收集器&内存分配
它可以说是G1的下一代继承者,有着相似的堆内存布局。也是使用基于Region的堆内存布局,同样有着用于存放大对象的Humongous Region,默认的回收策略也同样是优先处理回收价值最大的Region。Shenandoah维护记忆集的方式使用了"连接矩阵"的全局数据结构来记录跨Region的引用关系。它与其他收集器的核心差异在于它的回收是并发的。因为Region回收对象通过标记-复制算法,可同时工作线程也在运行,如果移动之后,用户线程访问到旧的地址,就会出错。
2023-07-15 14:57:55
173
原创 Java虚拟机——OutOfMemoryError异常
通过生成大量的动态类可以,当前的很多主流框架,如Spring、Hibernate对类进行增强的时候,都会使用到CGLib这类字节码技术。*明确允许Java虚拟机自行选择是否支持栈的动态拓展 HotSpot虚拟机是不支持拓展的。
2023-06-05 12:37:06
964
原创 Java虚拟机——运行时数据区域
运行时常量池是方法区的一部分,自然也受到方法区内存的限制,无法申请到内存后会抛出OutOfMemoryError异常。《Java虚拟机规范》规定,Java堆可以处于物理上不连续·的内存空间中,但在逻辑上它应该被视为连续的。不过对于大对象(类似于数组),多数虚拟机实现出于简单,存储高效的考虑,很可能会要求连续的内存空间。Java堆即可以为固定大小,也可以是拓展的,不过当前主流的Java虚拟机都是按照可拓展来实现的。如果方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。
2023-06-03 13:26:10
274
原创 RxJava简单知识
ReactiveX 与 RxJava在讲到RxJava之前我们首先了解ReactiveX,RxJava是ReactiveX的一种实现。微软给的定义是Rx是一个函数库,开发者可以利用可观察序列和LINQ风格查询操作符来编写异步和基于事件的程序。用Observables表示异步数据流,用LINQ操作符查询异步数据流,用Schedulers参数化异步数据流的并发处理。为何要用RxJava当请求数量很大的时候,AsyncTask和Handler的代码逻辑会变得复杂。
2023-05-10 16:30:00
152
原创 设计模式概括
6.1 设计模式六大原则单一职责原则定义:就一个类而言,应该仅有一个引起它变化的原因开放封闭原则定义:类、模块、函数等应该都是可以拓展的,但是不可修改。里氏替换原则定义:所有引用基类(父类)的地方必须透明地使用其子类的对象依赖倒置原则定义:高层模块不应该依赖低层模块,两者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象。迪米特原则定义:一个软件实体应当尽可能少地与其他实体发生相互作用接口隔离原则定义:一个类对另一个类的
2023-05-02 21:30:00
62
原创 源码解析Retrofit
null?HttpServiceMethod继承了ServiceMethod抽象类HttpServiceMethod 的 abstract adapt()CallAdapted继承了HttpServiceMethod} //adapt方法的实现,调用CallAdapter的adapt方法 @Override protected ReturnT adapt(Call < ResponseT > call , Object [ ] args) {} }
2023-04-13 07:11:03
200
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人