当前位置: 首页 > news >正文

带动画引导的网站数据中台厂商

带动画引导的网站,数据中台厂商,如何宣传公司,十堰网站建设公司不管是BAT面试#xff0c;还是工作实践中的JVM调优以及参数设置#xff0c;或者内存溢出检测等#xff0c;都需要涉及到Java虚拟机的内存模型、内存分配#xff0c;以及回收算法机制等#xff0c;这些都是必考、必会技能。 JVM内存模型 JVM内存模型可以分为两个部分… 不管是BAT面试还是工作实践中的JVM调优以及参数设置或者内存溢出检测等都需要涉及到Java虚拟机的内存模型、内存分配以及回收算法机制等这些都是必考、必会技能。 JVM内存模型 JVM内存模型可以分为两个部分如下图所示堆和方法区是所有线程共有的而虚拟机栈本地方法栈和程序计数器则是线程私有的。 1. 堆Heap 堆内存是所有线程共有的可以分为两个部分年轻代和老年代。下图中的Perm代表的是永久代但是注意永久代并不属于堆内存中的一部分同时jdk1.8之后永久代也将被移除。 堆是java虚拟机所管理的内存中最大的一块内存区域也是被各个线程共享的内存区域该内存区域存放了对象实例及数组但不是所有的对象实例都在堆中。其大小通过-Xms最小值和-Xmx最大值参数设置最大最小值都要小于1G前者为启动时申请的最小内存默认为操作系统物理内存的1/64后者为JVM可申请的最大内存,默认为物理内存的1/4默认当空余堆内存小于40%时JVM会增大堆内存到-Xmx指定的大小可通过-XX:MinHeapFreeRation来指定这个比列当空余堆内存大于70%时JVM会减小堆内存的大小到-Xms指定的大小可通过XX:MaxHeapFreeRation来指定这个比列当然为了避免在运行时频繁调整Heap的大小通常-Xms与-Xmx的值设成一样。堆内存 新生代老生代持久代。在我们垃圾回收的时候我们往往将堆内存分成新生代和老生代大小比例12新生代中由Eden和Survivor0Survivor1组成三者的比例是811新生代的回收机制采用复制算法在Minor GC的时候我们都留一个存活区用来存放存活的对象真正进行的区域是Eden其中一个存活区当我们的对象时长超过一定年龄时默认15可以通过参数设置将会把对象放入老生代当然大的对象会直接进入老生代。老生代采用的回收算法是标记整理算法。 2. 方法区Method Area 方法区也称”永久代“它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB最大值为64MB64位JVM由于指针膨胀默认是85M可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。它是一片连续的堆空间永久代的垃圾收集是和老年代old generation捆绑在一起的因此无论谁满了都会触发永久代和老年代的垃圾收集。不过一个明显的问题是当JVM加载的类信息容量超过了参数-XXMaxPermSize设定的值时应用将会报OOM的错误。参数是通过-XX:PermSize和-XXMaxPermSize来设定的。 3.虚拟机栈JVM Stack 描述的是java方法执行的内存模型每个方法被执行的时候都会创建一个”栈帧”,用于存储局部变量表包括参数、操作栈、方法出口等信息。每个方法被调用到执行完的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。声明周期与线程相同是线程私有的。栈帧由三部分组成局部变量区、操作数栈、帧数据区。局部变量区被组织为以一个字长为单位、从0开始计数的数组和局部变量区一样操作数栈也被组织成一个以字长为单位的数组。但和前者不同的是它不是通过索引来访问的而是通过入栈和出栈来访问的可以看作为临时数据的存储区域。除了局部变量区和操作数栈外java栈帧还需要一些数据来支持常量池解析、正常方法返回以及异常派发机制。这些数据都保存在java栈帧的帧数据区中。 局部变量表: 存放了编译器可知的各种基本数据类型、对象引用引用指针并非对象本身其中64位长度的long和double类型的数据会占用2个局部变量的空间其余数据类型只占1个。局部变量表所需的内存空间在编译期间完成分配当进入一个方法时这个方法需要在栈帧中分配多大的局部变量是完全确定的在运行期间栈帧不会改变局部变量表的大小空间。 4.本地方法栈Native Stack 与虚拟机栈基本类似区别在于虚拟机栈为虚拟机执行的java方法服务而本地方法栈则是为Native方法服务。栈的空间大小远远小于堆 5.程序计数器PC Register 是最小的一块内存区域它的作用是当前线程所执行的字节码的行号指示器在虚拟机的模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。 6.直接内存 直接内存并不是虚拟机内存的一部分也不是Java虚拟机规范中定义的内存区域。jdk1.4中新加入的NIO引入了通道与缓冲区的IO方式它可以调用Native方法直接分配堆外内存这个堆外内存就是本机内存不会影响到堆内存的大小. JVM垃圾回收算法 1.标记清除 原理 从根集合节点进行扫描标记出所有的存活对象最后扫描整个内存空间并清除没有标记的对象即死亡对象 适用场合 存活对象较多的情况下比较高效 适用于年老代即旧生代 缺点 标记清除算法带来的一个问题是会存在大量的空间碎片因为回收后的空间是不连续的这样给大对象分配内存的时候可能会提前触发full gc。 2.复制算法 原理 从根集合节点进行扫描标记出所有的存活对象并将这些存活的对象复制到一块儿新的内存图中下边的那一块儿内存上去之后将原来的那一块儿内存图中上边的那一块儿内存全部回收掉 适用场合 存活对象较少的情况下比较高效 扫描了整个空间一次标记存活对象并复制移动 适用于年轻代即新生代基本上98%的对象是”朝生夕死”的存活下来的会很少 缺点 需要一块儿空的内存空间 需要复制移动对象 3.标记整理 原理 从根集合节点进行扫描标记出所有的存活对象最后扫描整个内存空间并清除没有标记的对象即死亡对象可以发现前边这些就是标记-清除算法的原理清除完之后将所有的存活对象左移到一起。 适用场合 用于年老代即旧生代 缺点 需要移动对象若对象非常多而且标记回收后的内存非常不完整可能移动这个动作也会耗费一定时间 扫描了整个空间两次第一次标记存活对象第二次清除没有标记的对象 优点 不会产生内存碎片 4.增量算法 增量算法的基本思想是如果一次性将所有的垃圾进行处理需要造成系统长时间的停顿那么就可以让垃圾收集线程和应用程序线程交替执行。每次垃圾收集线程只收集一小片区域的内存空间接着切换到应用程序线程。依次反复直到垃圾收集完成。使用这种方式由于在垃圾回收过程中间断性地还执行了应用程序代码所以能减少系统的停顿时间。但是因为线程切换和上下文转换的消耗会使得垃圾回收的总体成本上升造成系统吞吐量的下降。 垃圾回收器 1.Serial收集器 Serial收集器是最古老的收集器它的缺点是当Serial收集器想进行垃圾回收的时候必须暂停用户的所有进程即stop the world。到现在为止它依然是虚拟机运行在client模式下的默认新生代收集器与其他收集器相比对于限定在单个CPU的运行环境来说Serial收集器由于没有线程交互的开销专心做垃圾回收自然可以获得最高的单线程收集效率。 2.ParNew收集器 ParNew收集器是Serial收集器新生代的多线程实现注意在进行垃圾回收的时候依然会stop the world只是相比较Serial收集器而言它会运行多条进程进行垃圾回收。 ParNew收集器在单CPU的环境中绝对不会有比Serial收集器更好的效果甚至由于存在线程交互的开销该收集器在通过超线程技术实现的两个CPU的环境中都不能百分之百的保证能超越Serial收集器。当然随着可以使用的CPU的数量增加它对于GC时系统资源的利用还是很有好处的。它默认开启的收集线程数与CPU的数量相同在CPU非常多譬如32个现在CPU动辄4核加超线程服务器超过32个逻辑CPU的情况越来越多了的环境下可以使用-XX:ParallelGCThreads参数来限制垃圾收集的线程数。 3.Parallel Scavenge收集器 Parallel是采用复制算法的多线程新生代垃圾回收器似乎和ParNew收集器有很多的相似的地方。但是Parallel Scanvenge收集器的一个特点是它所关注的目标是吞吐量Throughput。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值即吞吐量运行用户代码时间 / 运行用户代码时间 垃圾收集时间。停顿时间越短就越适合需要与用户交互的程序良好的响应速度能够提升用户的体验而高吞吐量则可以最高效率地利用CPU时间尽快地完成程序的运算任务主要适合在后台运算而不需要太多交互的任务。 4.CMS收集器 CMSConcurrent Mark Swep收集器是一个比较重要的回收器现在应用非常广泛我们重点来看一下CMS一种获取最短回收停顿时间为目标的收集器这使得它很适合用于和用户交互的业务。从名字Mark Swep就可以看出CMS收集器是基于标记清除算法实现的。它的收集过程分为四个步骤 初始标记initial mark 并发标记concurrent mark 重新标记remark 并发清除concurrent sweep 注意初始标记和重新标记还是会stop the world但是在耗费时间更长的并发标记和并发清除两个阶段都可以和用户进程同时工作。 不过由于CMS收集器是基于标记清除算法实现的会导致有大量的空间碎片产生在为大对象分配内存的时候往往会出现老年代还有很大的空间剩余但是无法找到足够大的连续空间来分配当前对象不得不提前开启一次Full GC。 为了解决这个问题CMS收集器默认提供了一个-XX:UseCMSCompactAtFullCollection收集开关参数默认就是开启的用于在CMS收集器进行FullGC完开启内存碎片的合并整理过程内存整理的过程是无法并发的这样内存碎片问题倒是没有了不过停顿时间不得不变长。虚拟机设计者还提供了另外一个参数-XX:CMSFullGCsBeforeCompaction参数用于设置执行多少次不压缩的FULL GC后跟着来一次带压缩的默认值为0表示每次进入Full GC时都进行碎片整理。 不幸的是它作为老年代的收集器却无法与jdk1.4中已经存在的新生代收集器Parallel Scavenge配合工作所以在jdk1.5中使用cms来收集老年代的时候新生代只能选择ParNew或Serial收集器中的一个。ParNew收集器是使用-XX:UseConcMarkSweepGC选项启用CMS收集器之后的默认新生代收集器也可以使用-XX:UseParNewGC选项来强制指定它。 5.G1收集器 G1收集器是一款面向服务端应用的垃圾收集器。HotSpot团队赋予它的使命是在未来替换掉JDK1.5中发布的CMS收集器。与其他GC收集器相比G1具备如下特点 并行与并发G1能更充分的利用CPU多核环境下的硬件优势来缩短stop the world的停顿时间。 分代收集和其他收集器一样分代的概念在G1中依然存在不过G1不需要其他的垃圾回收器的配合就可以独自管理整个GC堆。 空间整合G1收集器有利于程序长时间运行分配大对象时不会无法得到连续的空间而提前触发一次GC。 可预测的非停顿这是G1相对于CMS的另一大优势降低停顿时间是G1和CMS共同的关注点能让使用者明确指定在一个长度为M毫秒的时间片段内消耗在垃圾收集上的时间不得超过N毫秒。 在使用G1收集器时Java堆的内存布局和其他收集器有很大的差别它将这个Java堆分为多个大小相等的独立区域虽然还保留新生代和老年代的概念但是新生代和老年代不再是物理隔离的了它们都是一部分Region不需要连续的集合。 虽然G1看起来有很多优点实际上CMS还是主流。 与GC相关的常用参数 除了上面提及的一些参数下面补充一些和GC相关的常用参数 -Xmx: 设置堆内存的最大值。 -Xms: 设置堆内存的初始值。 -Xmn: 设置新生代的大小。 -Xss: 设置栈的大小。 -PretenureSizeThreshold: 直接晋升到老年代的对象大小设置这个参数后大于这个参数的对象将直接在老年代分配。 -MaxTenuringThrehold: 晋升到老年代的对象年龄。每个对象在坚持过一次Minor GC之后年龄就会加1当超过这个参数值时就进入老年代。 -UseAdaptiveSizePolicy: 在这种模式下新生代的大小、eden 和 survivor 的比例、晋升老年代的对象年龄等参数会被自动调整以达到在堆大小、吞吐量和停顿时间之间的平衡点。在手工调优比较困难的场合可以直接使用这种自适应的方式仅指定虚拟机的最大堆、目标的吞吐量 GCTimeRatio 和停顿时间 MaxGCPauseMills让虚拟机自己完成调优工作。 -SurvivorRattio: 新生代Eden区域与Survivor区域的容量比值默认为8代表Eden: Suvivor 8: 1。 -XX:ParallelGCThreads设置用于垃圾回收的线程数。通常情况下可以和 CPU 数量相等。但在 CPU 数量比较多的情况下设置相对较小的数值也是合理的。 -XX:MaxGCPauseMills设置最大垃圾收集停顿时间。它的值是一个大于 0 的整数。收集器在工作时会调整 Java 堆大小或者其他一些参数尽可能地把停顿时间控制在 MaxGCPauseMills 以内。 -XX:GCTimeRatio:设置吞吐量大小它的值是一个 0-100 之间的整数。假设 GCTimeRatio 的值为 n那么系统将花费不超过 1/1n 的时间用于垃圾收集。 你可能也喜欢: Java必考题目之JVM面试题目和答案 直通BAT必考题系列深入详解JVM内存模型与JVM参数详细配置直通BAT必考题系列JVM的4种垃圾回收算法、垃圾回收机制与总结直通BAT必考题系列7种JVM垃圾收集器特点优劣势、及使用场景4大JVM性能分析工具详解及内存泄漏分析方案 直通BAT必考题系列深入剖析JVM之G1收集器、及回收流程、与推荐用例
http://www.zqtcl.cn/news/640828/

相关文章:

  • 网站开发外包公司坑襄垣城乡建设管理局的网站
  • 网络公司怎么做网站常州新北区网站建设
  • 扬州专业外贸网站建设推广做详情页上什么网站找素材
  • 北京做网站设计招聘深圳市住房和建设局官网平台
  • 冻品网站建设网站头图设计
  • 手机网站分辨率做多大h5微网站建设多少钱
  • 网站制作软件下载公司怎么注册邮箱帐号
  • 做婚纱网站的图片园林设计
  • 濮阳公司建站淮北城市住建网
  • 建设银行网站打不开 显示停止工作专门做地图的网站
  • 有没有人一起做网站app网站建设方案
  • 洛阳网站建设兼职企业网站建设文案
  • 动漫制作贵州seo策略
  • asp网站建设项目实训该怎么跟程序员谈做网站
  • 网站软件资源iis不能新建网站
  • 网站设计的发展趋势西安市建设工程交易网
  • 做外贸收费的服装网站武钢建设公司网站
  • wordpress 全文搜索企业网站优化策略
  • 犀牛云做网站如何网站备案需要什么东西
  • wordpress星座网站建设与优化计入什么科莫
  • 外贸网站优化方案绵阳网站建设怎么做
  • 黑龙江省网站建设电商的运营推广
  • 惠州建站模板wordpress更换主题帖子封面不显示
  • 网站开发为什么不用cgi了营销型网站案例
  • 网站怎么做飘窗电子商城网站建设的实训内容
  • 怎样申请建网站做it公司网站
  • 一个网站费用给人做ppt的网站吗
  • 免费简历在线制作网站杭州市网站建设公司
  • 用家庭宽带做网站 没有8080端口可以吗汕头教育学会网站建设
  • 南通seo公司网站广东涂料网站建设