精华内容
下载资源
问答
  • Java常见的垃圾收集器有哪些

    千次阅读 2019-04-13 19:14:14
    Serial GC, 它是最古老垃圾收集器, “Serial”体现在其收集工作是线程,并且在进行垃圾收集过程中,会进入臭名昭著...从年代角度,通常将其老年代实现单独称作Serial Old,它采用了标记-整理(Mark-Comp...

    Serial GC,
    它是最古老的垃圾收集器, “Serial”体现在其收集工作是单线程的,并且在进行垃圾收集过程中,会进入臭名昭著的“Stop-The-World”状态。当然,其单线程设计也意味着精简的GC实现,无需维护复杂的数据结构,初始化也简单,所以一直是Client模式下JVM的默认选项。
    从年代的角度,通常将其老年代实现单独称作Serial Old,它采用了标记-整理(Mark-Compact)算法,区别于新生代的复制算法。Serial GC的对应JVM参数是:-XX:+UseSerialGC

    ParNew GC,
    很明显是个新生代GC实现,它实际是Serial GC的多线程版本,最常见的应用场景是配合老年代的CMS GC工作,下面是对应参数 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
    CMS GC,基于标记-清除(Mark-Sweep)算法 设计目标是尽量减少停顿时间,这一点对于Web等反应时间敏感的应用非常重要,一直到今天,仍然有很多系统使用CMS GC。但是, CMS采用的标记-清除算法,存在着内存碎片化问题,所以难以避免在长时间运行等情况下发生full GC,导致恶劣的停顿。另外,既然强调了并发(Concurrent), CMS会占用更多CPU资源,并和用户线程争抢。

    Parrallel GC,
    在早期JDK 8等版本中,它是server模式JVM的默认GC选择,也被称作是吞吐量优先的GC。它的算法和Serial GC比较相似,尽管实现要复杂的多,其特点是新生代和老年代GC都是并行进行的,在常见的服务器环境中更加高效。开启选项是:-XX:+UseParallelGC 另外, Parallel GC引入了开发者友好的配置项,我们可以直接设置暂停时间或吞吐量等目标, JVM会自动进行适应性调整,例如下面参数:

    -XX:MaxGCPauseMillis=value,
    -XX:GCTimeRatio=N	//GC时间和用户时间比例 = 1 / (N+1)
    

    查看jdk垃圾收集器:java -XX:+PrintCommandLineFlags -version

    G1 GC这是一种兼顾吞吐量和停顿时间的GC实现,是Oracle JDK 9以后的默认GC选项。 G1可以直观的设定停顿时间的目标,相比于CMS GC, G1未必能做到CMS在最好情况下的延时停顿,但是最差情况要好很多。
    G1 GC仍然存在着年代的概念,但是其内存结构并不是简单的条带式划分,而是类似棋盘的一个个region。 Region之间是复制算法,但整体上实际可看作是标记-整理(MarkCompact)算法,可以有效地避免内存碎片,尤其是当Java堆非常大的时候, G1的优势更加明显。
    G1吞吐量和停顿表现都非常不错,并且仍然在不断地完善,与此同时CMS已经在JDK 9中被标记为废弃(deprecated),所以G1 GC值得你深入掌握。

    目前尚处于开发中的 JDK 11,你会发现,JDK 又增加了两种全新的 GC 方式,分
    别是:
    Epsilon GC
    简单说就是个不做垃圾收集的 GC,似乎有点奇怪,有的情况下,例如在进行
    性能测试的时候,可能需要明确判断 GC 本身产生了多大的开销,这就是其典型应用场景。

    ZGC
    这是 Oracle 开源出来的一个超级 GC 实现,具备令人惊讶的扩展能力,比如支持 T
    bytes 级别的堆大小,并且保证绝大部分情况下,延迟都不会超过 10 ms。虽然目前还处于
    实验阶段,仅支持 Linux 64 位的平台,但其已经表现出的能力和潜力都非常令人期待。

    展开全文
  • 一个控制器中,功能最终会落实到一个个Action中实现,最常见的是增删查改操作。这些Action是一个个的方法,一般返回值是ActionResult,并且是public 方法,可以带参数,可以添加元标记,可以结合linq直接访问数据库...

    一个控制器中,功能最终会落实到一个个Action中实现,最常见的是增删查改操作。这些Action是一个个的方法,一般返回值是ActionResult,并且是public 方法,可以带参数,可以添加元标记,可以结合linq直接访问数据库,可以结合Model进行合法性验证等等,还是比较灵活的。增就是添加记录,如添加一个域名,一个产品;删,就是删除一条记录;查,包含列表显示及单个记录的显示;改就是指的修改记录。

    1 最常见的Action当属增删查改功能

    clipboard

    2 其中Index是列表,在示例中即列出所有的域名,这里进行了简单处理,即把所有域名全部显示不出来,不排序,不分页,不筛选;以后我们会介绍如果筛选和分页;一个Action,可以使用View()方法,返回一个视图,并且可以带上一个或多个参数,在这里就是把所有域名包装成List进行返回,以供视图列表显示

    clipboard[1]

    3 这个是详情页Action,通过id找到相应的记录,判断不为空则返回到视图

    clipboard[2]

    4 这个是添加一个域名的两个Action,第一个是Get请求,另一个是Post请求;提交时,传入了一个Model,这里面有完整的数据,通过Add()方法,添加到数据库。

    clipboard[3]

    5 这个是修改域名的方法,首先通过id查询出相应实体,然后传入到视图,修改完毕后,视图提交过来,进行保存;保存前需要把状态设置成EntityState.Modified,告诉linq这个是修改操作,与上面的添加相区别,然后是db.SaveChanges()方法的调用,可以直接持久化,保存到数据库中。

    clipboard[4]

    6 最后就删除了,也是一样,有一个get请求,再有一个post请求,其中get请求要展示相应的信息,并充当确认页面,当提交后,才真正删除,调用Remove()方法。

    clipboard[5]

    7 Action的常见成员就介绍到这里,祝您学习愉快!

     

    本人原创,转载请注明出处。更佳视觉排版请移步:http://t.cn/RPCZOVI

    转载于:https://www.cnblogs.com/xiaxiazl/p/3900877.html

    展开全文
  •  异常表示程序运行过程中可能出现非正常状态,运行时异常表示虚拟机通常操作中可能遇到异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生非运行时异常,但是并不要求必须声明抛出未被捕获...
  • JVM垃圾收集知识简介

    2020-07-19 22:05:50
    常见的垃圾回收算法有哪些 1:标记清除 容易产生空间碎片,效率偏低 2:复制算法 不会产生碎片,但是浪费空间 3:标记压缩 不会产生碎片,但是效率偏低 jvm常见垃圾收集器(以1.8为例) 新生代: 1 Serial 线程...

    什么是垃圾?
    没有引用指向的就是垃圾。
    在JVM中是怎么定位垃圾?
    有两种算法:
    第一种叫引用计数法
    第二种叫根可达算法
    常见的垃圾回收算法有哪些
    1:标记清除 容易产生空间碎片,效率偏低
    2:复制算法 不会产生碎片,但是浪费空间
    3:标记压缩 不会产生碎片,但是效率偏低

    jvm常见垃圾收集器(以1.8为例)
    新生代:
    1 Serial 单线程垃圾收集器
    2 ParNew 多线程垃圾收集器
    3 Parallel Scavenge 吞吐量优先多线程垃圾收集器
    老年代:
    1 Serial Old 单线程老年代垃圾收集器
    2 Parallel Old 多线程老年代垃圾收集器
    3 CMS 以获取最短停顿时间为目标的收集器
    整堆垃圾收集器:
    G1 物理层不分新生代老年代,逻辑层依然分

    在这里插入图片描述
    JDK 1.8默认Parallel Old + Parallel Scavenge

    Serial 单线程垃圾回收器
    在这里插入图片描述
    Parallel New

    在这里插入图片描述

    CMS:
    在这里插入图片描述
    G1

    在这里插入图片描述
    E:Eden
    S:Survivor
    O:Old
    H:Humongous

    在这里插入图片描述

    展开全文
  • 31、你知道Request对象主要方法有哪些? 32、J2EE是技术还是平台还是框架? 我答案: J2EE是技术也是平台 网上答案: J2EE本身是一个标准,一个为企业分布式应用开发提供标准平台。 J2EE也是一个...
  • 10、常见的垃圾回收器有哪些?介绍一下? 背景介绍:7种垃圾收集器作用于不同的分代,如果两个收集器之间存在连续,就说明他们可以搭配使用。 从JDK1.3到现在,从Serial收集器-》Parallel收集器-》CMS-》G1,用户...

    在这里插入图片描述

    背景介绍:7种垃圾收集器作用于不同的分代,如果两个收集器之间存在连续,就说明他们可以搭配使用。

    从JDK1.3到现在,从Serial收集器-》Parallel收集器-》CMS-》G1,用户线程停顿时间不断缩短,但仍然无法完全消除

    收集器 串行/并行/并发 新生代/老年代 收集算法 目标 适用场景 备注
    Serial 串行 新生代 复制算法 响应速度优先 单CPU环境下的Client模式
    Serial Old 串行 老年代 标记-整理算法 响应速度优先 单CPU环境下的Client模式、CMS的后备预案 Serial收集器的老年代版本
    ParNew 并行 新生代 复制算法 响应速度优先 多CPU环境时在Server模式下与CMS配合 Serial收集器的多线程版本
    Parallel Scavenge 并行 老年代 复制算法 吞吐量优先 在后台运算而不需要太多交互的任务 类似于ParNew收集器,有自己的特点
    Parallel Old 并行 老年代 标记-整理算法 吞吐量优先 在后台运算而不需要太多交互的任务 Parallel Scavenge收集器的老年代版本
    CMS 并发 老年代 标记-清除算法 响应速度优先 集中在互联网站或者B/S系统服务端的Java应用
    G1 并发 新生代、老年代 标记-清除算法、复制算法 响应速度优先 面向服务端应用,将来替代CMS
    • 1、Serial收集器:串行/单线程收集器,使用一条垃圾收集线程去完成垃圾收集,而且它在进行垃圾收集的时候会暂停其他所有的工作线程直到收集结束。其新生代使用复制算法,老年代使用标记-整理算法。

    • 缺点是要暂停所有的线程,优点是简单而高效没有线程交互的开销。

    • Serial 收集器对于运⾏在Client模式下的虚拟机来说是个不错的选择,HotSpot在Client模式下的默认

    • "-XX:+UseSerialGC":添加该参数来显式的使用Serial垃圾收集器。
      

    在这里插入图片描述

    • 2、ParNew收集器可看作Serial收集器的多线程版本,使用多线程进行垃圾收集,其余行为和Serial一样。

      它是许多运⾏在Server模式下的虚拟机的⾸要选择,除了Serial收集器外,只有它能与CMS收集器(真正意义上的并发收集器,后⾯会介绍到)配合⼯作。 新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法

      • 并发:多个垃圾收集线程一起工作,用户线程等待

      • 并行:用户线程和垃圾收集线程一起工作

      • "-XX:+UseConcMarkSweepGC":指定使用CMS后,会默认使用ParNew作为新生代收集器。
        
        "-XX:+UseParNewGC":强制指定使用ParNew。   
        
        "-XX:ParallelGCThreads":指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同。
        
    • 3、Parallel Scavenge收集器类似于ParNew收集器,特别之处如下:

      • Parallel Scavenge收集器的关注点是吞吐量/高效率利用CPU。// CMS等关注的是用户线程的停顿时间/用户体验

      • 吞吐量就是CPU中运行用户代码的时间比总消耗时间,Parallel Scavenge收集器提供了很多参数供⽤户找到最合适的停顿时间或最⼤吞吐量。

      • //Parallel Scavenge收集器提供了两个参数来用于精确控制吞吐量,一是控制最大垃圾收集停顿时间的 -XX:MaxGCPauseMillis参数,二是控制吞吐量大小的 -XX:GCTimeRatio参数;
        
        "-XX:MaxGCPauseMillis":参数允许的值是一个大于0的毫秒数,收集器将尽可能的保证内存垃圾回收花费的时间不超过设定的值(但是,并不是越小越好,GC停顿时间缩短是以牺牲吞吐量和新生代空间来换取的,如果设置的值太小,将会导致频繁GC,这样虽然GC停顿时间下来了,但是吞吐量也下来了)。
        
        "-XX:GCTimeRatio":参数的值是一个大于0且小于100的整数,也就是垃圾收集时间占总时间的比率,默认值是99,就是允许最大1%(即1/1+99))的垃圾收集时间。
        
        "-XX:UseAdaptiveSizePolicy":参数是一个开关,如果这个参数打开之后,虚拟机会根据当前系统运行情况收集监控信息,动态调整新生代的比例、老年大大小等细节参数,以提供最合适的停顿时间或最大的吞吐量,这种调节方式称为GC自适应的调节策略。
        
    • 4、Serial Old收集器

      • Serial收集器的老年代版本,单线程,标记-整理算法。主要用于Client模式下的虚拟机使用。

      • 1、在JDK1.5及之前的版本与Parallel Scaveenge收集器搭配使用;2、用作CMS收集器的后备方案。

    • 5、Parallel Old收集器

      • Parallel Scavenge收集器的老年代版本,多线程和’标记-整理算法‘,出现在JDK1。6

      • 在注重吞吐量以及CPU资源 的场合,都可以优先考虑 Parallel Scavenge收集器和Parallel Old收集器。

    • 6、CMS收集器:

    在这里插入图片描述

    • CMS(Concurrent Mark Sweep)收集器是⼀种以获取最短回收停顿时间为⽬标的收集器。它⽽⾮常符合 在注重⽤户体验的应⽤上使⽤。

    • 是HotSpot虚拟机第⼀款真正意义上的并发收集器,它第⼀次实 现了让垃圾收集线程与⽤户线程(基本上)同时⼯作。

    • CMS收集器是⼀种 “标记-清除”算法实现的,它的运作过程 相⽐于前⾯⼏种垃圾收集器来说更加复杂⼀些。整个过程分为四个步骤:

      • 1、初始标记: 暂停所有的其他线程,并记录下直接与root相连的对象,速度很快 ;

      • 2、 并发标记: 同时开启GC和⽤户线程,⽤⼀个闭包结构去记录可达对象。但在这个阶段,这个闭包结构并不能保证包含当前所有的可达对象。因为⽤户线程可能会不断的更新引⽤域,所以 GC线程⽆法保证可达性分析的实时性。所以这个算法⾥会跟踪记录这些发⽣引⽤更新的地⽅。

      • 3、重新标记: 此阶段就是为了修正并发标记期间因为⽤户程序继续运⾏⽽导致标记产⽣变 动的那⼀部分对象的标记记录,这个阶段的停顿时间⼀般会⽐初始标记阶段的时间稍⻓,远远⽐ 并发标记阶段时间短

      • 4、并发清除: 开启⽤户线程,同时GC线程开始对为标记的区域做清扫。

      • 优点是:并发收集,低停顿 缺点是:对CPU资源敏感、无法处理浮动垃圾、标记清除算法产生大量空间碎片

    • 7、G1收集器

      在这里插入图片描述

      G1 (Garbage-First)是⼀款⾯向服务器的垃圾收集器,主要针对配备多颗处理器及⼤容量内存的机器. 以极⾼概率满⾜GC停顿时间要求的同时,还具备⾼吞吐量性能特征.

      • 并⾏与并发:G1能充分利⽤CPU、多核环境下的硬件优势,使⽤多个CPU(CPU或者CPU核⼼)来缩 短Stop-The-World停顿时间。部分其他收集器原本需要停顿Java线程执⾏的GC动作,G1收集器仍 然可以通过并发的⽅式让java程序继续执⾏。

      • 分代收集:虽然G1可以不需要其他收集器配合就能独⽴管理整个GC堆,但是还是保留了分代的概 念。

      • 空间整合:与CMS的“标记–清理”算法不同,G1从整体来看是基于“标记-整理”算法实现的收集 器;从局部上来看是基于“复制”算法实现的。

      • 可预测的停顿:这是G1相对于CMS的另⼀个⼤优势,降低停顿时间是G1 和 CMS 共同的关注点, 但G1 除了追求低停顿外,还能建⽴可预测的停顿时间模型,能让使⽤者明确指定在⼀个⻓度为M 毫秒的时间⽚段内

        初始标记—并发标记—最终标记—筛选回收

      • G1收集器在后台维护了⼀个优先列表,每次根据允许的收集时间,优先选择回收价值最⼤的Region(这 也就是它的名字Garbage-First的由来)。这种使⽤Region划分内存空间以及有优先级的区域回收⽅式, 保证了GF收集器在有限时间内可以尽可能⾼的收集效率(把内存化整为零)。

      • **G1分区的概念:**G1的堆区在分代的基础上,引入分区的概念。

        • G1将堆分成了若干Region(这些分区不要求是连续的内存空间),Region的大小可以通过G1HeapRegionSize参数进行设置,其必须是2的幂,范围允许为1Mb到32Mb。

        • VM的会基于堆内存的初始值和最大值的平均数计算分区的尺寸,平均的堆尺寸会分出约2000个Region。分区大小一旦设置,则启动之后不会再变化。
          -在这里插入图片描述

          • Eden regions(年轻代-Eden区)
          • Survivor regions(年轻代-Survivor区)
          • Old regions(老年代)
          • Humongous regions(巨型对象区域)
          • Free regions(未分配区域,也会叫做可用分区)
    展开全文
  • 07 垃圾收集器

    2020-08-06 11:46:00
    1. Java垃圾收集器有哪些?常见垃圾回收器原理? Serial收集器 & Serial Old收集器:这个组合是Client模式下默认垃圾收集器。(通过-XX:+UseSerialGC强制开启)serial作用于新生代,采用复制算法。serial ...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET第一语言 本书着重介绍语言本身,比较少涉及应用,不错入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    以互相交换组件地方以互相交换组件地方 以互相交换组件地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 Microsoft.NET 概念 .NET 框架 C#语言在.NET 框架中作用及其特性...

空空如也

空空如也

1 2 3 4 5 6
收藏数 102
精华内容 40
关键字:

常见的单标记有哪些