Java应急 知识

2 篇文章 0 订阅
  1. 通配符相关:
    首先我们要明白类型擦出是怎么回事,也就是说,类型的确定是编译时确定的;编译时发现你往里存的对象有问题就报错;如果运行了你通过反射强制向里面添加元素其实是随便的;
    < T >表示某种类型,比如Integer;< ? >表示不知道具体那种类型;< T >简单啊,你添加,读取都是T类型;?呢,不知道是哪种类型,能放进去吗?显然不能啊,你总不能把电视和地球放在一起把,这样会很奇怪;但是?读取,就会很方便,因为集合里已经有了这么一些东西,我管它是啥呢,拿出来就好了;
    以这种思想,我们来看一下上下界通配符;
    < ? extend A> 也就是T是个A的子类,那是哪个呢?很显然,你没办法向里面储存A的全部子类吧;比如T是个A的其中大儿子的儿子;那么A小儿子的儿子,很显然存不进去的嘛;但是反过来我不管T是哪个类,它总可以向上转型为A,所以就可以读取并转型为A;(不可转型为A的子类);
    < ? super B> 就是说T是B得一个父类,那么很显然的,存什么我都可以把它转型为T嘛,因为T是B的父类嘛;但是当你读取的时候,T?B的父类,那是个什么玩意,到底是父亲,还是爷爷,还是Object呢?所以无法读取;除非你读取转型为Object;

  2. 线程的状态

    1. 正常运行的一种状态
    2. 阻塞掉了,阻塞就分为三种了,一种是等待阻塞wait,就是等待有人唤醒了,一种是同步阻塞,等待锁的到来(线程当前活着呢);一种就是io请求啊,sleep啊,还有就是join方法;
    3. 对于运行来说,加上cpu的话,就有正在运行,和时间片用完,在外面的等待的情况;
  3. sleep和wait的区别

    1. sleep是线程类Thread的方法,wait是Object的;
    2. sleep是占着锁睡觉的,wait是会释放锁的;
    3. 一个是线程主动睡觉,另一个则是线程中的对象需要等待;
  4. Synchronized与Lock锁的区别
    1. Lock的粒度更小,可以尝试获取一下锁,尝试获取一段时间,如果你没有得到锁的话,也可以做别的事情
    2. 当线程非常多的时候,Lock更加好用;
  5. gc相关
    1. 几种gc的算法:标记法,对象有一个引用就计数1,如果计数为0的话,就可以回收了;根搜索标记清除,从根开始访问对象,给那些能访问到的标记,剩下的清除;复制算法,从一个区域移到另一个区域,这样没有移动的,就是死掉的对象;标记-整理算法,简单的说,就是先标记,然后向前移动,这样,另一端的肯定是死翘翘的对象;
    2. 新生代的gc算法;先是伊甸园,然后是两个存活区;在没有满的情况,一个向另一个复制就是复制清除算法,剩下的使用标记-清楚;这叫做minor gc算法;
    3. 年老代,如果新生代地方不够,就转移那些还活着的,放在年老代里;使用标记-整理清楚,叫做full gc /major gc;
    4. 持久代,几乎不死的那种,使用标记-整理;
  6. 何时gc
    1. 伊甸园不够,就开始minor jc;
    2. 老年代不够了;
    3. 持久代不够了
    4. 新生代上传到老年代过来的对象太大;
  7. 7.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值