首页 文章 精选 留言 我的

精选列表

搜索[CEL策略],共10000篇文章
优秀的个人博客,低调大师

深入理解 Java 虚拟机【3】垃圾收集策略与算法

程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分内存。 判定对象是否存活若一个对象不被任何对象或变量引用,那么它就是无效对象,需要被回收。 引用计数法在对象头维护着一个 counter 计数器,对象被引用一次则计数器 +1;若引用失效则计数器 -1。当计数器为 0 时,就认为该对象无效了。 引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法。但是主流的 Java 虚拟机里没有选用引用计数算法来管理内存,主要是因为它很难解决对象之间循环引用的问题。 举个栗子对象 objA 和 objB 都有字段 instance,令 objA.instance = objB 并且 objB.instance = objA,由于它们互相引用着对方,导致它们的引用计数都不为 0,于是引用计数算法无法通知 GC 收集器回收它们。 可达性分析法所有和 GC Roots 直接或间接关联的对象都是有效对象,和 GC Roots 没有关联的对象就是无效对象。 GC Roots 是指:Java 虚拟机栈(栈帧中的本地变量表)中引用的对象本地方法栈中引用的对象方法区中常量引用的对象方法区中类静态属性引用的对象GC Roots 并不包括堆中对象所引用的对象,这样就不会有循环引用的问题。 引用的种类判定对象是否存活与“引用”有关。在 JDK 1.2 以前,Java 中的引用定义很传统,一个对象只有被引用或者没有被引用两种状态,我们希望能描述这一类对象:当内存空间还足够时,则保留在内存中;如果内存空间在进行垃圾手收集后还是非常紧张,则可以抛弃这些对象。很多系统的缓存功能都符合这样的应用场景。 在 JDK 1.2 之后,Java 对引用的概念进行了扩充,将引用分为了以下四种: 强引用(Strong Reference)类似 "Object obj = new Object()" 这类的引用,就是强引用,只要强引用存在,垃圾收集器永远不会回收被引用的对象。 软引用(Soft Reference)软引用是用来描述一些有用但并非必需的对象,j就是说,内存足够时留着它们,内存即将发生溢出时把这些对象列入回收范围进行回收。若回收过后还没有足够的内存,才抛出内存溢出异常。 弱引用(Weak Reference)弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些。当 JVM 进行垃圾回收时,无论内存是否充足,都会回收被软引用关联的对象。 虚引用(Phantom Reference)虚引用也称幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。 回收堆中无效对象对于可达性分析中不可达的对象,也并不是没有存活的可能。 判定 finalize() 是否有必要执行JVM 会判断此对象是否有必要执行 finalize() 方法,如果对象没有覆盖 finalize() 方法,或者 finalize() 方法已经被虚拟机调用过,那么视为“没有必要执行”。那么对象基本上就真的被回收了。 如果对象被判定为有必要执行 finalize() 方法,那么对象会被放入一个 F-Queue 队列中,虚拟机会以较低的优先级执行这些 finalize()方法,但不会确保所有的 finalize() 方法都会执行结束。如果 finalize() 方法出现耗时操作,虚拟机就直接停止指向该方法,将对象清除。 对象重生或死亡如果在执行 finalize() 方法时,将 this 赋给了某一个引用,那么该对象就重生了。如果没有,那么就会被垃圾收集器清除。 任何一个对象的 finalize() 方法只会被系统自动调用一次,如果对象面临下一次回收,它的 finalize() 方法不会被再次执行,想继续在 finalize() 中自救就失效了。 回收方法区内存方法区中存放生命周期较长的类信息、常量、静态变量,每次垃圾收集只有少量的垃圾被清除。方法区中主要清除两种垃圾:废弃常量无用的类 判定废弃常量只要常量池中的常量不被任何变量或对象引用,那么这些常量就会被清除掉。比如,一个字符串 "bingo" 进入了常量池,但是当前系统没有任何一个 String 对象引用常量池中的 "bingo" 常量,也没有其它地方引用这个字面量,必要的话,"bingo"常量会被清理出常量池。 判定无用的类判定一个类是否是“无用的类”,条件较为苛刻:该类的所有对象都已经被清除加载该类的 ClassLoader 已经被回收该类的 java.lang.Class 对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。 一个类被虚拟机加载进方法区,那么在堆中就会有一个代表该类的对象:java.lang.Class。这个对象在类被加载进方法区时创建,在方法区该类被删除时清除。 垃圾收集算法学会了如何判定无效对象、无用类、废弃常量之后,剩余工作就是回收这些垃圾。常见的垃圾收集算法有以下几个: 标记-清除算法判断哪些数据需要清除,并对它们进行标记,然后清除被标记的数据。 这种方法有两个不足:效率问题:标记和清除两个过程的效率都不高。空间问题:标记清除之后会产生大量不连续的内存碎片,碎片太多可能导致以后需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。 复制算法(新生代)为了解决效率问题,“复制”收集算法出现了。它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完,需要进行垃圾收集时,就将存活者的对象复制到另一块上面,然后将第一块内存全部清除。这种算法有优有劣:优点:不会有内存碎片的问题。缺点:内存缩小为原来的一半,浪费空间。 为了解决空间利用率问题,可以将内存分为三块: Eden、From Survivor、To Survivor,比例是 8:1:1,每次使用 Eden 和其中一块 Survivor。回收时,将 Eden 和 Survivor 中还存活的对象一次性复制到另外一块 Survivor 空间上,最后清理掉 Eden 和刚才使用的 Survivor 空间。这样只有 10% 的内存被浪费。 但是我们无法保证每次回收都只有不多于 10% 的对象存活,当 Survivor 空间不够,需要依赖其他内存(指老年代)进行分配担保。 分配担保为对象分配内存空间时,如果 Eden+Survivor 中空闲区域无法装下该对象,会触发 MinorGC 进行垃圾收集。但如果 Minor GC 过后依然有超过 10% 的对象存活,这样存活的对象直接通过分配担保机制进入老年代,然后再将新对象存入 Eden 区。 标记-整理算法(老年代)在回收垃圾前,首先将废弃对象做上标记,然后将未标记的对象移到一边,最后清空另一边区域即可。 这是一种老年代的垃圾收集算法。老年代的对象一般寿命比较长,因此每次垃圾回收会有大量对象存活,如果采用复制算法,每次需要复制大量存活的对象,效率很低。 分代收集算法根据对象存活周期的不同,将内存划分为几块。一般是把 Java 堆分为新生代和老年代,针对各个年代的特点采用最适当的收集算法。新生代:复制算法老年代:标记-清除算法、标记-整理算法 原文发布时间为:2018-07-19本文作者:杨立滨本文来自云栖社区合作伙伴“Java知音”,了解相关信息可以关注“Java知音”

优秀的个人博客,低调大师

如何在私有/混合/原生云上选择正确的数据保护策略

公共云是存储大量数据的简便方法,适合大多数公司进行备份和数据保护。事实上,业内领先分析师公司预测,到2017年底,62%的企业都将在公共云上部署应用和服务,其中绝大多数集中在数据存储和防护上。 然而,基于磁盘的数据中心存储,也可以是价廉物美的解决方案。虽然数据防护的价值十分明晰,企业对可用选择却未必知道得那么清楚。下面就深入探讨一下数据防护解决方案,以及它们都各自适合哪些特定需求。 1. 本地部署(私有云) 数据防护托管在本地部署的纯私有云上,你就是在运营第二个数据中心,专门为了备份业务数据而设。 优点:自家东西,可以随意控制、配置、升级。如果你处理的是极度敏感的数据,这是一个极具竞争力的选项,但千万小心,任何机器可接受外部连接的机器都是脆弱的。 缺点:很不幸,用本地存储来做数据防护有很多缺陷。首先,硬件限制就影响了存储空间和计算可用性。其次,数据都放在一个地方,断电或硬件故障就会阻碍业务进行,造成数据丢失。最后,新监管和威胁态势下,合规与安全变得越来越重要,需要专用资源来维护连贯的安全补丁与升级计划,解决不断出现的漏洞。 2. 云网关(混合云) 云网关是基于硬件或软件的设备,连接本地系统与云存储解决方案,提供不兼容系统访问所需的基本翻译与连接性,让数据得以在云端备份。 优点:备份数据存储在远程位置,释放了一旦本地硬件故障就会丢失数据的压力。另外,远程硬件的维护和升级责任不在自己身上,只有数据中心内的设备需要照管。 缺点:所有往来于云端的数据都要经过该设备,每个位置都需要一台设备。这种模型下,云被当成了磁带机,由于存储效率低下,导致云存储成本上升。 3. 托管解决方案(云代管) 这种模式下,你购买应用及存储,或者申请使用许可,然后托管在厂商的远程位置,或者托管在你控制之下的云平台上。 优点:有了托管应用或软件解决方案,在理解自身环境上比较方便,可减少管理员和IT员工的学习曲线。该模式还将确保断电和其他灾难不会影响业务的责任加在了托管厂商身上。 缺点:托管解决方案的架构无法利用公共云环境的可扩展性和灵活性。此类解决方案在构建和管理上可能会很贵,因为存储开销就落到你身上,而且可能还有其他云提供商费用要支付,比如其他计算和联网资源开销。与本地部署模型类似,你得确保自己拥有运行应用的计算能力和余量空间,能够应对任何需求高峰或增长。 任何模型只要‘失去连接’就会让服务不可用。托管模型的主要问题与容量分配有关——它不是动态的。因此,里面承担了所有传统本地系统的开销,包括扩展系统所需的停机时间。而且,托管服务通常都是单租户而非多租户模式,意味着运营厂商必须针对每个实例分别更新或修复——更高出错概率和更大回滚复杂性。最后,运营托管环境的提供商往往可以访问这些环境,数据安全和服务连接权限是很现实的顾虑。 4. 原生云(SaaS) 真正的原生云SaaS数据防护解决方案,是从零开始设计构造的,利用公有云的种种优势,比如全局重复数据删除、自动分层和动态分配存储、运行时间保证和灵活计算可用性。 优点:该最后的服务选项,为现有公共云服务提供商(比如AWS)原生打造,从一开始便创建集成良好的产品。需要进行容量增减的时候,云可以扩展或缩减,无需复杂繁重又昂贵的软硬件才够周期或服务中断,即可适应业务需求的改变。而且,因为无需在旧有部署和类云网关设备之间设置翻译层,也就消除了瓶颈,推进了性能和正常运行时间。 有了纯原生云SaaS解决方案,便无需额外的资源来维持合规,也不用经常性维护来对抗安全威胁。所有这些维护上的负担都落到了SaaS提供商身上。 最重要的是,可预测的订阅费用结构,去除了其他模型的复杂开销,可以需要什么买什么。 缺点:最大的顾虑在于互联网连接的丢失,这可能会让你暂时无法访问应用。但是,当今诸多业务都是网上完成,断网对你整体运营的影响不会太大。其他顾虑,比如整个电网故障,可通过利用多个可用区域来轻松解决。 总结 任何涉及利用自有硬件的解决方案,都具有运营自有数据中心时的种种限制。混合或托管解决方案,不足以完全交付云能提供的所有益处。随着公共云的成熟和在IT领域不可或缺地位的巩固,公司企业考虑原生云SaaS解决方案不失为明智的选择。 作者:nana 来源:51CTO

优秀的个人博客,低调大师

盘点小基站市场 技术与市场策略助推更多部署

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 在***讨论小基站时,这个词的含义非常具体。小基站的概念主要是描述一个将无线单元和基带单元封装在一个单一形式因素之中的基站,其覆盖区域和输出功率大大低于典型的宏基站。像一切无线技术一样,它的具体定义随着时间的推移变得不再那么固定;最初不被视为小基站的终端,现在也被归入到我们讨论的类别。 小基站定义的变更不仅反映出供应商对无线解决方案分类的变化,而且也反映了运营商对小基站的态度转变。虽然这个术语的含义不断扩大,但小基站的输出功率小于宏基站仍然是一个关键的界定因素。另一个关键区别是,小基站旨在为宏基站不方便覆盖或经济上不可行的区域,提供网络容量和网络覆盖。 小基站包括毫微微基站、微微基站和微基站,有时被归为小基站讨论范畴的无线解决方案还包括远程无线前端、远程无线电系统(如爱立信的Dot或华为的Lampsite)以及分布式天线系统(DAS)。一些供应商甚至试图将Wi-Fi当作小基站,但Ovum始终将Wi-Fi视为空中接口,而不是一种小基站技术。***进入小基站范畴的是微型宏基站,尽管其功率输出更接近一个宏基站,但其覆盖范围表明,其部署场景更接近一个小基站(而非宏基站)。 市场动态 套装方案降低小基站部署壁垒 一些主要供应商和网络提供商开发了旨在促进小基站部署的套装服务。这些套装服务大致分为3类: 小基站即服务(SCaaS),服务提供商提供一个“一站式”服务方案,包括设计、站点获取、安装、电力、回程、网络优化和管理。 小基站提供商及促进者,小基站供应商与能够获得站址资源(如公共设施)、电力和回传资源的合作伙伴建立关系,以协助运营商部署。 小基站提供商与渠道伙伴,针对企业的VAR合作,两者联合以支持企业部署3G/ LTE小基站。 城域小基站市场仍遭遇挑战 尽管具备一定优势,但城域小基站仍面临大范围部署的阻碍和挑战,以下是其中的一些挑战。 城域小基站部署困难,并且需要很长时间。在城域环境下,部署小基站仍然是一个巨大的挑战:获得站址资源并不容易;能提供***射频覆盖的区域并不总是拥有电力;当站点充足时,站点所有者可以收取类似于宏基站选址的费用;分区非常耗时,每个市都有不同的要求。一些供应商声称:部署一个城域小基站与部署一个宏基站所耗费的时间和成本近乎相同(抛去基站本身成本)。因此,运营商确实需要能够大批部署小基站(而非一次部署一个)的解决方案。 部署仍主要由覆盖范围(而非容量)驱动: 移动运营商似乎仍然在部署城域小基站来处理网络覆盖问题——利用它们填补宏基站所不能覆盖的缺口。增加网络容量似乎还不是部署城域小基站的主要推动力。鉴于采用的是逐点方法,因此解决覆盖问题不需要试图增加整体网络容量所需的同等数量的小基站。 小基站只是运营商的一种选择:对运营商来说,小基站并不是增加网络覆盖范围并提升容量的惟一方式。运营商可选择的其他途径包括购买更多频谱并实现宏网络致密化(通过添加新的站点或增加每个基站的扇区数量),因此在处理网络覆盖和容量问题的时候,小基站并不一定是运营商的***。 小基站技术在不断推进 为了提供无所不在的连接以及在移动、容量和整体网络效率方面所承诺的改进,小基站的性能需要与宏观层面的改进保持同步。如果无法做到这一点,那么运营商将面临网络边缘性能退化以及最终用户体验不一致的风险。 小基站技术发展的当前焦点可分为三大领域: 首先,与宏网络实现更紧密的集成,以优化性能并充分利用提高的容量、覆盖范围以及频谱利用率等。 其次,通过添加类似宏基站并与宏基站完全兼容的特性和功能来提高小基站的技术能力和性能,同时在小基站空间里应用C-RAN和虚拟化等新进展。 ***,使用新频段(包括未经授权的频谱),并利用与其他无线网络技术(如Wi-Fi)的协同效应。 实现更紧密的集成以及提升小基站性能的服务需要由标准机构支持,并由主要的RAN供应商(不仅能够在宏观层面提供相关特性和功能经验,而且可以将前述这些完全集成到一个全面的RAN产品)领导和驱动。这需要一系列的技术进步和持续改进,来推动并提高小基站对干扰协调和载波聚合等特性的支持。与此同时,许多独立的小基站供应商(如SpiderCloud和Airvana)在企业解决方案和C-RAN等领域进行创新。 针对小基站正在规划或商用化的属性包括: eICIC(增强型小区间干扰协调): 专门针对宏基站的小区间干扰协调(ICIC)的演进;eICIC解决小基站和宏基站在共享频谱上的异构网络干扰问题。3GPP R10版本针对LTE-A引入了eICIC,而LTE R11版本进一步将eICIC演进为feICIC。 小基站双连接:这种技术结合站点间载波聚合及CoMP(协调多点)技术来优化性能——通过结合宏基站的覆盖范围和小基站的能力,特别是在没有回传的区域。它还有助于减少核心网的信令负荷。3GPP R12版本开始致力于这一特性,并且R13版本进一步加强了这个特性;该技术将在2016~2017年实现商用。 高阶调制:R12版本开始引入高阶调制(256QAM,而不是64QAM)支持,以期提高频谱效率并支持更高的峰值数据速率,它受制于用户设备支持。 LTE/Wi-Fi互连及使用未经授权的频谱:所有主要的RAN供应商将把Wi-Fi集成到它们的小基站产品并建立围绕集成Wi-Fi的用例。事实证明使用未经授权的频谱来补充现有获得授权的频段对运营商来说特别有吸引力。授权频谱辅助接入(LAA)是一系列支持使用未经授权频谱(在LTE和Wi-Fi等其他系统之间共享)的技术中的一种。R13版本的工作包括纳入载波侦听(LBT)来防止LTE传播干扰Wi-Fi传输。主要的RAN供应商都致力于支持LAA,另外还有相当数量的小型供应商也是如此,包括SpiderCloud。该领域的未来工作很可能会纳入一些替代方法,比如LTE/Wi-Fi链路聚合以及MulteFire(只针对LTE)。 纳入SON特性:在未来,小基站有望被大量使用以增加网络密度,而不是像现在这样被用来填补容量和覆盖范围的缺口。自组织网络(SON)提供商正在开发专业技能来解决小基站和异构网络的问题(比如C-SON功能和多供应商支持),通过基于客户体验的SON补充基于网络的RAN优化。 Cloud-RAN/虚拟化:针对宏基站部署采用C-RAN架构已经成为既定趋势,业界的注意力开始转向C-RAN可以为小基站带来哪些好处,特别是在企业和公共场所部署方面。举例而言,在Airvana的OneCell系统中,基带资源可以聚集并将以太网用于Fronthaul(前传)连接,同时多个无线接入点扮演一个单一小区角色(而不是一组相互竞争的小基站)。最近,KPN携手爱立信和广告不动产公司JCDecaux共同在阿姆斯特丹建立了公共小基站C-RAN的部署案例。 市场展望:5G和MEC成小基站驱动力 5G被普遍认为是小基站的一个重要驱动力,移动边缘计算(MEC)连同NFV/ SDN被欧洲5G PPP研究机构公认为5G网络的主要新兴技术。 MEC将处理、存储和管理等网络功能搬到基站或小基站,更靠近RAN边缘。通过在网络边缘集中资源,MEC可以减少延迟、提高效率并加快提供一系列服务和应用的速度。它可以减少移动核心网的拥塞,有望减少高达35%的回传要求。 诺基亚的“Liquid Applications”是MEC的先驱。MEC模型正在被其他供应商采用,并将此作为虚拟网络产品(如华为CloudEdge)的一部分。 欧洲电信标准协会(ETSI)正致力于制定MEC标准,可能会接纳非蜂窝以及蜂窝网络,包括Wi-Fi。***套标准预计将在2016年年底颁布。小蜂窝论坛表示,由于小基站天然面向网络边缘,许多小基站案例与那些由ETSI MEC项目瞄准的案例匹配。 MEC未来将支持某些功能,允许授权第三方基于小基站为移动用户、企业和垂直行业开发新应用和服务,这些功能包括视频分析、位置服务、物联网、优化的本地内容分发和在网络边缘的数据缓存等。

优秀的个人博客,低调大师

冒充政府税务机构的邮件钓鱼攻击机理与防御策略研究

政府公共部门具备天然的公共公信力,攻击者利用公众对税务机关的信任开展仿冒税务账单的邮件钓鱼,已经成为跨境网络诈骗的重要类型。瑞士公共媒体 SRF 披露的伪造税务账单邮件诈骗事件显示,攻击者完整复刻税务部门视觉标识、文书格式,以欠税追缴、退税通知为叙事载体,结合法律后果恐吓与限时处理的心理压迫,诱导普通民众与小微企业提交银行账户、个人身份信息或者直接向诈骗账户转账,对社会公众财产安全与公共部门信誉构成双重冲击。本文以该现实安全事件作为实证样本,梳理仿冒税务机构钓鱼攻击的实施流程、欺骗机理,剖析公共公信力被劫持背景下传统邮件安全防护体系存在的短板,分析社会工程心理操纵在政务类钓鱼攻击当中发挥的关键作用。反网络钓鱼技术专家芦笛指出,政务主体身份仿冒钓鱼攻击的特殊风险,在于受害者会预设官方消息具备真实性,主观戒备阈值显著低于普通商业钓鱼邮件,进一步放大攻击成功率。迪妙网络空间安全学院研究团队长期跟踪政务伪装类钓鱼威胁,结合多起同类事件复盘,从技术防护、公共治理、公众安全素养、事件应急处置四个维度构建分层防御框架。研究认为,此类威胁无法依靠单一技术手段实现根除,需要邮件安全技术迭代、政府预警通报机制落地、社会公众风险识别能力建设、受骗后快速处置流程相互配合,形成技术 管理 社会层面的完整闭环,为各国应对仿冒公共机构钓鱼威胁提供实践参考。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册