没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
技术点总结
java
、接口和抽象类的区别
抽象类表示的是一种继承关系, 支持单继承。但是,一个类可以实现多个接口。
抽象类中可以有自己的数据成员,也可以有非 的成员方法,而在 中,
只能有静态的不能修改的数据成员,也就是 的。
接口中定义的方法都是 的
抽象类可以有非 的方法,它的子类可以有选择的重写部分方法
、自动装箱、拆箱
参考资料
! " 自 动 装 箱 , 基 本 类 型 转 对 象 类 型 , 调 用 相 应 的 #$% 方 法
&"'(
" ! 自 动 拆 箱 , 对 象 类 型 转 基 本 类 型 , 调 用 相 应 的 )$% 等 方 法
*&+,"-"./*
临界值 012312,该机制会自动缓存,如果声明的 " 在此区间,会自动使用
这个区间的对象,/ 的其他类型不适用。如:
"24
"24
+&$22%4
"204
"(204
+&$22(%4
/2 (4
/2 (4
+&$22%4
"3"2"$%4
"3"2"$%4
+&$3"223"%4没有发生自动装箱和拆箱操作
注意自动装箱的使用,使用不当,可能会造成内存的消耗和增加垃圾回收的压力。如:
"254
.$2541555466%7
624
8
上述会产生 55 个无用的 " 对象,这些对象我们也没有用到。
、 各个参数、垃圾回收机制的几种算法优缺点
95初始堆内存
935最大堆内存
99:3;+<=>最大永久区内存,默认是 =>:*
99;+<=初始永久区内存,也可以叫方法区,存放类的元信息
9线程栈内存,每个线程私有的内存空间
99+?(2设置 (和 的比例
99@?(2设置老年代和新生代的比例
9=设置新生代的大小为 =:*
引用计数器:
每个对象都分配一个引用的计数器,6 或者 ,当为 5 时,即此对象不再被使用。
缺点:无法处理循环引用的情况。每次引用产生和消除时,都伴随着加法和减法的操
作,影响系统性能。
标记清除法:
标记:从根节点开始标记所有可达对象;清除:未被标记的对象均可以清除。缺
点:可能产生空间碎片。回收后的空间是不连续的。
深入一些:什么是根节点??
可以作为根节点的是:
、虚拟机栈(栈帧中的本地变量表)引用的对象
、本地方法栈中 A@(即一般说的 @ 方法)引用的对象
B、方法区中类静态属性引用的对象
>、方法区中常量引用的对象
标记压缩法:
在标记清除算法基础上增加了异步压缩的操作,避免了空间碎片的产生。将可达
对象移动到另一边,边界外的全部清除。
复制算法(新生代 ):
( 区(伊甸园,对象刚开始生成的分配位置,5$%$%两块大小相同的区域)
将内存折半。从根节点开始,被使用的对象全部复制到另一块未被使用的内存中,其
他的全部清除,完成是 5 和 角色的转变,每次只使用其中一个区域。
分代算法:
新生代适合复制算法,老年代适合标记压缩法或标记清除法
分区算法:
将对空间分成若干个区间,为了更好的控制停顿时间,每次只进行部分区间的回
收
对象的年龄:
方法区:
年轻代:
存放刚刚产生的对象,或者经过垃圾回收次数不多的对象。朝生夕死。
老年代:
存放经历过多次未被回收的对象
永久区( 去掉了这个概念,改为元数据 )
!!"#$%%&%'(!)*
+,,-.(,/老年代的使用率达到 05C时启动 ,:+ 垃圾回收
器。通常配合01+,,--! 使用,即:总是使用上述定义的阈值启
动 ,:+ 垃圾回收器。如果不配置,则只是第一次使用此阈值启动 ,:+ 回收器,之后都是自
动计算出来的
2、线程、线程池
实现线程有 种方法:
继承 D( 类,重写 方法,启动线程是调用 $%方法。
实现 ? 接口
实现 ,1D!接口,线程异步执行可以有返回值
,,1+"!7
+"$%E37
FF4
8
($+"GH"%7
,2,$%4
E3+3+2E3.3(D(;$%4
.1+"!23+$%4
&7
+&$"$%%4
8$E3%7
8&7
3+($%4
8
8
8
线程池:
D(;E3 类的构造方法为:
D(;E3$;+<I
3;+<I
"JKDI
DLI
*J"M1?!JM%7
$;+<I3;+<IJKDIIJMI
E3(D(.&$%I(N(%4
8
;+<为核心线程数目
3;+<最大线程数
JKD线程空闲最长时间。超过此时间该线程会被回收
L时间单位
*J"M阻塞队列
调用线程池的 $%方法或者 3$%方法的流程为:
一、线程池预热。
如果线程数量没有达到 ;+<,则创建线程。知道达到为止,则预热结束
二、预热完成后,则向队列中存储任务。(核心线程执行完毕当前任务时,会从队列
中获取任务)。
三、如果队列满了。如果线程数量还没有达到 3;+<,则创建新的线程。
四、若队列满了,且线程数量已经达到了 3;+<。此时若没有空闲的线程
可以处理新的任务,则交给拒绝的机制$?(E3N(%进行处理。
K; 提供了几种线程池的实现:
E3+3+2E3+"D(E3$%4 创建单个线程
;+< : , 3;+< : , JKD : 5- , L :
DL:--+E,#@/+I*J"M-J(*J"M
,(D(;$%4 自 适 应 线 程 数 。 ;+< : 5 , 3;+< :
":K9O)K-LE , JKD : =5- , L :
DL+E,#@/+I*J"M+&M
.3(D(;$ D(%4 固 定 大 小 的 线 程 池 。 (3! : #&() ,
4443! : #&() , 56!#4 % : 78 , 1 :
#419:-;<%%%%%%%%%%=>!5?85)>!5?
@、方法重载方法重写
方法重载I(
同一个类中,方法名相同,参数(类型、顺序、个数)或返回值不同
方法重写I
存在继承关系的类(父类和子类),方法名、参数都相同。子类重写父类的实现
7、#&()8!
D(- 为 解 决 多 线 程 程 序 的 并 发 问 题 提 供 了 一 种 新 的 思 路 。 当 使 用
D(- 维护变量时,D(- 为每个使用该变量的线程维护了一套独立的变量
副本,所以每一个线程都可以独立的改变自己的副本,而不会影响到其他线程的副本。
当一个线程执行完毕之后,(- 里面存储的这个线程的副本信息,会在
P, 的时候被清除掉。详见资料:"(QRR(>B=
缺点:可能会造成内存泄漏。
详见资料:"(QRR(>B=
A、静态块
+78静态块。类加载时会执行且只会执行一次。一般用来初始化静态变量和执
行静态方法。
类加载:,@$%4,@$%4B调用类的静态方法4>调用类的静态
变量
、封装、继承和多态
封装:把类的属性和行为结合成一个独立的单位,并尽可能的隐蔽类的内部实现,
对外只提供有限的接口使之与外部进行联系。封装的特性使类以外的部分不能随意的
存取类的内部数据,保证了内部的数据不受外部的干扰。
继承: 支持单继承,即一个子类只能有一个父类。继承是实现代码复用的一
种重要的手段。子类继承父类的所有属性和方法,但是其可见性,由父类的成员变量、
修饰符决定。
; 修饰的变量和方法,子类是不可见的。
对于默认的修饰符修饰的变量和方法,子类只有和父类在同一个包中时,才能够
访问。
; 和 ( 修饰的,所有的子类都可以访问
子类可以声明和父类相同的成员变量,这时父类的变量被隐藏起来,子类中直接
访问到的是子类的成员变量。
子类可以声明和父类相同的方法,此时为方法覆盖$重写%
多态:
父类的引用指向子类的实现。
多态分为两种:编译时多态(方法重载) 和 运行时多态(方法重写)。编译时
多态是在编译器,根据调用的方式决定的。运行时多态,是在程序运行时,根据引用
指向的对象决定的。
剩余47页未读,继续阅读
资源评论
雁听雨
- 粉丝: 9
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 冯璐阳 42105650—祝福.docx
- 基于多种算法及改进算法实现的移动机器人路径规划matlab源码(含A星算法+PRM+RRT的改进等).zip
- 布里斯托尔纸细分市场、总体规模、先进性、市占率行业分析报告2024年.docx
- Obi绳子插件,好用的很 6.5.4版本
- openjfx-22.0.1-windows-x64-bin-sdk.zip
- 基于ros和stm32f1的小车代码(含串口通信)+项目说明.zip
- 人体姿态估计-基于Tensorflow实现的人体姿态估计算法-附项目源码-优质项目分享.zip
- java实现所有算法大全
- JDBC DAO模式 (复习)
- Proteus仿真AT89C51电子密码锁
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功