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

多说wordpress插件yoast seo教程

多说wordpress插件,yoast seo教程,军事最新新闻头条,wordpress网站报价JVM内存模型 首先面试官会询问你在进行JVM调优之前#xff0c;是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区#xff08;1.7之后更改为元空间#xff0c;并直接使用系统内存#xff09;。 正常…JVM内存模型 首先面试官会询问你在进行JVM调优之前是否了解JVM内存模型的基础知识。这是一个重要的入门问题。JVM内存模型主要包括程序计数器、堆、本地方法栈、Java栈和方法区1.7之后更改为元空间并直接使用系统内存。 正常堆内存又分为年轻代和老年代。在Java虚拟机中年轻代用于存放新创建的对象而老年代则用于存放生命周期较长的对象。具体而言根据默认设置年轻代和老年代的比例通常为1:2。也就是说年轻代占整个堆内存的1/3而老年代占2/3。这样的比例设置可以更好地适应不同类型的对象的内存需求提高垃圾回收效率从而优化程序的性能。具体默认比例如下 JAVA类加载的全过程是怎样的 类加载器 APPClassLoader-ExtClassLoader-BooStrapClassLoader 具体获取类加载的代码示例如下 public class ClassLoaderExample {public static void main(String[] args) {// 获取当前类的类加载器APPClassLoaderClassLoader currentClassLoader ClassLoaderExample.class.getClassLoader();System.out.println(Current ClassLoader: currentClassLoader);// 获取扩展类加载器ExtClassLoaderClassLoader extensionClassLoader currentClassLoader.getParent();System.out.println(Extension ClassLoader: extensionClassLoader);// 获取引导类加载器Bootstrap ClassLoaderClassLoader bootstrapClassLoader extensionClassLoader.getParent();System.out.println(Bootstrap ClassLoader: bootstrapClassLoader);} }什么是双亲委派机制及其作用 想知道双亲委派机制肯定需要对源码有一些了解否则只能靠背具体源码如下 protected Class? loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// First, check if the class has already been loadedClass? c findLoadedClass(name);if (c null) {long t0 System.nanoTime();try {if (parent ! null) {c parent.loadClass(name, false);} else {c findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {// ClassNotFoundException thrown if class not found// from the non-null parent class loader}if (c null) {// If still not found, then invoke findClass in order// to find the class.long t1 System.nanoTime();c findClass(name);// this is the defining class loader; record the statssun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}}简单来说双亲委派机制指的是当一个类需要被加载时它的加载请求会被委托给它的父类加载器父类加载器会先尝试加载这个类如果加载成功就返回如果加载失败则会将加载请求再委托给它的父类加载器直到最顶层的启动类加载器Bootstrap ClassLoader。只有当最顶层的启动类加载器也无法加载时才会由当前类加载器自己来进行加载。 使用双亲委派机制来加载类的好处是可以确保类的加载是由低层次的加载器向高层次的加载器进行委托从而保证了类的唯一性和安全性。这样做可以避免出现java本地类被底层加载器加载的情况。 加载过程 分为三大部分 加载 -》 连接 -》 初始化 加载Loading是指将类的字节码文件加载到内存中并在方法区创建一个代表该类的Class对象。加载过程由类加载器完成。 连接Linking分为三个阶段验证Verification、准备Preparation和解析Resolution。 验证Verification验证阶段主要对类的字节码进行验证确保字节码的结构和语义是合法的。这个阶段主要包括以下几个方面的验证文件格式验证、元数据验证、字节码验证和符号引用验证。 准备Preparation准备阶段是为类的静态变量分配内存空间并设置默认初始值。这个阶段不会执行任何Java代码只是简单地分配内存。 解析Resolution解析阶段是将类的符号引用替换为直接引用的过程。符号引用指的是用一组符号来描述所引用的目标而直接引用是直接指向目标的指针、句柄或偏移量。解析阶段主要完成虚拟机对类、接口、字段和方法的解析。 初始化Initialization是类加载的最后一个阶段主要是对类的静态变量进行赋值和执行静态代码块实际上就是我们写的代码块。初始化阶段是类加载的重要阶段只有在初始化阶段才会真正执行类中的Java代码。初始化阶段由虚拟机自动触发主要有两种情况主动引用和被动引用。主动引用是指对类的主动使用例如创建类的实例、访问类的静态变量和静态方法等。被动引用则是指对类的被动使用不会触发类的初始化例如通过子类引用父类的静态变量。 一个对象从加载到JVM再到被GC清除都经历了什么过程 当一个对象从加载到JVM再到被GC清除它经历了以下过程 加载对象的类文件被加载到JVM中的方法区也称为永久代或元空间并在方法区中创建一个代表该类的Class对象。 申请空间在对象生成之前对象在堆内存中申请一块空间对象的实例变量会被赋予默认初始值。 初始化对象属性进行初始化。 连接对象和栈中的引用建立连接使得该对象可以被访问。 年龄划分对象被分配到新生代的Eden区并初始年龄为1。每个对象的年龄由对象头中的年龄标识位通常是4位表示所以一个对象的最大年龄为15。 Minor GC当新生代的Eden区空间不足时会触发Minor GC。在Minor GC中存活的对象会被复制到Survivor区域通常是from区和to区同时年龄会增加。经过多次复制和年龄增加后对象会进入老年代。 Full GC当老年代空间不足或者进行整体内存回收时会触发Full GC。Full GC会对整个堆内存进行回收包括新生代和老年代。 对象回收经过GC后不再被引用的对象会被GC清除释放内存空间。 需要注意的是当前方法结束栈中的指针会先移除掉当发生Full GC时如果一个对象被回收它的内存分配将会被清除即该对象所占用的内存将被释放。 怎么确定一个对象到底是不是垃圾 什么是GC Root? 有两种确认方法一是引用计数法二是根可达性算法 引用计数法每当一个对象被引用一次它的引用计数就会加1直到引用计数变为0时该对象就被判定为垃圾对象。这是JDK 1.4之前使用的算法但它存在一个明显的问题即当两个对象相互引用时它们的引用计数永远不会变为0导致无法回收这些对象进而可能导致内存泄漏和内存溢出问题。 根可达性算法根可达性算法是目前主要使用的算法。它基于一个简单的概念即从一组称为GC Roots的根对象开始通过一系列引用关系来判断对象是否可达。如果一个对象无法通过任何引用关系与GC Roots相连那么该对象就被判定为垃圾对象。一旦确定了没有连接到GC Roots的对象垃圾收集器就会回收这些对象。 GC Roots包括类的静态变量、常量池、class类以及方法栈中的变量。这些对象被认为是程序的起始点通过它们可以追溯到所有其他对象的引用关系。 JVM有哪些垃圾回收算法 MarkSweep标记清除算法目的是将垃圾标记后直接清楚垃圾这样会导致产生过多的内存碎片当分配大对象时可能会导致full gc又或者直接内存溢出。 Copying拷贝算法拷贝算法Copying牺牲了一半的内存空间只使用其中一半进行分配。在标记存活对象后将对象整体迁移至另一半内存空间减少内存碎片但牺牲了可使用空间。 MarkCompack标记压缩算法为了解决拷贝算法的缺陷就提出了标记压缩算法。这种算法在标记阶段跟标记清除算法是一样的但是在完成标记之后不是直接清理垃圾内存而是将存活对象往一端移动然后将端边界以外的所有内存直接清除。 JVM有哪些垃圾回收器 Serial: 单线程垃圾回收器使用复制算法。主要适用于小型应用程序和单核处理器。 Serial Old: 老年代单线程垃圾回收器使用标记-整理算法。适用于较小的应用程序和单核处理器对于大型应用程序可能会导致停顿时间较长。 ParNew: 年轻代多线程垃圾回收器使用复制算法。与Serial相比ParNew可以利用多个线程进行垃圾回收提高回收效率。 Parallel Scavenge: 年轻代多线程垃圾回收器使用复制算法。目标是尽可能地减少垃圾收集的停顿时间适用于对系统吞吐量要求较高的应用程序。 Parallel Old: 老年代多线程垃圾回收器使用标记整理算法。与Serial Old相比Parallel Old可以利用多个线程进行垃圾回收提高回收效率。 CMS: 老年代多线程并发垃圾回收器默认使用标记清除算法可配置标记整理算法。CMS的目标是减少垃圾收集的停顿时间适用于对响应时间要求较高的应用程序。 G1: 基于分代的垃圾回收器已去除物理上的年轻代和老年代概念。使用region块来保存和分配内存整体上使用标记整理算法微观上使用复制算法。G1的目标是在有限的时间内获得可控制的停顿时间适用于大型应用程序和对响应时间要求较高的应用程序。 什么是STW STWStop The World是指在垃圾回收过程中所有应用程序的线程都会被暂停只有垃圾回收线程在执行垃圾回收操作。这意味着在STW期间应用程序无法继续执行任何任务可能会导致一些延迟和性能问题。 减少STW时间是垃圾回收优化的一个重要目标。JVM的垃圾回收器会不断进行优化以减少STW时间使应用程序的暂停时间尽可能短。不同的垃圾回收器有不同的优化策略和算法以满足不同场景下的需求。 STW都发生在那些阶段 抛开单线程和多线程单一停顿时间不看只看下CMS和G1垃圾回收器 CMS共分为初始标记并发标记重新标记并发回收四个阶段其中初始标记和重新标记将会进行STW但是拉开了STW的战线所以总的停顿时间缩小了但是由于他是在跟工作线程同时进行回收所以肯定会产生浮动垃圾 G1共分为初始标记并发标记重新标记筛选回收四个阶段和CMS逻辑相同但是筛选回收将会进行计算jvm会判断回收成本并执行回收计划来优先回收哪些对象 三色标记 三色标记是指将对象分为三个不同的颜色白色、灰色和黑色。是CMSConcurrent Mark Sweep的标记算法 白色表示对象未被访问过也就是未被标记为存活对象。 灰色表示对象已经被访问过但它引用的其他对象还未被标记。 黑色表示对象已经被访问过并且它引用的其他对象也都被标记。 在并行标记阶段CMS会先将根节点标记为灰色然后并行地遍历对象引用将引用的对象标记为灰色并将其加入标记队列。当标记队列为空时标记阶段结束。 然而由于并行标记与应用程序执行是同时进行的可能会导致在标记阶段结束后仍然存在引用发生变化的情况比如引用删除或引用转变。为了解决这个问题CMS需要进行重新标记的过程。重新标记会遍历所有的灰色对象并将它们标记为黑色。这样可以确保所有的引用关系都被正确地标记并且不会错误地回收正在使用的对象。 如何进行JVM调优 JVM调优主要就是通过定制JVM运行参数来提高JAVA应用程度的运行数据 JVM参数有哪些 JVM参数大致可以分为三类 标注指令 -开头这些是所有的HotSpot都支持的参数。可以用java -help 打印出来。非标准指令 -X开头这些指令通常是跟特定的HotSpot版本对应的。可以用java -X 打印出来。不稳定参数 -XX 开头这一类参数是跟特定HotSpot版本对应的并且变化非常大。详细的文档资料非常少。在JDK1.8版本下有几个常用的不稳定指令 java -XX:PrintCommandLineFlags 查看当前命令的不稳定指令。java -XX:PrintFlagsInitial 查看所有不稳定指令的默认值。java -XX:PrintFlagsFinal 查看所有不稳定指令最终生效的实际值 JVM调优的开发者工具 JVM调优通常需要借助一些开发者工具来辅助。阿里开源的Arthas就是一款非常强大的Java诊断工具它可以帮助开发人员进行实时的性能分析和问题排查。 Arthas具有丰富的功能比如查看Java虚拟机的运行状态、监控方法执行时的参数和返回值、查看线程状态和运行时间、查看类加载和字节码等。它还支持在运行时修改类的方法体和实例状态以及记录方法调用堆栈等功能。 使用Arthas开发人员可以方便地发现性能瓶颈和问题并进行针对性的优化。它在Java开发中非常受欢迎尤其是在分布式系统和微服务架构中的性能调优中发挥了重要作用。 当然除了Arthas还有其他一些常用的JVM调优工具比如VisualVM、JConsole、JProfiler等开发人员可以根据自己的需要选择适合自己的工具来进行JVM调优。 官方文档地址: https://arthas.aliyun.com/doc/ 总结 JVM调优确实不像开发中常见的可视化界面工具那样直观而更多地需要基于底层的知识和经验来解决问题。JVM调优的确没有固定的定性规则但可以根据一些常见的性能问题和优化思路来进行思考和回答。 在面试时如果遇到JVM调优相关的问题可以按照以下思路来回答 首先了解JVM的基本架构和垃圾回收机制。这包括堆、栈、方法区等内存结构以及各种垃圾回收器的特点和工作原理。 掌握常见的性能问题和优化手段。例如内存泄漏、频繁的Full GC、长时间的STW等问题可以结合具体情况提出相应的解决方案。 熟悉一些性能监控和分析工具。如前面提到的Arthas、VisualVM、JConsole等可以介绍自己使用过的工具并举例说明如何利用这些工具进行性能分析和问题排查。 强调实践经验和解决问题的思路。虽然没有固定的定性规则但可以根据自己的实践经验和理解提出一些常见的优化思路和原则比如减少对象的创建和销毁、合理配置内存参数、优化算法和数据结构等。 总之在回答JVM调优相关的面试题时除了记住一些常见的问题和解决方案更重要的是展示出自己的思考和解决问题的能力。 我是努力的小雨一名 Java 服务端码农潜心研究着 AI 技术的奥秘。我热爱技术交流与分享对开源社区充满热情。同时也是一位掘金优秀作者、腾讯云内容共创官、阿里云专家博主、华为云云享专家。 我将不吝分享我在技术道路上的个人探索与经验希望能为你的学习与成长带来一些启发与帮助。 欢迎关注努力的小雨
http://www.hyszgw.com/news/117388/

相关文章:

  • 芜湖市建设办网站来宾城乡建设局网站
  • 城乡建设杂志官方网站搜索关键词排名查询
  • 公司网站建设情况说明书主机托管业务
  • 外贸建站与推广如何做wordpress公众平台
  • 网站建设的管理免费网页搭建
  • 米拓cms建站系统手把手教 个人网站开发
  • 哪个网站有学做内帐的视频工贸一体化企业建设电子商务网站的误区
  • thinkphp 做门户网站wordpress 产品缩略图
  • 浅谈天猫的电子商务网站建设机械零部件加工网
  • 网站建设c云世家宋南南张家港网站建设
  • 来宾 网站建设推广赚钱的微信小程序
  • 版本设计网站工作室怎么赚钱
  • 电商网站规划与设计论文手机网站建设代码
  • 深圳珠宝网站设计广告片
  • 邗江区做网站wordpress页面的排序
  • 做报价在哪个网站询价wordpress 自定义模版
  • 如何拿高权重网站外链进行互换?网站做很多关键词
  • 南京谁做免费网站找人做app网站吗
  • 红安县城乡建设局官方网站公司设计网站需要多久
  • 济南公司网站建设公司九千营销工作室介绍
  • 怎么做网站里的资讯天津网站吗
  • .net 电子商务网站源码网站流量 用什么表示
  • 校园网站建设开题报告好的响应式网站
  • 网站设计一般要求东莞市网络seo推广价格
  • 建设个人银行网站好的装修公司哪家好
  • 有个域名怎样做网站中国住房和城乡建设部查询网站6
  • 资讯网站手机网站模板wordpress 最简单皮肤
  • 泉州效率网络网站建设成都大型网站维护公司
  • 网站建设哪家公司好网站建设大学生做网站步骤
  • 网赌网站国外空间wordpress 获取文章标题