- 博客(74)
- 收藏
- 关注
原创 JVM—虚拟机类加载器
是一种软件设计模式,它通过将系统中的相关组件(类、函数、变量等)封装到一个独立的容器中,实现组件之间的逻辑隔离。这个容器可以被动态地配置和修改,实现不同的功能需求。
2024-08-03 23:43:37
1232
原创 JVM—虚拟机类加载时机与过程
一个类型从被加载到虚拟机内存开始,到卸载出内存为止,它的生命周期会经历加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析统称为链接。除了初始化外,其他阶段的顺序是,注意是开始而不是执行,因为这些阶段都是混合交叉的进行。关于什么阶段加载、JVM规范没有强制约束,而是交给虚拟机自由把握,但是JVM规范严格规定了六种情况必须立即对类进行初始化(加载、验证、准备、解析自然在此之前)接口中定义JDK8加入的默认方法(被Default方法修饰的接口方法),这个接口类必须在实现类之前初始化。
2024-08-03 23:31:23
1048
原创 JVM—类文件结构
Class文件是一组以字节为基础单位的二进制流,各个数据项目严格按照顺序排列紧凑的在文件中,中间没有任何分隔符。Class文件采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有“无符号数”和“表”两种数据类型无符号数:属于基本数据类型,以u1、u2、u4、u8分别表示1个字节,2个字节...这样。可以用来描述索引引用、数字、数量值等。表:是由多个无符号数或者其他表作为数据项构成的有层次关系的复合数据类型,一般以_info结尾,整个Class本质上也可以视作一张表。
2024-08-02 17:53:44
986
原创 JVM—CMS收集器
CMS基于标记-清除算法,会产生大量的内存碎片,内存碎片过多会导致大对象的分配出现问题,严重的话会出现OOM。(Floating Garbage):由于GC线程和用户线程并发,在GC线程运行过程中产生的垃圾就叫浮动垃圾。CMS收集器(Concurrent Mark Sweep)是一种以获取最短回收停顿时间为目标的收集器。重新标记则是为了修正并发标记期间,用户程序继续运作,导致标记变动的那一部分对象的标记记录。清理标记阶段判断已经死亡的对象,由于不需要移动存活对象,所以该过程也是与用户线程并发的。
2024-08-02 17:43:22
356
原创 JVM—垃圾收集算法和HotSpot算法实现细节
分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期放在不同代上,不同代采用最适合它的垃圾回收方法进行回收。
2024-08-01 19:26:15
1811
原创 JVM—对象已死?
在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。
2024-08-01 19:17:49
969
原创 JVM—HotSpot虚拟机对象探秘
对象只是普通对象,不包括数组和Class对象:当虚拟机遇到字节码New指令时,先检查这个指令的参数是否可以在常量池定位到一个类的符号引用,并且加载这个符号引用代表的类是否被加载、解析、验证、初始化过。对象所需内存在类加载完成后就可以完全确定下来,实际上是在Java堆中划分一块定量大小的内存。:假设Java堆中使用过的内存在一边,未使用过的内存在一边,中间有一个指针作为分界点指示器,。Serial、ParNew带压缩整理的的收集器就是采用这种算法。
2024-07-29 17:18:18
1038
原创 JVM—运行时数据区域
主要介绍了运行时数据区的几个关键部分。首先,程序计数器、虚拟机栈、本地方法栈均为线程私有区域。其次,Java堆是线程共享的,用于存储对象和数组;常量池也是堆的一部分。方法区同样是线程共享的,包含运行时常量池和类信息。此外,还介绍了直接内存的使用。最后,列举了常见的内存溢出问题,包括Java堆内存溢出、Java方法区内存溢出以及虚拟机栈溢出等问题。这些概念是理解Java内存管理的重要基础。
2024-07-29 17:11:57
861
原创 【Android】源码解析Activity的结构分析
简单介绍了Activity的结构,以及Activity,Window,View之间的管理。
2024-05-08 21:09:52
1565
2
原创 【设计模式】六大原则详解,每个原则提供代码示例
设计模式的六大原则是面向对象设计中的基本准则,它们有助于编写灵活、可维护、可扩展的代码。这六大原则分别是:单一职责原则(Single Responsibility Principle,SRP)、开放封闭原则(Open/Closed Principle,OCP)、里氏替换原则(Liskov Substitution Principle,LSP)、依赖倒置原则(Dependency Inversion Principle,DIP)、接口隔离原则(Interface Segregation Principle)
2024-02-01 22:04:58
1333
1
原创 【Android】MVC与MVP的区别,MVP网络请求实践
文章介绍了MVP和MVC的区别,使用OKHttp实现MVP模式的网络请求并且尝试使用Rxjava和Retrofit2代替OKHttp。
2023-12-15 16:17:41
1756
原创 【EventBus】EventBus的基本用法
EventBus是一款针对于Android优化的发布-订阅事件总线。它优化了各组件、组件与后台之间的通信,可以用于代替广播实现通信。文章介绍了EventBus的基本使用方法
2023-12-11 23:37:22
2586
原创 【Android】使用ViewPager2实现轮播图效果,手动/自动轮播图
使用ViewPager2实现一个简单的轮播图效果,实现手动/自动轮播图
2023-11-14 20:49:55
4928
1
原创 【Android】ViewPager2和TabLayout协同使用,实现多Fragment页面切换类似于QQ音乐,bilibili效果
ViewPager2和TabLayout协同使用,实现多Fragment页面切换类似于QQ音乐,bilibili效果,实现滑动切换界面的效果
2023-11-14 20:37:45
6734
1
原创 【MMKV】一篇文章带你使用(MMKV--基于 mmap 的高性能通用 key-value 组件)
MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。也是腾讯微信团队使用的技术。本文带你了解MMKV的基本使用方法。
2023-11-08 21:40:01
9534
1
原创 【RxJava】RxJava/RxAndroid的基本使用方法(一)
介绍了RxJava的基本用法,相关概念,事件调度器,Observable、Flowable、Single、Completable、Maybe和Scheduler——调度者、以及基本的操作符
2023-11-06 22:59:58
2137
1
原创 【Ubuntu】ubuntu22.04使用VNC链接服务器远程桌面
本地主要需要一个VNC客户端,用来远程连接服务器端的VNC(在不安装Web版本VNC情况下)。
2023-11-06 11:46:21
7070
原创 【Retrofit2】的基本用法
Retrofit 是一个用于在 Android 应用程序中进行网络请求的开源库。它是由 Square 公司开发的,提供了一种方便的方式来处理 HTTP 请求和响应。Retrofit 可以帮助开发者将 HTTP 请求映射到 Java 接口,并将服务器的响应映射到 Java 对象,从而简化了网络通信的过程。本质还是OkHttp。
2023-11-06 11:43:58
942
原创 【数据结构与算法】递归为什么这么难?一篇文章带你了解递归
美国计算机科学家——彼得·多伊奇(L Peter Deutsch)在《程序员修炼之道》(The Pragmatic Programmer)一书中提到“To Iterate is Human, to Recurse, Divine”——我理解的这句话为:人理解迭代,神理解递归。文章列举了一些递归的经典操作包括:斐波纳契数列、汉诺塔、冒泡排序的递归写法。以及力扣的一些链表的练习题使用递归去完成
2023-10-27 19:00:39
1427
原创 【Kotlin】面向对象基础使用方法(继承、接口、Lambda、空指针检查机制等)
Kotlin面向对象基础使用方法(继承、接口、Lambda、空指针检查机制、数据类、单例类等)
2023-09-11 21:27:57
723
原创 Material Design的基本使用方法、Tollbar、菜单等
Toolbar、DrawerLayout——抽屉布局、悬浮按钮与可交互提示、监听布局、卡片式布局
2023-09-11 14:10:19
1130
原创 【Android】探究Server——Service的基本用法、服务与活动间的通信、服务的生命周期、使用前台服务以及《第一行代码》中后台下载实例的补充(基于android 13)
Service的基本用法、服务的开始与销毁、服务与活动间的通信、服务的生命周期、使用前台服务以及《第一行代码》中后台下载实例的补充(基于android 13)
2023-08-04 10:55:28
1186
原创 【Android】最新版Android13使用Notification,Notification的基本使用和进阶使用
创建一个通知、注册一个渠道、为消息设置点击事件、设置闪烁灯、设置震动、 设置声音、创建富文本通知内容
2023-08-02 21:21:48
8133
11
原创 【Android】多线程编程、异步消息处理机制以及new Handler()被标记为过时的解决办法,解决Handler内存泄漏问题和AsyncTask的基本用法
Android多线程编程、异步消息处理机制以及new Handler()被标记为过时的解决办法,解决Handler内存泄漏问(当Activity被销毁时,如果其中使用的Handler被持有,并且在外部引用它的对象的生命周期之外保持活动状态,这就可能导致内存泄漏。)、AsyncTask的基本用法
2023-08-02 14:49:04
2124
原创 【Android】使用网络技术、WebView的用法、OkHttp的用法、解析XML格式数据(Pull,SAX)、解析JSON格式数据(JSONObject、GSON)
Android使用网络技术、WebView的用法、OkHttp的用法、解析XML格式数据(Pull,SAX)、解析JSON格式数据(JSONObject、GSON)
2023-08-01 09:32:48
471
原创 【Android】《第一行代码》中实现跨程序数据共享中两个应用无法正常交互的权限问题、java.lang.IllegalArgumentException: Unknown URL 异常问题
解决两个应用之间的java.lang.IllegalArgumentException: Unknown URL 异常问题,实现跨应用权限的三种方式。
2023-07-28 10:40:58
289
原创 【Android】探究ContentProvider、运行时申请权限的做法、访问其他程序中的数据、创建自己的ContentProvider、实现跨程序数据共享并且解决存在的权限问题导致无法访问。
探究ContentProvider、运行时申请权限的做法、访问其他程序中的数据、ContentResolver的基本用法、创建自己的ContentProvider、实现跨程序数据共享并且解决存在的权限问题导致无法访问。解决第一行代码中实现跨数据共享的应用。无法访问应用1的问题。
2023-07-28 10:33:46
2429
原创 【android】数据的储存——SharedPreferences储存、SQLite的基本用法
android数据的储存、文件的储存、SharedPreferences储存、获取SharedPreferences对象的两种方式、SQLite的基本用法增删改查
2023-07-26 20:13:46
1921
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人