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

塘沽做网站公司12306网站开发商

塘沽做网站公司,12306网站开发商,小县城做网站,网络规划设计的步骤包括哪些总览 在对系统进行性能相关问题的故障排除时#xff0c;内存优化是一个需要深入分析每个系统在内存中存储的内容#xff0c;存储时间和访问模式的地方。 这篇文章是要在背景信息上进行注释#xff0c;并在此工作中要注意一些要点#xff0c;这些工作要专门针对基于Java的实… 总览 在对系统进行性能相关问题的故障排除时内存优化是一个需要深入分析每个系统在内存中存储的内容存储时间和访问模式的地方。 这篇文章是要在背景信息上进行注释并在此工作中要注意一些要点这些工作要专门针对基于Java的实现因为深入了解JVM行为在此过程中非常有益。 Java语言通过在很大程度上照顾内存管理从而将重点放在其余逻辑上为开发人员提供了许多便利。 仍然对Java到底是如何做的有一个很好的了解合理化我们在Java实现中遵循的几种最佳实践并帮助更好地设计程序并认真思考某些方面从长远来看这些方面以后可能导致内存泄漏和系统稳定性。 Java Garbage Collector在这方面起着重要作用它负责通过删除内存垃圾来释放内存。 这些信息可广泛获得但我在这里汇总以供参考。 :) JVM使Java代码能够以独立于硬件和OS的方式运行。 它在由操作系统充当物理机的另一种抽象的操作系统分配给自己的进程的内存位置上运行。 JVM可以基于[1]中发布​​的开放标准来实现众所周知的实现是Oracle Hotspot JVM几乎与Android OS中使用的开放源代码版本OpenJDKIBM J9JRockit和Dalvik VM有所不同。 简而言之JVM使用从平台分配给它的资源来加载并执行已编译的Java字节代码它在上面运行。 类加载器 将字节码加载到JVM内存中加载链接验证准备解决–如果发出失败的NoClassDef发现异常初始化引导类加载器扩展类加载器应用程序类加载器 内存和运行时数据区 尽管它并不全面但它涵盖了以下几个重要部分。 本机方法堆栈– Java本机库堆栈它与平台有关主要是用C语言编写的。 JVM堆栈每个线程保留当前执行的方法堆栈跟踪。如果未设置适当的中断则递归方法调用可能导致堆栈被填充和溢出java.lang.StackOverFlowError 。-Xss JVM选项允许配置堆栈大小。PC寄存器程序计数器指向每个线程要执行的下一条指令。 方法区域存储类数据大小受XXMaxPermSize限制 PermGen空间默认为64MB如果要服务于加载数百万个类的大型服务器应用程序则可以通过增加调整来避免OOM问题PermGen空间。从Java 8开始自此以后尽管允许对其进行微调和限制但默认情况下java8中将此PermGen空间称为没有限制的元空间HeapXmsXmx运行时常量池 执行引擎 该引擎执行通过类加载器分配给运行时数据区域的字节码。 它利用解释器垃圾收集器热点分析器JIT编译器来优化程序执行。 有关JVM体系结构的更多详细信息请参见[2]。 现在我们知道了垃圾收集器在JVM体系结构中的位置。 让我们深入了解内部。 垃圾收集器 这是Java自动内存管理过程它删除了不再使用的对象。 接下来是问题它如何决定是否使用该对象。 它定义了两类对象 活动对象 –从另一个对象引用的可访问对象。 最终引用链接将到达根该根是创建整个对象图的主线程。 死对象 –只是躺在堆中的其他对象未引用的不可访问对象。 此分类和垃圾回收基于以下两个事实。 1.大多数对象在创建后很快就变得无法访问。 通常短暂对象仅存在于方法上下文中。 2.老物件很少指年轻物件。 例如寿命长的缓存几乎不会从中引用较新的对象。 新创建的对象实例驻留在Java堆中该堆可以进行不同的生成如下所示。 垃圾收集是通过称为“垃圾收集器”的守护程序线程完成的该线程将对象引导通过堆中的不同空间。 垃圾收集分3个步骤进行。 1.标记 –从根开始并遍历对象图将可访问对象标记为活动对象。 2.扫描 –删除未标记的对象。 3.紧凑 –对内存进行碎片整理使活动对象的分配连续。 这被认为是最耗时的过程。 堆区域划分如下。 旧的终身使用的代 –可以存活很长时间的对象请留在这里直到其被标记为无法访问并在遍及整个堆的主要垃圾收集中清理为止。 年轻一代 –进一步分为3个伊甸园空间和2个幸存者空间。 垃圾收集分为两个阶段“次要”或“主要”。 这两个垃圾回收都是停止运行的操作它们停止所有其他内存访问。 应用程序可能不会感觉到次要GC因为它仅扫描年轻一代空间会很小。 垃圾收集器 内存生命周期如下图所示如上图所示。 1.新创建的对象驻留在Eden空间中。 就像人类从伊甸园开始的一样在伊甸园空间变满之前它一直在不断增加新的物体。 2.当Eden空间已满时将运行次要GC标记活动对象然后将这些活动对象移至“幸存者从”空间然后扫掠空闲的Eden空间。 3.然后在程序运行时继续用新对象填充Eden空间。 现在当Eden空间已满时我们先前也已将“幸存者来自”空间中的对象移动了。 次要GC在这两个空间中运行标记对象然后将剩余的活动对象整体移至其他幸存者空间。 想知道为什么不将有生命的物体从伊甸园空间复制到“幸存者从”的剩余空间而不是全部转移到另一个幸存者空间 好吧事实证明在紧凑的步骤中将所有其他对象移到另一个对象上要比压缩其中带有对象的区域更为有效。 4.此循环将在幸存者空间之间重复移动对象直到达到配置的阈值-XX MaxTenuringThreshold 。 它跟踪每个对象生存了多少个GC循环。 当达到阈值时这些对象将被移至保管空间。 5.随着时间的流逝如果使用权空间也被填满则主GC将启动并遍历整个堆内存空间以执行GC步骤。 这种暂停可以在人际互动中感觉到这是不希望的。 当内存泄漏或长时间驻留大量高速缓存时使用期限将被占用。 在这种时候这些对象甚至可能没有被检测为死亡。 这会导致主要GC频繁运行因为它检测到永久性空间已满但是由于无法清除任何内容因此无法清理足够的内存。 当内存不足时日志中的错误“ java.lang.OutOfMemoryError”将清楚地提示我们。 另外如果我们看到频繁使用大量内存的CPU频繁运行则可能是由于某些内存处理问题需要引起注意而导致GC频繁运行的征兆。 在专注于JVM微调专注于内存利用率时主要的决定因素是响应性/延迟和吞吐量中更关键的因素。 如果在批处理中吞吐量是最重要的那么如果可以提高主要吞吐量我们可以在运行主要GC时暂停一下来妥协。 因为应用程序偶尔的响应速度可能不是那里的问题。 另一方面如果像在基于UI的应用程序中一样响应性至关重要则应尝试避免使用大型GC。 也就是说这样做并没有帮助。 例如我们可以通过增加年轻一代的空间来延迟大型GC。 但是随后小型GC将开始花费大量时间因为它现在需要遍历并压缩巨大的空间。 因此要拥有正确的尺寸就需要谨慎地实现年轻人和老年人之间的正确比例。 有时这甚至可以进入应用程序设计细节以通过对象创建模式和缓存位置来微调内存使用情况。 这将是另一篇文章的主题该文章分析堆转储和火焰图以确定要缓存的最佳内容。 垃圾收集器 由于垃圾回收的作用对应用程序的性能有很大的影响因此工程师们花费了大量的精力来改进它。 结果是我们可以根据需求选择最佳的垃圾收集器。 以下是不完整的选项列表。 1.串行收集器 在单个线程中运行。 仅适用于基本应用。 一个线程执行垃圾回收。 它只会使世界处于标记和重新标记阶段。 其余的工作在应用程序运行时完成并且不等待旧的版本已满。 当内存空间大具有大量CPU来满足并发执行时以及当应用程序要求最短的暂停时间和响应能力成为关键因素时这是一个不错的选择。 过去这是大多数Web应用程序中最受欢迎的。 3.并行收集器 该收集器使用多个CPU。 它等待旧的一代充满或接近充满但是当它运行时它停止了世界。 多个线程进行标记清除和压缩使垃圾收集更快。 当内存不是很大并且CPU数量受到限制时这是一个很好的选择可以满足对吞吐量的要求可以承受暂停。 4. G1垃圾优先收集器1.7以上 通过允许配置例如GC运行时暂停时间此选项可提高垃圾收集的可预测性。 据说在并行性和并发性两方面都具有优势。 它将内存划分为多个区域每个区域都被视为伊甸园幸存者或保有权空间。 如果该区域有更多无法访问的对象则将首先对该区域进行垃圾收集。 版本中的默认垃圾收集器 Java 7 –并行GC Java 8 –并行GC Java 9 – G1 GC Java 10 – G1 GC Java 11 – G1 GCZGC与Epsilon一起作为实验功能提供 Java 12 – G1 GC引入了Shenandoah GC。仅适用于OpenJDK。 垃圾收集器的优化参数 除非有默认设置要解决的问题或者是经过长时间的考虑并且经过长时间的生产级别的负载模式验证后才能确定否则调优JVM的经验法则是不这样做的。 这是因为Java Ergonomics已经取得了很大进步并且如果应用程序不难看的话大多数时候将能够执行很多优化。 在[5]中可以找到选项的完整列表包括配置堆空间的大小阈值要使用的垃圾收集器的类型等。 诊断 除堆转储外以下配置还有助于通过GC行为诊断内存问题。 -XX-PrintGCDetails –打印垃圾收集的详细信息。 -Xloggc文件名 –将GC日志记录详细信息打印到给定文件。 -XX-UseGCLogFileRotation –完成上述配置后启用GC日志文件旋转。 -XX-HeapDumpOnOutOfMemoryError –如果发生OOM错误则转储堆内容以进行进一步分析。 -XXOnOutOfMemoryError ” cmd args ””; cmd args ””” –如果发生OOM错误则要运行的命令集。 遇到错误时允许执行任何自定义任务。 我们将在另一篇文章中讨论诊断和分析细节。 干杯! [1] – https://docs.oracle.com/javase/specs/index.html [2] – https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.6 [2] – Oracle垃圾收集调优指南– https://docs.oracle.com/javase/9​​/gctuning/ergonomics.htm#JSGCT-GUID-DB4CAE94-2041-4A16-90EC-6AE3D91EC1F1 [3] –新的Java垃圾收集器– https://blogs.oracle.com/javamagazine/understanding-the-jdks-new-superfast-garbage-collectors [4] –可用的收藏家– https://docs.oracle.com/cn/java/javase/13/gctuning/available-collectors.html#GUID-F215A508-9E58-40B4-90A5-74E29BF3BD3C [5] – JVM选项– https://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html 翻译自: https://www.javacodegeeks.com/2020/05/jvm-garbage-collection-and-optimizations.html
http://www.huolong8.cn/news/383672/

相关文章:

  • 手机新手学做网站网站建设有什么证
  • 网站建设网站维护万网域名安装wordpress
  • 阜新市项目建设网站wordpress 技术主题
  • 博客论坛网站开发做网站怎么上词
  • 团购网站怎么做网站文章发布
  • 怎么管理购物网站设计通网站建设
  • 苏州姑苏区网站建设公司形象vi设计
  • No酒店网站建设如何做网站对话框
  • 英文网站seo 谷歌英文网页设计欣赏
  • 现在建网站做推广能赚钱吗免费ppt制作
  • 济南多语言网站建设网站静态页模板
  • 广州专业网站建设公司建筑工程网首页
  • 做中介最好用的网站江阴网站制作
  • “设计网站”备案的网站每年都要备案么
  • 网站建设就业方向搜索引擎优化策略不包括
  • 济宁网站建设 悍诺苏州网络推广优化
  • 平顶山哪里有做网站的公司番禺微网站建设
  • 做网站需要哪些知识网页浏览器主要通过什么协议
  • html5 国外网站html网页设计模板免费下载
  • 企业网站建设合同方案wordpress博文模板
  • 用php做企业网站的可行性Wordpress 大数据量优化
  • 网站分站系遵化建设局网站
  • 保山网站建设优化wap网站psd
  • 网站在线支付接口清河网站建设设计费用
  • 响应式网站开发方法分成型网站建设
  • 邢台集团网站建设价格seo wordpress主题
  • 如何把自己电脑做网站服务器吗平面设计广告设计
  • 网站建设完成后怎么上传服务器广东学校网站建设公司
  • 做美团网站需要多少钱召开网站建设培训会
  • 上传了网站程序后成立一个网站