精华内容
下载资源
问答
  • 常见的gc算法有哪些? java garbage collection是一个自动进程,用于管理程序使用的运行时内存。通过自动执行JVM,可以减轻程序中分配和释放内存资源的开销。 垃圾回收机制是由垃圾回收Garbage Collection来...

    常见的gc算法有哪些?

     java garbage collection是一个自动进程,用于管理程序使用的运行时内存。通过自动执行JVM,可以减轻程序中分配和释放内存资源的开销。

     

    垃圾回收机制是由垃圾回收器Garbage Collection来实现的。GC是后台的守护进程,它的特别之处是它是一个低优先级进程。但是可以根据内存的使用情况动态的调整他的优先级,因此,它是内存中低到一定程度时,才会自动运行,从而实现对内存的回收,这就是垃圾回收的时间不确定的原因。这个服务不是我们启动的是自动启动的。

     

    程序运行期间,所有对象实例存储在运行时数据区域的heap中,当一个对象不再被引用(使用),他就需要被回收,在GC过程中,这些不需要被使用的对象从heap中回收,这样就会有空间循环被利用。

    引用计数法

    简单但是速度很慢,缺陷是不能处理循环引用的情况。 
    原理:此对象有一个引用,既增加一个计数器,删除一个引用减少一个计数器,垃圾回收时,只回收计数器为0的对象,此算法最致命的是无法处理循环引用的情况

    3.标记-清除算法

    标记清除算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。

    之所以说他是最基础的收集算法,是因为后续的收集算法都是基于这种思路并且对其不足进行改进而得到的。

    它的主要不足有两个:
    1. 一个是效率问题,标记和清除两个过程的效率都不高
    2. 另一个是空间问题,标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后再程序运行过程中需要分配较大对象时,无法找到足够的连续的内存而不得不提前触发另一次垃圾收集动作。

    4.复制算法

    为了解决效率问题,一种称为“复制”(Copying)的收集算法出现了,它将可用的内存按照容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况。只要移动堆指针,按照顺序分配内存即可,实现简单,运行高效。只是这种算法的代价是将内存缩小为原来的一半。

    5. 标记-整理算法

    复制收集算法在对象存活率较高的时候,就要进行较多的复制操作,效率将会变低。更关键的是,如果不想浪费50%的空间,就需要额外的空间进行分配担保,以应对被使用的内存中所有对象都是100%存活的极端情况,所以在老年代一般不能直接选用这种算法。根据老年代的特点。有人提出了另外一种“标记-整理”(Mark-Compact)算法,标记过程仍然与”标记-清除”算法一样,但是后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界意外的内存。

    6.分代收集算法

    这种算法并没有什么新的思路,只是根据对象的存活周期的不同,将内存划分为几块。一般是把java堆分成新生代和老年代,这样就可以根绝各个年代的特点采取最适当的收集算法。在新生代中,每次垃圾回收时都发现大批对象的死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高,没有额外空间对它进行分配担保,就必须使用”标记-清理”或者“标记-整理”算法来进行回收。

    7.系统线程划分

    串行收集器

    使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势。所以此收集器适合单处理器的机器。当然,此收集器也可以用在小数量(100M左右)情况下的多处理器机器上,可以使用-XX:+UseSerialGC打开。

    并行收集器

    对年轻代进行并行垃圾回收,因此可以减少垃圾回收的时间,一般在多线程多处理器上使用,使用-XX:+UseParallelGC打开。年老代进行并行收集。如果年老代不使用并发收集的话,是使用单线程进行垃圾回收,因此会制约扩展能力,使用-XX:+UseParallelOldGC打开。

    使用-XX:ParallelGCThreads=设置并行垃圾回收的线程数,此值可以设置与机器处理数量相等。
    此收集器可以进行如下配置:
    最大垃圾回收暂停:指定垃圾回收时的最大暂停时间,通过-XX:MaxGCPauseMillis=指定。为毫秒数,如果指定了这个值的话,堆大小和垃圾回收相关参数会进行调整以达到指定值。此值可能会减少应用的吞吐量。吞吐量:吞吐量为垃圾回收时间与非垃圾回收时间的比值。通过-XX:GCTimeRatio=来设定,公式为1/(1+N),例如,-XX:GCTimeRatio=19时,表示5%的时间用于垃圾回收,默认情况为99,既1%的时间用于垃圾回收。

    并发收集器

    可以保证大部分工作都并发执行(应用不停止),垃圾回收只暂停很少的时间,此收集器适合对响应时间要求比较高的中,大型应用,使用-XX:+UseConcMarkSweepGC打开。

    并发收集器主要减少年老代的暂停时间,他在应用不停止的情况下使用独立的垃圾回收线程,跟踪可达对象,在每个年老代垃圾回收周期中,在收集初期并发收集器会对整个应用进行简短的暂停,在收集中还会再暂停一次,第二次暂停会比第一次长,在此过程中多个线程同时进行垃圾回收工作。

    并发收集器使用处理器换来短暂的停顿时间,在一个N个处理器的系统上,并发收集部分使用K/N个可用处理器进行回收,一般情况下1<=K<=N/4

    在只有一个处理器的主机上使用并发收集器,设置为incremental mode模式也可以获得较短的停顿时间。

    浮动垃圾:由于在应用运行的同时进行垃圾回收,所以有些垃圾回收可能在垃圾回收完成时产生,这样就造成了“floating Garbage”,这些垃圾需要在下次垃圾回收周期时才能回收掉,所以并发收集器一般需要20%的预留空间用于这些浮动垃圾。

    Concurrent Mode Failure:并发收集器在应用程序运行时进行收集,所以需要保证堆在垃圾回收的这段时间有足够的空间供程序使用,否则,垃圾回收还未完成,堆空间先充满了,这种情况下将会发生“并发模式失败”,此时整个应用将会暂停。进行垃圾回收。

    启动并发收集器:因为并发收集在应用运行时进行收集,睡衣必须保证收集完成之前有足够的内存空间供程序使用,否则会出现“Concurrent Mode Failure”,通过设置-XX:CMSinitiatingOccupancyFraction=指定还有多少剩余堆时开始执行并发收集。

    并行:多个事件同一时间发生,同时做多件事
    并发:多个事件在同一个时间间隔内发生。每年11.11日狂欢节,一天内接受的最大人数。

     

    来源自:
    ---------------------
    作者:九师兄-梁川川
    来源:CSDN
    原文:https://blog.csdn.net/qq_21383435/article/details/80473540
    版权声明:本文为博主原创文章,转载请附上博文链接!

    转载于:https://www.cnblogs.com/Tpf386/p/11210483.html

    展开全文
  • 标签:常见nic警告werrorpytho无效本地变量计算pointBaseException 所有异常基类SystemExit 解释请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception ...

    标签:常见   nic   警告   werror   pytho   无效   本地变量   计算   point

    BaseException                            所有异常的基类

    SystemExit             解释器请求退出

    KeyboardInterrupt          用户中断执行(通常是输入^C)

    Exception             常规错误的基类

    StopIteration             迭代器没有更多的值

    GeneratorExit           生成器(generator)发生异常来通知退出

    StandardError           所有的内建标准异常的基类

    ArithmeticError           所有数值计算错误的基类

    FloatingPointError         浮点计算错误

    OverflowError           数值运算超出最大限制

    ZeroDivisionError         除(或取模)零 (所有数据类型)

    AssertionError           断言语句失败

    AttributeError           对象没有这个属性

    EOFError             没有内建输入,到达EOF 标记

    EnvironmentError         操作系统错误的基类

    IOError             输入/输出操作失败

    OSError             操作系统错误

    WindowsError           系统调用失败

    ImportError           导入模块/对象失败

    LookupError           无效数据查询的基类

    IndexError           序列中没有此索引(index)

    KeyError             映射中没有这个键

    MemoryError           内存溢出错误(对于Python 解释器不是致命的)

    NameError           未声明/初始化对象 (没有属性)

    UnboundLocalError         访问未初始化的本地变量

    ReferenceError         弱引用(Weak reference)试图访问已经垃圾回收了的对象

    RuntimeError           一般的运行时错误

    NotImplementedError         尚未实现的方法

    SyntaxError Python         语法错误

    IndentationError           缩进错误

    TabError Tab           和空格混用

    SystemError             一般的解释器系统错误

    TypeError             对类型无效的操作

    ValueError             传入无效的参数

    UnicodeError Unicode         相关的错误

    UnicodeDecodeError Unicode     解码时的错误

    UnicodeEncodeError Unicode     编码时错误

    UnicodeTranslateError Unicode     转换时错误

    Warning               警告的基类

    DeprecationWarning         关于被弃用的特征的警告

    FutureWarning             关于构造将来语义会有改变的警告

    OverflowWarning            旧的关于自动提升为长整型(long)的警告

    PendingDeprecationWarning       关于特性将会被废弃的警告

    RuntimeWarning            可疑的运行时行为(runtime behavior)的警告

    SyntaxWarning           可疑的语法的警告

    UserWarning           用户代码生成的警告

    Python常见异常类型

    标签:常见   nic   警告   werror   pytho   无效   本地变量   计算   point

    展开全文
  • Java发展至今,已经推出了好几代垃圾收集,包括Serial、ParNew、Parallel、CMS、G1以及Java11中最新的ZGC,每一代GC都对前一代存在的问题做出...2.它与应用线程的执行是串行的,也就是说,执行应用线程的时候,不...

    Java发展至今,已经推出了好几代垃圾收集器,包括SerialParNewParallelCMSG1以及Java11中最新的ZGC,每一代GC都对前一代存在的问题做出了很大的改善。

    新生代使用的垃圾收集器主要有:

    1.Serial收集器
     
    2.ParNew收集器
     
    3.Parallel scavenge收集器
     

    Serial收集器:

    1.单线程收集器在单核CPU架构下,JDK3之前新生代的回收器的唯一选择

    2.它与应用线程的执行是串行的,也就是说,执行应用线程的时候,不会执行GC,执行GC的时候,不能执行应用线程

     
     
     
     

    ParNew收集器

    1.就是serial回收器的多线程版本,有很多的代码都是和serial收集器公用的

    2.在进行回收的过程中仍然会暂停用户线程(STW),然后利用多核CPU的能力,采用多线程方式进行垃圾回收

     
     

    Parallel scavenge收集器

    自适应调节策略:
     

    老年代:

    老年代使用的垃圾收集器主要有:

    1.Seria-old收集器

    2.Parallel Old收集器

    3.CMS收集器

    Seria-old收集器

    1.serial收集器的老年代版本,同样还是使用单线程进行垃圾回收
    2.它存在的主要意义是JVM运行在client模式下配合新生代的serial收集器一起使用
    3.它还可以作为CMS垃圾回收器的后备垃圾回收器
     
     
     

    Parallel Old收集器

    1.这个回收器是Parallel scavenge的老年代版本,经常和Parallel scavenge一起使用在对内存比较敏感和对吞吐量比较高的场合下使用
    2.使用多线程和“标记-整理”算法这个收集器是在JDK6中才开始提供
     

    CMS收集器

    1.CMSHotSpotJDK5推出的第一款真正意义上的并发(Concurrent)收集器,第一次实现了让垃圾收集线程与用户线程(基本上)同时工作

    2.CMSConcurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器

    3.目前很大一部分的Java应用都集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验

     
    CMS收集器具体的过程
    1.初始标记:只标记根节点直接关联的引用对象,需要暂停用户线程(时间短)
    2.并发标记:标记其他引用对象,可以跟用户线程并发同时执行
    3.重新标记:暂停用户线程,对并发标记期间新增加的引用关系变化再次标记(时间短)
    4.并发清除:跟用户线程并发进行
     
     
     
     
    CMS主要的有点提供了一个并发的能力,对用户程序打扰较小。但是,也有一些显而易见的缺点:

    1.跟用户线程竞争资源

    2.在并发清除垃圾阶段,由于用户线程还在执行,要预留一定的空间给用户线程进行使用,所以收集器一定不能在老年代已经占用100%的情况下再进行垃圾收集(没内存空间了)

    3.因为这个垃圾回收器是使用的标记-清除算法,所以会产生大量的内存碎片

    CMS收集器的缺点的人工干预:

    1.使用-XX:CMSInitiatingOccupancyFraction来指定老年代到达多少的时候触发垃圾回收,JDK6之后默认为92,就是在老年代的空间已经占用92%的时候,就会触发一次垃圾回收
     
    2.这个值如果设置的太高就会出现并发清理的时候,用户线程并发执行没有足够的空间分配对象而造成内存分配失败的情况发生
     
     
    3.如果发生分配失败,则会出现Concurrent Model Failure,那么老年代收集器就会自动转换使用serialOld收集器进行回收,从而导致用户线程的停顿时间变长,所以这个值设置的合理很重要
     
     

    新一代垃圾回收器:G1(非常厉害)

    1.空间整合:G1收集器采用标记-整理算法,不会产生内存空间碎片

    2.它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔阂了,它们都是一部分可以不连续Region的集合。红色为巨大的对象创建区域的。

     

    默认垃圾回收器 

     
    展开全文
  • python是一门解释型语言,代码想要运行,必须...目前常见的Python解释包括:CPython、JPython、IPython、PyPy、IronPython五个版本。1、CPython:是使用C语言开发的python解释,也是标准的python解释,目前我...

    python是一门解释型语言,代码想要运行,必须通过解释器来执行,当然为了满足不同平台的需求,python解释器也分为不同的种类,接下来老男孩教育为大家介绍五款常用python解释器。

    目前常见的Python解释器包括:CPython、JPython、IPython、PyPy、IronPython五个版本。

    1、CPython:是使用C语言开发的python解释器,也是标准的python解释器,目前我们大部分人安装的python IDE都是CPython,也是使用最广泛的python解释器。

    2、JPython:是在JVM上实现的python,由Java语言编写。可以将python源码编译成JVM字节码,由JVM执行对应的字节码,因为可以很好的与JVM集成。

    3、IPython:是基于Cpython之上的一个交互式解释器,相对于Cpython而言,其交互方式有所增强,但是执行代码的功能还能与Cpython相同的。

    4、PyPy:是使用python实现的python动态编译器,提供了JIT编译器和沙盒功能,因此在运行速度上要比Cpython快很多。其起源是python开发者为了更好的Hack Python而创建的项目。灵活性高、易于使用和试验,不过对于第三方模块的支持不足。

    5、IronPython:面向微软.net平台,是由C#语言编写。可以将Python代码编译成字节码TODO CLR,并能很好的与.NET平台集成。

    展开全文
  • 浏览器内核包括两部分,渲染引擎和js引擎。渲染引擎负责读取网页内容,整理讯息,计算网页的...常见的游览内核: IE:Trident firefox:Gecko chrom、safari:webkit Opera:Presto Microsoft Edge:EdgeHTML ...
  • python是一门解释型语言,代码想要运行,必须...目前常见的Python解释包括:CPython、JPython、IPython、PyPy、IronPython五个版本。1、CPython:是使用C语言开发的python解释,也是标准的python解释,目前我...
  • Sage X3 ERP存货分配规则说明 ... 化工行业常见的订单分配原则 化工行业考虑到保质期、物料价格波动的问题,订单分配环节遵循的原则: 先进先出FIFO(First In First Out) 先到期先出FEFO(Firs
  • 在数字电子系统领域,存在三种基本器件类型:存储器、微处理和逻辑器件。存储器用来存储随机信息,如数据表或数据库内容。微处理器执行软件指令来完成范围广泛任务,如运行字处理程序或视频游戏
  • python是一门解释型语言,代码想要运行,必须...目前常见的Python解释包括:CPython、JPython、IPython、PyPy、IronPython五个版本。1、CPython:是使用C语言开发的python解释,也是标准的python解释,目前我...
  • 当我们往黑窗口输入一条SQL给Mysql执行,Mysql 查询优化会按照一定规则帮我们对SQL进行重写,优化,本文将会讲解: Mysql基于规则优化条件化简:常量表检测外连接消除子查询不相关标量子查询标量相关子查询IN...
  • python是一门解释型语言,代码想要...目前常见的Python解释包括:CPython、JPython、IPython、PyPy、IronPython五个版本。1、CPython:是使用C语言开发的python解释,也是标准的python解释,目前我们大部分人...
  • __init__模块:初始化模块init()方法 当使用类名()创建对象时,Python解释会自动执行以下操作:1.为对象在内存中分配空间———创建对象2.调用初始化方法为对象属性设置初始值——初始化方法(init)3. 这个...
  • 大家应该知道java应用程序是可以独立运行,只要虚拟机就可以,但是有些刚...依次介绍这三种类型:1、Application,即baiJava应用程序,是可以独立运行的Java程序,由Java解释控制执行,也是最常见的类型。2、App...
  • owasp有哪些?

    2020-04-16 21:59:05
    简单来说,注入往往是应用程序缺少对输入进行安全型检查所引起的,攻击者把一些包含指令的数据发送给解释,解释会把收到的数据转换成指令执行常见的注入包括sql注入,--os-shell,LDAP(轻量目录访问协议),...
  • 常见的.EXE、.DLL、.OCX、.SYS、.COM都是PE文件。PE文件一个共同特点:前两个字节为4D 5A(MZ)。如果一个文件前两个字节不是4D 5A则其肯定不是可执行文件。比如用16进制文本编辑打开一个".xls"文件其前两个字节为...
  • Python 开发中有哪些好技巧? 我们写Python代码的时候经常将一系列操作放在一个语句块中,Python 2.5加入了with语法,实现上下文管理功能,这让代码的可读性更强并且错误更少。最常见的例子就是open,如果不使用with...
  • 看到有很多,总结一下,比较适合有一定经验PHPer ...CSDN、虎嗅、猎云 ...js闭包是什么,原型链了不...php加速器有哪些?apc、xcache.....能不能讲一下它加速原理,与现在O+有什么差别? Node.js能...
  • 常见的.EXE、.DLL、.OCX、.SYS、.COM都是PE文件。PE文件一个共同特点:前两个字节为4D 5A(MZ)。如果一个文件前两个字节不是4D 5A则其肯定不是可执行文件。比如用16进制文本编辑打开一个".xls"文件其前两个字节为...
  • 总结Java常见的面试题

    2017-02-02 16:33:30
    1.面向对象特征有哪些? (1)抽象 (2)继承 (3)封装 (4)多态   2.final,finally,finalize区别? final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可被继承。 finally是异常处理语句...
  • CSDN、虎嗅、猎云2、js闭包是什么...5、php加速器有哪些?apc、zend、xcache.....能不能讲一下它加速原理?6、Node.js能彻底代替php+apache是扯淡。7、怎样判断一个值是否存在于数组中?in_array(),array_key_exi...
  • 十三、Mybatis 125.mybatis 中 #{}和 ${}区别是什么? 126.mybatis 有几种分页方式? 127.RowBounds 是一次性查询全部结果吗?为什么?...128.mybatis 逻辑分页和物理...132.mybatis 有哪些执行器(Executor)? 13
  • JVM常见问题总结

    2019-07-29 17:06:40
    JVM常见问题总结 目录 说一下 jvm 主要组成部分?及其作用?...说一下 jvm 运行时数据区?...说一下 jvm 有哪些垃圾回收? 详细介绍一下 CMS 垃圾回收? 新生代垃圾回收和老年代垃...
  • 监听器常见面试题监听器有哪些作用和用法?监听器有哪些作用和用法?Java Web开发中监听器(listener)就是application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码功能组件,...
  • 过滤器与拦截器的区别: *相同点:都是起拦截作用 *不同点:  *作用范围: *过滤器:使用范围是J2EE范畴,任何一个web工程都可以使用过滤器 *拦截器:使用范围是struts2范畴,离不开struts...常见的拦截器有哪些?

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 340
精华内容 136
关键字:

常见的执行器有哪些