精华内容
下载资源
问答
  • 并非并且是什么判断
    万次阅读
    2019-12-29 11:56:30

    目录

    •写在前面

    •原子性

    加锁机制


    •写在前面

    进程想要执行任务需要依赖线程,换句话说就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。提到多线程这里要说两个概念,就是串行和并行,搞清楚这个我们才能更好的理解多线程。所谓串行其实是相对于单条线程来执行多个任务来说的,我们就拿下载文件来举个例子,我们下载多个文件,在串行中它是按照一定的顺序去进行下载的,也就是说必须等下载完A之后,才能开始下载B,它们在时间上是不可能发生重叠的。

    要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。要是的对象是线程安全的,需要采用同步机制来协同对对象可变状态的访问,如果无法实现协同,那么可能会导致数据破坏以及其他不该出现的结果。java中的同步机制是关键字synchronized,它提供了独占式的加锁方式,不仅如此还包括volatile类型变量,显式锁Lock以及原子变量。

    单线程近似定义为“所见即所知”,那么定义线程安全性,则当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。一个类在单线程中运行都不正确,那么它肯定是不会是线程安全的。如果正确的实现了某个对象,那么在任何操作中(包括调用对象的公有方法或者对其公有域进行读写操作)都不会违背不变性条件或后验条件。在线程安全类的对象实例上执行的任何串行或并行操作都不会处于无效状态。

    无状态的对象一定是安全的,啥是无状态?这个类既不包括任何域,也不包括任何对其他类中域的引用。举个例子,大多数Servlet都是无状态的,从而极大的降低了在实现Servlet线程安全性时的复杂性,只有当Servlet在处理请求时需要保存一些信息,线程安全性才会成为一个问题。

    •原子性

    其实原子性就是一个不可分割的,我们怎么理解呢?举个例子,当我们在无状态对象中增加一个状态时,会发生什么情况?比我们要计算一个类调用了多少次(这个类可以是Servlet),我们定义一个私有的Long类型的域(命名为count),在方法中没调用一次就将这个值加一(即count++),如下。

       Integer count = 0;
       public void getCount() {
           count ++;
           System.out.println(count);
       }

    由于我们没有对这个类进行任何的同步机制操作,所以这个类是非线程安全的,虽然在单线程环境中能正确运行,但在多线程情况下就会出现问题。我们注意到count++这个操作,这个操作看上去是一个操作,其实这个操作并非原子性的,因为它并不会作为一个不可分割的操作来执行,实际上count++ 包含了三个独立的操作,分为读取count的值,将值加1,然后计算结构写入count中,这是一个“读取-修改-写入”的操作序列,并且其结果依赖于之前的状态。在并发下就会出现问题,我再多线程下跑了上面那段代码,结果如下

    我们可以看到,这里出现了两个26,为什么会出现这种情况,出现这种情况显然表明我们这个方法根本就不是线程安全的,出现这种问题的原因有很多,我们说最常见的一种,就是我们A线程在进入方法后,拿到了count的值,刚把这个值读取出来还没有改变count的值的时候,结果线程B也进来的,那么导致线程A和线程B拿到的count值是一样的。

    在并发编程中,这种由于不恰当的执行时序而出现不正确的结果是一种非常重要的情况,它有一个正式的名字,叫“竞态条件”。竞态条件是啥?当某个计算的正确性取决于多个线程的交替执行时序时,那么就会发生竞态条件,最常见的竞态条件类型就是“先检查后执行”操作,即通过一个可能失效的观察结果来决定下一步的动作。比如首先观察到某个条件为真(例如文件X不存在),然后根据这个观察结果采用相应的动作(创建文件X),但事实上,在你观察到这个结果以及开始创建文件之间,观察结果可能变得无效(另一个线程在这个期间创建了文件X),从而导致各种问题(未预期的异常、数据覆盖、文件被破坏等)。

    与大多数并发错误一样,竞态条件并不总是会产生错误,还需要某种不恰当的执行时序。原子操作是对于访问同一个状态的所有操作(包括该操作本身)来说,这个操作是一个以原子方式执行的操作。而我们前面提到的类似count++的这种操作,叫做复合操作,即包含了一组必须以原子方式执行的操作以确保线程安全性。在实际情况中,应该尽可能的使用现有的线程安全对象来管理类的状态,与非线程安全的对象相比,判断线程安全对象的可能状态及其状态转换情况要更为容易,从而也更容易维护和验证线程安全性。这里值得一提的是,java中给我们弄好了很多原子操作的类型,在这个包下java.util.concurrent.atomic。

    加锁机制

    上面我们说了,我们可以对单个类进行原子性操作,这样可以保证我们程序的安全性,但是,我们想一想,如果当多个原子性的操作同时进行时,而且各个原子性操作之间都存在相互依赖的关系,这种情况下,我们怎么保证程序运行正确(线程安全)?如果还是使用原子性操作的方法,那么我们要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量。

    说到这里,我们就不得不提一下java提供的一种内置的锁机制来支持原子性,即同步代码块(synchronized block),同步代码快包括两部分,一个作为锁的对象引用,一个作为由这个锁保护的代码块。以关键字synchronized来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。每个Java对象都可以用作一个实现同步的锁,这些所被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获得锁,并且在退出同步代码块时自动释放锁,这里要说,获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。值得一提的是,内置锁相当于一种互斥锁,意味着最多只有一个线程能持有这种锁。要注意了,任何一个执行同步代码块的线程,都不能看到有其他线程正在执行由同一锁保护的同步代码块(这里涉及到可见性的问题)。synchronized直接加在方法上,虽然能很方便的解决线程安全的问题,但是也会带来性能低下的问题,所以synchronized怎么使用,也是值得学习的。

    可重入函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

    当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会被阻塞,然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁的操作的粒度是线程,而不是调用。重入的一种实现方式是,为每一个锁关联一个获取计数值和一个所有者线程,当计数值为0时,这个锁就被认为是没有被任何线程持有。当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数值置为1,如果同一个线程再次请求获取这个锁,计数值将递增,而当线程退出同步代码块时,计数器会相应的递减,当计数值为0时,这个锁将被释放。

    到此我们就可以将多个复合操作封装到一个同步代码块中,但是这样是不够的,如果用同步代码块来协调对某个变量的访问,那么在访问这个变量的所有位置上都需要使用同步。而且,当使用锁来协调对某个变量的访问是,在访问变量的所有位置上都要使用同一个锁。而且,并不是只有在写入共享变量时才需要使用同步,对于可能被多个线程同时访问的可变状态变量,在访问它时都需要有同一个锁,这种情况下,我们成状态变量时由这个锁保护的。

    在这里值得一提的是,当使用锁时,你应该清楚代码块中实现的功能,以及在执行该代码块时是否需要很长的时间。无论是执行计算密集的操作,还是在执行某个可能阻塞的操作,如果持有锁的时间过长,那么都会带来活跃性或性能的问题。当执行时间较长的计算或者可能无法快速完成的操作时(例如网络IO或控制台IO),一定不要持有锁。

    更多相关内容
  • 判断推理——逻辑判断

    万次阅读 2020-07-10 21:42:32
    第一节:逻辑判断: 第二节:翻译推理 第三节:组合排列 第四节:日常结论 第五节:逻辑论证 第一节:翻译推理 一、题目特征: 1.题干和选项中出现先比较明显的逻辑关联词(条件关键词…) 2.提问方式是“可以推出”...

    第一节:逻辑判断
    第二节:翻译推理
    第三节:组合排列
    第四节:日常结论
    第五节:逻辑论证

    第一节:翻译推理

    一、题目特征:
    1.题干和选项中出现先比较明显的逻辑关联词(条件关键词…)
    2.提问方式是“可以推出””不能推出“等
    二、解题思维:
    1.先翻译(将体题干中逻辑关联词所在句子翻译成用箭头的形式)
    2.推理

    一、翻译规则之“前推后” 前——>后
    典型关联词:如果…,那么…
    若…则;只要…就…;所有…都…;…一定(必须)…

    例如:如果你能考上公务员,那么我给你买雪糕
    考上公务员---->给你买雪糕
    如果真---->那么真

    二、推理规则之“逆否等价”
    A–>B 等价于 -B–>-A
    口诀:肯前必肯后;否后必否前;否前肯后无必然结论/不确定(可能、可能不)

    如果某人是北京人,那么一定是中国人
    北京人–>中国人
    不是中国人—>不是北京人

    在这里插入图片描述
    答案:C 稳定---->上涨;涨幅较小—>不负面
    在这里插入图片描述
    答案A 上报–>开除;开除–>考核否决;不上报–>作弊愈演愈烈
    作弊不严重–> 上报–>开除–>考核否

    三、翻译规则之“后推前”
    典型关联词:只有…才
    等价关联词:不…不…;除非…否则不…;…是…的基础/假设/前提/关键;…是…的必要/必不可少条件;
    谁必不可少谁放在箭头后面

    例句:只有通过笔试,才能考上公务员
    考上–>通过笔试 等价于 不通过笔试–>没考上

    特殊的:
    除非A否则非B:B—>A
    除非A否则B: -B—>A
    氧气是人生存的必要条件
    人生存的必要条件是氧气
    生存---->氧气(重要的放箭头后面)

    宋文涛离不开钱
    宋文涛—>钱(重要放后面)

    每个人的成功都离不开夜以继日的努力
    成功–>努力(重要的放在后面)

    在这里插入图片描述
    智者–>谦虚 谦虚–>认识到自己的不足 听不进去意见–>认识不到不足
    智者–>谦虚–>认识到自己不足–>听进去意见
    答案:B

    在这里插入图片描述
    不…勿 ---->不 …不… 施于人—>己所欲
    答案:A(选非)

    四、且和或

    A且B:二者都成立
    A或B:二者至少一个成立
    要么A,要么B:二者只有一个成立。(如果都成立就说明为假)

    等价关联词:
    且:和、既…又…、不仅…而且…、…但是…
    或:或者…或者、…和…至少一个
    要么…要么…: …和…只有一个

    我长得帅并且有才华—>我长得帅
    如果这句话为真,可以这么推
    参加国考或者参加省考–>参加省考
    如果这句话为真,也不能这么推,不确定witch那个真 只能推出 省考或者国考

    或的翻译:否1–>1 或关系为真时,否定一项可以得到另一项为真。
    周洁:我不讲课或者不唱歌
    涛哥:你必须讲课
    周洁该怎么办: 讲课否定了不讲课,所以推出另一个为真。 不唱歌
    在这里插入图片描述
    有罪 || 疯子
    有罪—>处死
    疯子—>接受住院
    证据不足—>不应该处死
    答案C 证据不足—>不出四—>无罪 无罪就是疯子—>住院
    在这里插入图片描述
    在这里插入图片描述
    答案C

    五、推理规则之“德摩根定律”
    (1)-(A且B) = -A或-B
    (2)-(A或B) = -A且-B

    我并非聪明又美丽=我或者不聪明或者不美丽
    并非 不想当官也不想发财 = 想当官或者想发财

    在这里插入图片描述
    风险上升^信贷需求不足---->资产荒
    没有陷入资产荒---->风险未上升或者有效信贷需求足
    答案A 对于答案C应该有三种情况

    六、推理方式
    提问方式:一下哪项中的推理形式/结构与题干中的推理形式/结构相同?
    完全跟着学就好
    在这里插入图片描述
    A—>B -B—>-A
    A 和B都是 A—>B 与题意不符
    答案:C
    在这里插入图片描述
    答案D

    翻译推理总结
    翻译:如果那么;只有才
    推理:逆否等价;否1推1(或命题用);摩根定律
    且、或、要么

    第二节 组合排列

    一、特征
    1.题干给出两组及两组以上对象
    2.给出机组对象之间的关系

    一、排除法、代入法
    1.排除法:读一句,排一句
    2.代入法:选项代入题干验证
    题干条件确定优先排除;题干条件不确定尝试代入。
    题干明确告诉都是真的都是假的------条件确定
    题干没有明确告诉都是真的都是假的,比如一半真的----条件不确定
    在这里插入图片描述
    答案C
    方法一:排除法,边读1234边排除选项
    方法二:推理

    参加参加不参加不参加不参加参加

    戊不能参加,由2得,乙必须参加。从而3得,丙不能参加。从而1的甲必须参加。从而4得,丁不能参加

    在这里插入图片描述
    答案D
    方法一:代入
    A代入,第一句都正确了,A排除
    B代入,第一句都错了,B排除
    C代入,第三句都正确了,C排除
    方法二:
    假设第一句前面是正确,后面是错误。
    甲和丰,乙不在团结。那么2中,前半句错误,后半句正确,丙在和丰。-----出现矛盾

    合丰村团结杨梅
    甲、丙

    所以第一句前面是错误,后面是正确
    甲不在和丰,乙在团结。第二句前半部分就错误了,后半句正确丙在和丰。则第三句前面正确,后面错误。

    合丰村团结杨梅

    二、辅助技巧
    1.最大信息(条件出现此处最多的词)
    以此作为推理起点
    2.符号><=
    往往涉及年龄、成绩、收入、身高等大小比较

    在这里插入图片描述
    答案C
    方法一:条件最多的入手
    行政管理多:张不做、王不做、李不做----->赵行政 排除BD
    张 部 研发—> 赵 不行政 == 赵行政—>张研发 排除A
    方法二:
    张 部 研发—> 赵 不行政 == 赵行政—>张研发

    行政销售研发安保
    张(√)
    赵(√)

    行政只有赵一个人,所以赵行政,张研发。那么保安只有王,所以李只能销售。
    在这里插入图片描述
    (1)(2)(3) 甲>乙>丙 >戊>丁(己)
    答案D
    在这里插入图片描述

    12345678910
    历史(非儿童)历史科技科技(非文学)(非儿童)历史

    历史和科技放完了,只剩下儿童和文学。所以非文学就是儿童,6一定是儿童书。
    答案:C
    在这里插入图片描述
    拥有相机的?
    手机 3,电脑2, 相机1。
    有相机的人必须同时有手机和电脑
    4得,甲乙要么都有电脑要么都没有电脑.
    5乙,丙手机情况相同,都有都没有,手机3个,所以乙丙不可能同时没有。那就是同时有。
    6丙丁不同,丙有丁没有。有三部手机,所以甲也有。
    4如果都有,那么电脑一共两个,丙丁都没有,丁又不可能有相机(只有全有的人才能有相机)所以丁全×,不能,所以。甲乙都没电脑。
    所以丙三个都有

    手机电脑相机
    ×
    ×
    ×

    练习
    在这里插入图片描述
    天晴—>拔河
    风大—>不拔河 拔河—>风不大
    不拔河–>演讲
    答案B

    在这里插入图片描述
    答案D
    在这里插入图片描述
    答案A

    第三节 日常结论

    一、题目特征
    题干:类言语、无逻辑关联词
    问题:由此可以推出/不能推出
    在这里插入图片描述鲸鱼有62种,鲸鱼有62类——>属于偷换概念,种和类不是一个概念
    鲸鱼有62种,说海中哺乳动物至少有62种---->属于扩大范围,这种说法是对的。所以扩大范围需要判断。

    警惕:“四大坑王”:更、最、越、首(首要 首先)
    在这里插入图片描述
    答案:C
    ABD选项中都有四大坑王:最
    B:保值切好转手 与 二手车市场不同
    在这里插入图片描述
    答案A
    都是必须,就比较。
    A相对于D更全面,即涉及到APP又涉及到运营商。D只涉及大数据。所以A更好。
    在这里插入图片描述
    我的答案D,正确答案A
    北半球人多,人类活动影响二氧化碳排放
    南半球虽然人少,但也达到了该值
    BC无中生有
    D北极!!!!北半球 偷换概念。 并且 远超这个词太大了。 超过还可以,但是远超不行。
    在这里插入图片描述
    答案B

    在这里插入图片描述
    答案B
    A要么…要么…二选一。 并且第一种不能去清除体内自由基,避免只能减少产生。

    第四节 逻辑论证

    加强题型:赞同
    削弱题型:反对

    加强类
    常见提问方法:
    如果一下各项为真,最能加强、支持、赞同、证明上述论断的是?
    一下哪项为真,是上述论断成立的前提、假设、必要条件

    如果一下各项为真,最不能加强上述论断的是?
    ——有可能是削弱的有可能是无关的。所以直接找加强的排除掉。
    ——如果一个无关一个削弱,选择削弱的。

    一、加强之搭桥(力度最强)

    楼市成交量在增长,因此楼市价格会上涨。 练习:
    1.成交量的增长会带动楼价的上涨
    2.楼市成交量会影响楼市价格

    在这里插入图片描述
    论点:火星有智慧生命
    论据:火星表面的黑暗是海洋,明亮是陆地。---->观测到植被是一个世纪之后的事情,不能是赫歇尔的依据。
    联系:海洋、陆地、生命之间的关系
    因为:植物不是论据,所以排除BD。A 论点推论据,C论据推论点。然后优选:论据推论点
    答案C
    在这里插入图片描述
    答案A
    从选项出发:
    B -工作----> -参加
    D 参加–>工作 BD表述同一个意思
    C 参加—>工作完了。BD表述是一个意思
    A 工作–>参加 与BD不同,所以选A。

    二、加强之补充论据
    1.必要条件:选项为论点成立的必要条件(没他不行)
    提问方式为前提、假设、必要条件且无搭桥选项
    2.解释原因:论点成立的原因
    3.举例支持:论点成立个例

    在这里插入图片描述
    答案B
    在这里插入图片描述
    答案B
    在这里插入图片描述
    答案D
    不同矿物种类可以有相同的化学成分
    A二氧化碳不是矿物
    B变色? 不是化学成分
    C分析化学仪器…跟描述无关
    D

    练习:
    在这里插入图片描述
    答案:B
    AB似乎都不错,但是A讲述的物种,相对朱鹮来说范围扩大了。而且自然淘汰也不一定的事情嘛。
    在这里插入图片描述
    答案D
    选项中出现搭桥项,就不用考虑别的了。

    削弱类:
    如果一下各项为真,最能质疑、反驳、削弱、反对上述论断的是
    如果一下各项为真,最不能质疑上述论断的是

    三、削弱之否定论点(力度最强&最常考)
    选项特征:与论点表述意思相反
    答题技巧:
    1.读题,找论点
    2.自己想论点的反面表述
    3.找相关论述
    在这里插入图片描述
    答案:D
    B答案,牙齿不是骨骼。如果把牙齿换成骨骼就是加强项

    在这里插入图片描述
    边缘运动…说明人少 削弱:玩的人都。
    AB都是厉害,不能证明玩的人多。
    答案C

    在这里插入图片描述
    答案B
    你说E能治,那我就选不能治。

    在这里插入图片描述
    答案:C
    是一个手机电脑的比较过程。
    ABD只提到了一种,没有比较。

    例题:呼吸道感染的人来说,蜂蜜要比止咳药更有效。
    A蜂蜜不能治疗呼吸道感染,只能缓解症状。是可以削弱题干的。

    四、削弱之拆桥
    题型特点:
    1.论据论点话题不一致
    2.提问方法为“削弱论证”是,优先考虑拆桥。
    选项特点:
    同时包含论点和论据中的关键词,并否定论点和论据之间的必然联系。
    在这里插入图片描述
    答案:D
    因为高水准,所以高收视率。在这里插入图片描述
    否定论点:法律不能缓解青少年犯罪,没有这种选项。那就拆桥
    法律纠正-------教育缺失---->犯罪------------家庭教育不是犯罪的唯一

    五、削弱之否定论据
    在这里插入图片描述

    小陶身材很差,所以小涛一定很丑
    论据:身材差 论点:小涛丑
    否定论点:不丑
    拆桥:身材和丑没关系
    否定论据:小涛身材不差

    在这里插入图片描述
    答案B
    论点:不可行
    论据:增加企业负担,增加女性就业难度
    A:应当…(提对策) 这种选项一般不选
    D:应…也是提对策
    在这里插入图片描述
    身体:不能反驳专家观点。
    答案:C
    A:提出一个其他原因 拆桥是拆论点和论据之间的关系,它因是:论点中因果关系
    在这里插入图片描述
    答案:D

    展开全文
  • 对话行癫:CTO 最重要的是判断未来!| 人物志

    万次阅读 多人点赞 2019-09-28 17:38:12
    身兼阿里巴巴集团 CTO、阿里云智能总裁、达摩院院长三职,张建锋(花名行癫)说:「作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。」

    身兼阿里巴巴集团 CTO、阿里云智能总裁、达摩院院长三职,张建锋(花名行癫)说:「作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。」

    作者 | 唐小引
    审校 | 郭 芮
    出品 | CSDN(ID:CSDNnews)

    江湖中流传着一个段子,「如何用一句话证明你在阿里工作?」其中有一句便是「大家拥抱一下变化,因为组织架构调整了。」

    这一点在行癫的身上体现得淋漓尽致,从 2004 年加入阿里至今,行癫起于淘宝网技术部架构师,一路任过淘宝副总裁、中国零售平台负责人、中台事业群总裁,而近几年阿里集团宣布调整组织架构,行癫的名字格外耀眼,2016 年出任集团首席技术官(CTO),2017 年 10 月带着马云期望「活得要比阿里巴巴长」的达摩院成立,行癫就任院长,2018 年 11 月,阿里云升级为阿里云智能,行癫兼任总裁。

    多年的技术与业务融合让行癫比许多技术人都有着更深的沉淀与思考,在 2019 云栖大会上,行癫在接受 CSDN(ID:CSDNnews)的采访时表示,未来一定是「需求牵引,技术驱动」的,阿里巴巴并不是一家做了一个新技术便颠覆一个产业的公司,并且这种机会可以说是相当稀少。最关键的在于,「你怎么看未来的需求、未来技术的趋势,最关键的是两者之间是否能做一个有效结合。」

    而针对技术圈里一直热议不断的 CTO 该不该写代码、CTO 的核心技能话题,行癫说道:「作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。」

    行癫,作者摄于云栖大会
    同时,在阿里云十年之际,以及平头哥不断出新备受关注之时,行癫非常开诚布公地总结了过去十年阿里云对于中国技术商业进步所带来的影响、最新进展与思考,以及他对芯片行业、操作系统的看法,从中可以一窥阿里在技术与业务结合的未来走向。

    以下为访谈实录:

    问:阿里云自升级为阿里云智能以来,主要的变化有哪些?

    行癫: 从定位上来讲,主要有三点。首先,阿里云的形态正在从单一的 IaaS 层基础设施变为全方位的数字经济基础设施,除原来的一个云之外,在 IaaS 层如传统的虚拟机、数据库还需要智能化、移动化、AIoT 的解决方案,来满足数字经济的转型升级。不仅是 IT、AIoT 基础设施,还需要像钉钉一样的协同办公的基础设施、大数据智能化基础设施。比如对于 IoT,不仅是家庭里的电视、空调等设备,也包括城市里路灯、停车位、摄像头等设施、工厂里的设备,以及污水处理、河流保护等,都需要数字化,阿里云智能需要满足的是在整个数字化转型过程中所需的基础设施。

    其次,阿里云智能已经成为集团战略,是阿里巴巴整个经济体的概念,因此也整合了许多资源。以前,我们在零售、金融等方面的传统优势已经升级成立了新零售、新金融部门,同时也成立了数字政府部门,这些都在阿里云智能的体系下,阿里巴巴经济体对外提供的服务统一都基于阿里云智能平台,比如高德地图对于数字政府、数字交通的输出即是基于此。今后,阿里云智能将承载着阿里巴巴经济体的技术输出。

    最后一点,今天我们讲数据中台、业务中台,很多企业都这么搞,这些概念都是从阿里听出来的,但到底怎么理解?数据中台、业务中台究竟解决了什么问题,别人未必和我们想的一样,这里面不仅是技术,还需要有经验、有实践、有方法论。阿里巴巴的云最大的不同就是本身已经在阿里自己的业务里经受了非常多的锤炼,即使是非常好的技术,比如人工智能,都需要产业实践、业务尝试,凭空做一个高质量的云、成为数字经济体的基础,我认为是不太可能的。所以,我们做了一个非常大的决定,那就是阿里经济体中所有的 IT 设施,所有的数据中台全部迁移到阿里云上。

    大概在三四年前,我担任阿里中台事业群总裁时,第一次开启了互联网公司的中台化战略,当时很多人还不知道中台究竟是什么,坦率地讲,我也不知道。马老师让我去干中台,我不知道怎么干,他只说了三个统一 —— 技术统一、数据统一、文化统一,于是我就领了这个任务,开始去探索什么是数据中台,什么是业务中台。

    做了有一两年后,有一次,我跟马老师汇报说,我终于明白什么叫数据中台了,他听了我的汇报后,说我的理解只到了 50%,因为我的汇报里有 50% 是符合他最初的期望的。到今天,我认为阿里基本已经建立起了整个中台体系。所以,没有阿里内部的实践,就给外部提供一个所谓的解决方案,我认为是非常困难的事情。

    问:有哪些正在重点突破的行业?

    行癫: 今天这个行业要突破,就需要应用一些新的技术,用阿里的逻辑来讲,今天有什么样的新技术是可能会对未来带来变革的?是值得、需要投入的?我们需要做很多的技术准备,准备好后还要跟行业做结合。有些行业与技术结合带来的变化会非常大,有些行业却并不如此。当然,我们还需要考虑,这个行业是不是阿里真的有经验的、非常擅长的?

    阿里擅长的技术,相对容易理解,就是云计算、大数据、IoT,以及钉钉等的移动协同,擅长的行业呢?零售、金融、供应链都是阿里所擅长的。这两个因素具备了,我们就会看怎么来定义未来的技术应用。因此,综合来讲,新零售是我们非常重要的一个行业,因为阿里有丰富的经验,对未来有着非常深刻的洞察。

    还有一个至关重要的就是政府的数字化转型。这方面与阿里最大的关系就是,政府数字化转型需要使用到大量的互联网、数字化技术,而且它有大量的数据,运用这些数据会产生大量的成果。在这方面,阿里已经积累了经验,同时政府也信任阿里,所以我们在数字政府上做得非常好。现在,不仅是已经实践成功了的浙江数字政府,诸如国家税务总局,整个个税系统都在阿里云平台上,中国邮政整个生产系统都在云上,是目前阿里云最大的一个集群,超过 5000 台规模。


    △图:阿里展示数字政府架构,作者摄于云栖大会

    再有就是工业互联网,工业互联网不仅是提供算法,还要给客户提供收集数据的能力,由此就需要具备 IoT 的能力了,在实现数据收集的基础上,才能够进一步做智能化的应用。大多数行业都不是规划出来的,而是各种各样的起步与尝试,慢慢地就演变成为一个行业了。

    问:阿里云已经走过十年,下一个十年,阿里云将会做哪些技术准备?

    行癫: 有一点需要强调的是,我们需要「需求牵引,技术驱动」,阿里巴巴并不是一家做了一个新技术然后颠覆了一个产业的公司,这种机会我认为是非常少的。当然,我们与大部分公司相比,还是在做一些非常前瞻性的技术,比如量子计算等,但我认为核心在于,你怎么看未来的需求、未来技术的趋势,最关键的是两者之间是否能做一个有效结合。


    △阿里量子计算进展介绍,作者摄于云栖大会

    大家都知道贝尔实验室做芯片非常成功,但它的产业并不成功,于是没落了。我们今天看到的许多研究机构都在转型,在这之中,微软研究院是非常典型的例子,微软研究院以前相对独立,可以做任何研究,但现在转型力度非常大,要与产业集合,也就有了更明确的方向。

    十年前,王坚博士做云时,跟大部分人的想象是不一样的,第一,如何提供一个全新的大数据处理平台?十年前并没有海量数据,其次,王坚博士坚信,这个世界一定是公共云的世界。今天,阿里云投入的技术更广泛,十年前根本没有现在大数据、AI、IoT、移动化、协同办公的概念,但我们将云智能之后,我们的边界、范围也更宽了。

    问:对于阿里云,最关切的问题是什么?

    行癫: 阿里云已经走过了很长的一段路,从最早的公共云到今天混合云,逐渐变成了很多云项目的解决方案。在公共云时代,王坚博士的想法是做云为什么要销售,十年前我也是如此,因为云是非常简单的产品,一个虚拟机、数据库、存储,可以直接拿来用,而不需要销售和服务。最近两年发生了非常多的变化,因为产品复杂到了一定程度,需要为客户提供一个解决方案。今天我们在阿里巴巴的云上有三百个解决方案,解决方案一定是面向客户的,解决某一类问题。但是解决方案背后是谁提供的很关键,我们称之为「联合解决方案」,因为是和合作伙伴一起提供的。

    这个过程中,阿里云要时刻保持对行业的洞察和理解,要有所为有所不为,这是非常关键的,我们并不是说搞了一堆的合作伙伴,看上去就是你提供顶层设施,给他们提供服务就可以了,这是远远不够的,这样相当于找了一堆集成商来,我们的生态不是集成商,我们的生态是联合解决方案,是我们共同为客户提供服务,这有着本质的区别。

    阿里云面临的最大问题,首先,如何提供一个非常有竞争力的 IaaS、PaaS 产品?这是最关键的,如果没有这个产品,别人为什么要和你做联合解决方案?

    其次,在数字化经济市场,阿里云有没有真正地提供智能化、数字化、移动化、IoT 化的解决方案和产品?再者,阿里云要学会从原来的互联网公司向 ToB 的服务型公司转变,这也是非常关键的。ToB 的客户需要非常好的服务,从咨询、做方案到实施、交付和服务,这是阿里在做公共云时代没有经历过的。

    这三件事是阿里云今后面临的非常大的挑战,也是我们需要补上的功课。

    问:怎么看芯片产业?

    行癫: 芯片是一个很大的名词,它的概念和互联网一样,互联网上有多少应用就有多少芯片。我们往往将芯片的理解单一化了,我们以为英特尔就是芯片,但实际上,你看不见的所有地方都有芯片,手机里就有几十种芯片,因此,芯片实际上是一个非常复杂的产业。

    其次,芯片也是一个非常辛苦的行业,许多人总认为越是高科技就越赚钱,实际上并非如此。许多微小的芯片都是非常廉价的,卖到 1 美金的已经是非常好的一颗芯片了。同时,芯片里有着各种各样的种类,这也就决定了各自的研发周期,如果每一颗都要投入十年研发,不仅会破产,还会跟不上时代发展。但芯片的确需要一个周期,工业界公认的大型芯片大概是两到三年的时间。

    问:现在要做到行业 AI、普惠 AI,最大的难点是什么?

    行癫: AI 本身没有诞生任何新的工业,它是一个赋能的工具,而非单独的产业,这更像是当初发明计算机,计算机是直到互联网产生,才成为一个单独的产业。因此,AI 一定要跟某个产业结合起来,没有结合就是空中楼阁,因为没有载体。AI 到底能不能发挥实效,就看是否能够帮助原有产业中的要素发生变化,带来效率上的提升,这是最根本的。

    今天 AI 到底改变了什么?我认为最大的是感知发生了变化,在第一波 AI 浪潮中的公司,在应用落地上基本都与视觉相关,包括安防类、数字城市类等。哪怕到今天,我认为 AI 中 50% 以上仍是与视觉相关。当前,在 AI 上我们面临的最大的困难就是碎片化,每一个模型都不一样,而最大的不一样,就是行业的不一样。同时,我们并不真正了解需要落地的行业,而他们也不真正了解技术。这种情况下,大家就会抱有不切实际的期望,我们很多项目都是这样,后来才慢慢认清现实。

    所以,我们要反复强调,定义目标是很难的事情,如果能够将目标清晰地定义出来,那么就变成一个技术问题了,技术问题是很容易收敛的,行就是行,不行就是不行,但最困难的是问题很难精准描述、精准定义,并且可以分解。

    第三个困难的地方就是,如何做融合?AI 最终要在产业里成功,一定会有非常多的具有行业知识背景的人进入才能实现,所以下一步的浪潮一定是在产业里 AI 得到深度的应用。

    第四个困难点就是产业一定要发生变化,它可能是多种技术的结合,不仅是使用 AI,可能还有 IoT 等,需要有更强的解决方案能力的人。数字经济真正进入产业界,才能够说明数字经济真正发展起来了。

    但是,我发现数字政府比产业界跑得要快很多,这是为什么?企业不是对市场更灵敏吗?在我们国家,政府有非常强的顶层设计能力,在数字化转型上,顶层设计能够解决很多现实问题,因此产业发展非常快,而数字化转型在政府中,给老百姓也带来了非常大的便利,今天他们服务的水平与能力、治理理念已经比许多企业都要好了。因此,我认为在产业结合上,还有一段路要走,有很多困难需要克服,为什么上云、数字经济转型是我们的一号工程,统筹、硬件的升级都是需要解决的方向。

    问:作为阿里巴巴集团 CTO、阿里云智能总裁、达摩院院长,是如何分配时间的?这三个角色各自有哪些挑战和压力?哪个的压力是最大的?

    行癫: 挑战和压力都很大,没有一个工作是轻松的,这三重角色可能从阿里巴巴技术体系上能够更易于理解。在阿里的技术体系中,产品研发、技术研发和科学研究是分开的,但也有综合,比如达摩院有数据计算,也有数据处理,比如,李飞飞既是阿里云数据库的负责人,但数据库也会碰到一些前瞻性的问题,比如加密数据库、新型数据库,这些从技术上还有不确定性,因此他同时又在达摩院里进行加密数据库的研究,这是一脉相承的。

    达摩院成立时,我问马老师,要不要请一个专职的院长,马老师(马云)说专职的研究院肯定搞不好,他希望研究院跟技术研发体系有非常强的关联。

    达摩院跟上层的产品和业务还是有非常紧密的关系,比如我们金榕老师(阿里巴巴达摩院机器智能实验室主任)在达摩院里做 AI,需要时时刻刻关心应用方,也需要在 AI 研究的基础上做出一个产品平台提供业务使用,也是身兼多职的。


    △达摩院介绍,作者摄于云栖大会

    当然,我们在研究方向上也有相对独立的,跟现有业务没有任何关系的,比如量子计算、自动驾驶等。

    自动驾驶与芯片一样,我们永远不会将自动驾驶作为产品输出给汽车公司,100% 不会做这样的事情。今天,阿里巴巴作为一个物流的基础平台,会产生一亿个包裹需要配送,但市场上还没有任何一辆车是专为物流设计的,也没有任何一辆车是为未来物流准备的,还有饿了么、盒马等的配送。在不久的未来,中国配送网络会达到上亿的规模,因此一定需要像阿里巴巴这样的公司来提出解决方案,我们在研究,未来是否能够有一个办法实现无人配送。

    但是今天我们研究的自动驾驶实际上是机器人,未来是不是能够实现一个无人自动化的设备,能够将货物从一个地方送到另一个地方,这是我们研究自动驾驶最根本的出发点。千万不要按现有角度看未来,从技术到业务的结合才是最关键的。

    也有很多人问达摩院究竟在干什么,怀疑企业建研究院到底有没有必要,因为原有的研究院模式都不成功,所以导致会产生一个天然反应就是阿里是不是也在走过去的研究院机构模式?事实上我们并不是这样的机构,这之中的分工比较容易理解,自然也就能够理解我的角色的定位。

    作为集团的 CTO,我到底干什么?

    CTO 可能是最不用懂技术的人,作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。比如配送,我们需要有什么样的技术做准备?未来的计算到底需要怎样的规模?CTO 要对这个有判断,而并非要在诸如量子计算等方面成为专家。

    对于 CTO 这个角色,阿里 50% 左右的人员都是工程师,怎么构建一个良好的工程师文化,怎么统一工程师的发展、衡量工程师的水平,这里有很多工作要做。阿里有技术委员会、技术小组,我们提倡技术人员的问题自己解决。我们现在有 12 个技术小组,比如贾扬清就是计算组的,他们会在集团范围内看计算当前大家有哪些投入,哪些投入是不必要的,哪些投入是需要合并的,这都是在集团技术委员会的规划下做的事情。

    同时,还有对于人才的培养。阿里集团有三十多家公司,都有 CTO 的角色,当其中一家公司需要 CTO 时,我从哪里去找?这里就需要一个统一的培养机制。

    还有就是阿里内部有一个非常特别的晋升制度,晋升是需要述职的,也需要评委,评委会是技术委员会的技术小组成员,比如候选人是做算法工作的,那么算法组里会有 5 个人来当评委统一处理。

    评委本身也是来自于集团多个技术部门,但同属一个技术小组。阿里巴巴的技术治理体系和其他公司都不一样,作为 CTO,既有物理的,也有非物理的,比如文化、机制等。是不是这样管理的边界就很清晰了?也未必。我们非常鼓励高水平的竞争,最大的价值就是消灭低水平的重复。

    阿里云智能就更简单了,今天有这么多的技术,除却支持好集团业务之外,如何面向行业做好业务输出也需要通盘考虑。

    问:如何评价这十年阿里云为中国技术商业进步产生的影响?

    行癫: 我的确在想这个问题,很多的影响是很难量化的,就好比计算机发明了,谈对于某一个行业有什么影响,就拿制造业来说,计算机对制造业到底造成了什么样的影响,这是很难量化的。

    信息技术、数字化技术也是这样的,很难量化,可以量化的是很小,但影响是非常巨大的。各行各业都产生了一些非常关键性的影响,以消费领域为例,表面来看,好像淘宝、天猫的出现跟零售业没有什么变化,只是多了一个快递送到家里,今天的影响在逐步加深。新消费的概念也是这个逻辑,淘宝一出来,慢慢地影响了制造业,影响了供应链,影响了快递配送,企业间的影响都是物理发生的。

    今天淘宝上 70% 的交易都是花呗付款,这又是一个非常大的影响。因为花呗背后所代表的是信用,有足够多的数据可以来衡量用户的信用。最终这个社会会和数字政府理念一样,技术提供基础,最终打造透明、高效、廉洁的政府,打造全信用化的社会。淘宝的价值只是解决了零售业里非常简单的信任问题,支付宝做担保,淘宝好差评就产生了这么大的价值。如果全社会都解决了信用的问题,那我们社会的运营成本会降的非常低,这背后都要靠技术体系和数据的体系来支撑。

    这样的技术变化非常深刻地改变了零售产业,技术也一样,比如有钉钉和没有钉钉如何来衡量?至少在阿里巴巴内部如果没有钉钉,我们这帮人都不知道怎么搞,还在看邮件,开个会都受到了非常大的影响。很多变化都是不知不觉中造成的影响,云的 IT 基础设施也一样,今天我们很多客户在云上创业,已经不需要关心云的任何问题。比如对于微博而言,在突发热点事件带来数倍流量时,已经能够实现在云上弹性。

    问:阿里的操作系统发布很早,随着平头哥的问世,如何看待当前在这些方面的竞争?

    行癫: 我们是服务客户,并不会去跟别人竞争而存在,我们是面向未来而存在的。

    阿里是最早做操作系统的,至少做了八到九年,而且阿里是第一个量产的操作系统,阿里的手机操作系统出货量到目前为止应该有七八千万台手机的规模,而且现在的日活也有几千万。手机的操作系统阿里是绝对没有问题的,而且在逐渐衍生至其他方面。

    阿里今天做一件事情,比如我们去 EMC、高端存储、数据库等等,我们是提供了新的思路,并不能说我们的数据库比甲骨文好,我们就是提供了解决方案,就是用普通的硬件、用互联网的技术能够构建出一个更强壮的、更面向未来的系统,这是阿里对这个事情的贡献。

    我们以后大量的操作都在云端,新型的操作系统应该是跟云完全融合的,大部分的中心操作都在云端,假如要播放一个电影已经实现全部在云端,要做文档,文档协同也都在云端,这是我们面向未来要做的。

    很多人讲今天为什么我们要取代端上做一个新的东西,以后我们会不会有一个端,是不是手机成为我们办公最主要的端,这是我们需要面向未来构建的系统。有可能所有人都在移动端上都是协同的,所有的操作都是在云端完成的。

    比如 Google 游戏云,我们也在做。做游戏要有一个高配置的电脑,有非常好的显卡。那么,中国什么时候会推出一款超越世界上最好的显卡,因为它有强大的计算力。但今天不用了,云端全部都渲染化了,5G 也有了,以后就用一个显示屏,领先者永远是领先者,落后者永远是落后者,因为他的投入比你大,他的先发优势比你强,你为什么做得比人家好?唯一的原因是你有创新。

    阿里巴巴走到今天,不管是电商、支付宝、云,都是行业的创新者,我们完全是基于自身对未来的判断,基于我们自己对于行业的布局来看待这个问题。

    展开全文
  • JVM如何判断对象能否被回收

    万次阅读 多人点赞 2019-12-16 16:11:57
    就算在可达性分析算法中不可达的对象,也并非一定会回收,这个时候不可达的对象暂时处于暂缓的阶段,一个对象要真正宣告死亡,至少要经历两次标记的过程,当对象进行可达性分析而不可达时,它会被第一次标记并且进行...

    目录

    •写在前面

    •对象的创建

    •引用计数算法

    •可达性分析算法

    •引用

    •不可达必须“死”?

    •最后


    •写在前面

    说起Java和C++,很容易想到让人疯狂的指针,Java使用了内存动态分配和垃圾回收技术,让我们从C++的各种指针问题中摆脱出来,更加专心于业务逻辑,不过如果我们需要深入了解java的JVM相关原理,我们必须要面对这些东西,深入了解JVM在内存动态分配和垃圾回收技术的原理知识,这篇文章就是来做一个先导,在jvm进行垃圾回收之前,它必须要知道回收的对象是否已“死”,这样才能保证程序的正常稳定。

    •对象的创建

    我们将回收对象前,先讲讲在虚拟机上,对象是怎么被创建的。在我们编写代码的角度(语言层面)来看,我们创建一个对象实例,只需要使用new关键词就完事儿了,很简单,不过你享受的简单是因为虚拟机帮你承受了所有繁琐的工作,那虚拟机是怎么工作创建一个对象的呢?

    当虚拟机遇到new指令时,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用(没有类,创建个锤子的对象),并且检查这个符号引用代表的类是否已被加载、解析和初始化过,如果没有,那必须要执行相应的类加载过程。这是第一步,在类加载检查过后,接下来虚拟机将为新生对象分配内存,对象所需的内存大小在类加载完成后便已经完全确定了(这里插一句,如何确定的?这就和对象的内存布局有关了,对象在内存中的布局可以分为3个区域,分别是对象头、实例数据和对齐填充,对象头里面存的是对象自身的运行时数据,比如哈希码、GC分代年龄、锁状态、线程持有的锁、偏向线程ID等等之类的信息,也就是和储存数据无关的额外内存空间,按道理这一块空间应该是固定的,不过在设计上还是被弄成了非固定的数据结构,这样更具不同的类节省空间,不深入不然扯不完,想要可以看另外一篇文章。接下来实例数据就是对象真正储存的有效信息,也是程序代码中所定义的各种类型的字段内容。最后一个对齐填充,顾名思义就是填补空间,因为以HotSpotVM为例,对象的大小必须是8字节的整数倍,所以就靠这个补全),给对象分配空间的任务相当于把一块确定大小的内存从Java堆中划分出来(为啥可以看我另一篇文章,运行时数据区)。

    划分的时候会出现两种情况,第一种就是java堆中的内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间的一边移动对象大小相等的距离,这种分配方式就是“指针碰撞”。第二种情况就是空间不规整,也就是已使用的内存和空闲内存相互交错,这个时候指针碰撞起不来作用,那么这个时候虚拟机必须维护一个列表,记录哪些内存可用,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新相关内存信息,这种方式叫做“空闲列表”。因为创建对象非常频繁,所以会涉及到并发的时候,会出现一个叫做“本地线程分配缓冲”的概念,我这里也不深入,自己去查,哈哈哈。空间分配完成之后,虚拟机需要分配到的内存空间都进行初始化为零值(注意不包括对象头),这样就保证对象的实例字段在java代码中可以不赋初始值就直接使用。最后虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息,对象的哈希码、对象的GC分代等信息。到此,对于虚拟机来说,对象创建完毕。

    •引用计数算法

    引用计数是一个很好理解的概念,就是给对象添加一个引用计数器,每当有一个地方引用这个对象时,计数器值加1,每当一个引用失效时,计数器减1,任何时刻计数器为0的对象就是不可能再被使用的。是不是很好理解,而且判定对象是否可用效率很高,在大部分时候它是一个很不错的算法,不过要注意,是大部分时候。在java虚拟机中,并没有使用这个算法来管理内存,其中最主要的原因就是它很难解决对象之间循环引用的问题。来,举个例子来理解,比如现在有两个对象objectA和objectB都有字段instance,赋值让objectA.instance = objectB, objectB.instance = objectA,除此之外没有任何其他引用,实际上这两个对象已经不可能再被访问了,但是因为它们两个互相引用这对方,导致它们的引用计数不为0,则算法不能通知GC收集器回收它们。所以这种算法不适合在虚拟机上使用,但是并不是说这个算法很垃圾,它可是在其他方面有很多著名的案例。

    •可达性分析算法

    JVM的主流实现是可达性分析,可达性分析在概念上其实也不难理解,它的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时(图论里面专业一点来说,就是从GC Roots到这个对象不可达),则证明对象是不可用的,大致可以像下图理解。

    那么哪些对象可以作为GC Roots对象呢?在java中大致有如下几种:

    •虚拟机栈(栈帧中的本地变量表)中引用的对象;(不知道栈帧是啥的看我另一篇文章,运行时数据区

    •方法区中类静态属性引用的对象;

    •方法区常量引用的对象;

    •本地方法栈中JNI(即一般说的Native方法)引用的对象;

    •引用

    引用是啥?搞过C++的我们第一反应就会回答,如果reference类型的数据中储存的数值代表的是另一个内存的起始地址,就称这块内存代表着一个引用。这种定义没有错,不过太狭隘了,一个对象在这种定义下只能被引用或者没有被引用两种状态,显然在回收中不足以应付碰到的情况。所以,java对引用概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种,这四种引用强度一次逐渐减弱。

    •强引用,就是指在程序代码之中普遍存在的,类似A a = new A()这样的引用,只要强引用存在,垃圾回收器就不会回收掉被引用的对象;

    •软引用,用来描述一些还有用但并非必须的对象,对于软引用的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会出现内存溢出异常;

    •弱引用,也是用来描述非必需的对象,但是它的强度比软引用更弱,被弱引用关联的对象只能生存到下一次回收发生之前,当垃圾回收器工作时,无论当前内存是否足够,都会回收掉;

    •虚引用,它是最弱的一种引用关系,一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用取得一个对象实例、为一个对象设置引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。

    •不可达必须“死”?

    其实在实际中,就算在可达性分析算法中不可达的对象,也并非一定会回收,这个时候不可达的对象暂时处于暂缓的阶段,一个对象要真正宣告死亡,至少要经历两次标记的过程,当对象进行可达性分析而不可达时,它会被第一次标记并且进行一次筛选,筛选条件是这个对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被调用过了,虚拟机将会把这两种情况视为没有必要执行finalize。当对象被判定有必要执行finalize时,对象将会被放置在一个叫做F-Queue的队列中,并在稍后的一个由虚拟机自动建立的、优先级低的一个Finalizer线程去出发这些对象的finalize(要注意的是,虚拟机并不承诺会等待这些对象finalize方法执行结束,这是因为如果一个对象的finalize方法执行缓慢、或者发生死循环,将导致F-Queue队列其他对象处于永久等待,甚至导致内存回收系统崩溃)。finalize是对象逃脱回收的最后一次机会,GC会将F-Queue中的对象进行第二次小规模的标记,如果对象在finalize中重新和引用链连上了,那么就被移出回收集合,没有逃脱则将会被回收(要记住哦,对象的finalize只能被执行一次,也就是说当对象通过finalize逃脱回收之后,下一次如果再被可达性分析标记,那么就逃不了了)。

    •最后

    其实很多时候我们谈论回收都在java堆上进行的,上面对象实例都是在java堆上进行的,很少谈及方法区的回收,因为方法区(一般被称为永久代)中的回收条件很苛刻,比如在java堆上进行回收可以达到70%-95%的空间,在方法区却低很低,但并不代表方法区不能有垃圾回收,Java虚拟机规范中,只是说可以不要求在方法区实现回收机制。

    展开全文
  • 2) 负判断的逻辑形式:并非P 或者 ¬P  Ⅰ. 肢判断P : 这个P可以是任何类型的判断。  Ⅱ. 联结项: “并非” 或 “¬”   3) 负判断的常用联结词:  “非…” 、”…是假的”、”不是…”等,都是并非的...
  • 序数是什么

    千次阅读 2021-01-14 15:35:11
    对于 ,我们称之为二元关系,即两个变元(a和b可取任意值)之间的一种关系。若 且 蕴含着 ,则称该关系是...但是,二元关系并非都是传递的。比如世界杯比赛就日常爆冷门,a 胜过 b,b 胜过 c,并不意味着 a 照样能胜...
  • Java及JVM是如何识别重载、重写方法的?

    千次阅读 多人点赞 2021-12-21 00:46:10
    因此,某些文章将 重载称为静态绑定(static binding)或编译时多态(compile-time polymorphism) 重写称为动态绑定(dynamic binding) 这说法在JVM语境下并非完全正确,因为某类中的重载方法可能被它的子类重写,...
  •   reordering更新算法的原理就是这样,它非常简单,然而如果你试着操作一下,比如用packetdrill等工具去复现以上的原理,就会发现事情并非如上述那般单纯,这是为什么?   TCP是作为整体运作的,没有任何一个...
  • 现如今,瓜子脸是最受欢迎的脸型,但瓜子脸并非女性专利,瓜子脸男明星或模特十分上镜,吴奇隆、韩庚、宋承宪就拥有一张令人羡慕的精致小脸。一起来看下帅哥标准的五官脸型是什么样的?一、内脸型内脸型人的五官都朝...
  • 判断指定App是否位于前台的方法

    千次阅读 2016-03-08 09:57:08
    提供6种方法来判断App处于前台还是后台,并且封装成工具类供大家使用 最后一种方法堪称Android黑科技(非原创),既可以突破Android5.0以上的权限封锁,获取任意前台App的包名,又不需要权限,欢迎大家star我的新...
  • 原文:http://p.codekk.com/detail/Android/wenmingvs/AndroidProcess AndroidProcess ... 简介:判断指定 App 是否位于前台的方法 标签:getRunningTask替代-判断应用是否在前台-获取程序使用信息- 提供 6 种...
  • 请思考 小结: 三、Manacher原理 假设遍历到位置i,如何操作呢 四、代码及复杂度分析 前缀树 后缀树/后缀数组 后缀树:后缀树,就是把一串字符的所有后缀保存并且压缩的字典树。 相对于字典树来说,后缀树并不是针对...
  • Android | 判断App处于前台还是后台的方案

    万次阅读 多人点赞 2018-01-18 21:24:30
    很多场景下,都需要判断某个App处于前台还是后台。本文集网上编写的前台判断方案于一体。 目前,有6种方案: 方法 判断原理 需要权限 可以判断其他应用位于前台 特点 ① RunningTask ...
  • 在Stack Overflow上看到了这样的一个帖子,觉得挺值得学习的,这个帖子是关于讨论为什么处理排序数组比处理未排序数组快?看完后面的回答,然后得到了一个概念,就是“分支预测”,然后针对分支预测查看了许多资料和...
  • 如果你希望为TensorFlow保存一个能够用于产品用的模型,并且这个模型能够被C/C++/Java/NodeJS等调用(类似Caffe模型),你需要了解GraphDef。用GraphDef方式保存的模型是一个独立地Protobuf文件,看一下维基百科对...
  • 1,wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要...
  • 从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关...本篇文章将分享《人工智能狂潮》书籍内容,包括人工智能的应用和什么是人工智能,结合作者的理解分享人工智能原理及基础知识,希望对您有所帮助!
  • 那么作为普通用户的我们又应该怎么判断网站是否安装了ssl证书呢? ssl证书归根结底是一种网络协议证书,网站安装ssl证书需要相应的申请、审核过程,当审核通过并且获得ssl证书后,网站对其进行安装。而ssl证书安装...
  • tcp 服务端如何判断客户端断开连接

    千次阅读 2019-06-25 15:57:47
    例如,如果正好在某个中间路由器崩溃、重启的时候发送存活探测,TCP就将会认为客户端主机已经崩溃,但事实并非如此。 一些服务器应用程序可能代表客户端占用资源,它们需要知道客户端主机是否崩溃。存活定时器...
  • (1)在这之前我们先来理解什么是结构化图:由顺序结构、选择(分支)结构和循环结构三种基本结构组成,也仅以这三种结构作为基本单元,同时规定基本结构之间可以并列和互相包含,不允许交叉和从一个结...
  • 什么是CSRF

    万次阅读 多人点赞 2021-03-03 10:37:25
    1、CSRF是什么? 2、CSRF漏洞检测 3、防御CSRF攻击: 3.1、验证 HTTP Referer 字段 3.2、在请求地址中添加 token 并验证 3.3、在 HTTP 头中自定义属性并验证 1、CSRF是什么? CSRF(Cross-site request ...
  • 什么是布隆过滤器?如何使用?

    万次阅读 多人点赞 2022-02-07 15:56:38
    布隆过滤器可以用于检索一个元素是否在一个集合中如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是...
  • 一种半可靠的方法来测试一个数字是否等于 NaN,是使用内置函数 isNaN(),但即使使用 isNaN() 依然并非是一个完美的解决方案。  一个更好的解决办法是使用 value !== value,如果值等于NaN,只会产生true。因为...
  • 集成电路布图设计独创性判断标准

    千次阅读 2018-10-31 11:02:28
    中国《集成电路布图设计保护条例》第四条规定:“受保护的集成电路布图设计应当具有独创性,即该集成电路布图设计是创作者自己智力劳动成果,并且在其创作时该集成电路布图设计在集成电路布图设计创作者和集成电路...
  • 过滤标识符并非难事,因为这些标识符都有一定的规则,只要按照不同的标识符取得相应的信息即可。但在识别这些信息的时候,需要同步记录许多版式信息,例如文字的字体大小、是否是标题、是否是加粗显示、是否是页面的...
  • RPA是干什么的?

    万次阅读 2020-09-18 12:56:06
    一句话让你明白这个技术是什么,一种模拟电脑鼠标键盘操作且可以代替人进行重复性、规则化电脑端操作的技术,展开想象会发现能够应用在公司各个部门各个业务线,简单整理如下: 感觉还是很迷糊? 钉钉跟客户发...
  • 什么是图灵完备性(Turing complete)?

    万次阅读 多人点赞 2020-10-18 20:09:25
    作者:Ran C ...来源:知乎 著作权归作者所有。...什么是图灵机 图灵机可以解决什么问题 什么是图灵完备 直观理解图灵完备——Brainfuck语言 1. 什么是图灵机 图灵机(Turing Machine)是图灵在1936年发表的 "On .
  • js检测判断链接是否有效

    万次阅读 2016-12-12 00:33:27
    js检测判断链接是否有效 一般使用 ajax 是在前台向后台传递命令而执行的,命令执行成功与否可以通过 ajax 的 success:function(data){} 和 error:fuction(data){} 返回的 data 作判断,但今天在项目上却遇到了一种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,108
精华内容 52,043
热门标签
关键字:

并非并且是什么判断