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
Rust初识 Rust——一门赋予每个人构建可靠且高效软件能力的语言。 Rust编译器教你写代码! 为什么选择Rust? 高性能:速度惊人且内存利用率极高 可靠性:保证内存安全和线程安全,可以在编译期消除各种各样的错误。 生产力:出色的文档,友好的编译器和清晰的错误提示信息 安装Rust以下皆以mac OS平台为主 12345# 下载脚本并安装rustup工具curl --proto '=https' - 2023-02-26 Rust
WebRTC相关记录 WebRTC连接流程 当前采用服务端框架为 LiCode WebRTC通话原理及相关概念媒体协商 彼此了解对方支持的媒体格式 SDP参数含义网络协商WebRTC源码相关WebRTC业务SDK功能1.消息推送(语音电话提醒、新消息接收、对方挂断、支持拓展额外参数) 2.本地长连接(WebRTC dataChannel、保活) 3.语音通话(音频采集、降噪、回声消除、静音) 4.各种状态封装(连接 2020-08-06 WebRTC