咸鱼网站交易付款怎么做特效相册网站源码
2026/6/9 18:30:52 网站建设 项目流程
咸鱼网站交易付款怎么做,特效相册网站源码,上海公司注册地址有什么要求,湖北省疾病预防控制中心#x1f9d1; 博主简介#xff1a;CSDN博客专家#xff0c;历代文学网#xff08;PC端可以访问#xff1a;https://literature.sinhy.com/#/?__c1000#xff0c;移动端可微信小程序搜索“历代文学”#xff09;总架构师#xff0c;15年工作经验#xff0c;精通Java编… 博主简介CSDN博客专家历代文学网PC端可以访问https://literature.sinhy.com/#/?__c1000移动端可微信小程序搜索“历代文学”总架构师15年工作经验精通Java编程高并发设计Springboot和微服务熟悉LinuxESXI虚拟化以及云原生Docker和K8s热衷于探索科技的边界并将理论知识转化为实际应用。保持对新技术的好奇心乐于分享所学希望通过我的实践经历和见解启发他人的创新思维。在这里我希望能与志同道合的朋友交流探讨共同进步一起在技术的世界里不断学习成长。技术合作请加本人wx注明来自csdnforeast_seaJava虚拟机面试题垃圾收集上1. 讲讲 JVM 的垃圾回收机制垃圾回收就是对内存堆中已经死亡的或者长时间没有使用的对象进行清除或回收。JVM 在做 GC 之前会先搞清楚什么是垃圾什么不是垃圾通常会通过可达性分析算法来判断对象是否存活。在确定了哪些垃圾可以被回收后垃圾收集器如 CMS、G1、ZGC要做的事情就是进行垃圾回收可以采用标记清除算法、复制算法、标记整理算法、分代收集算法等。2. 如何判断对象仍然存活通常有两种方式引用计数算法和可达性分析算法Java 使用的是可达性分析算法。什么是引用计数法每个对象有一个引用计数器记录引用它的次数。当计数器为零时对象可以被回收。但无法解决循环引用问题。例如两个对象互相引用但不再被其他对象引用它们的引用计数都不为零因此不会被回收。什么是可达性分析算法通过一组名为 “GC Roots” 的根对象进行递归扫描。那些无法从根对象到达的对象是不可达的可以被回收反之是可达的不会被回收。这也是 G1、CMS 等主流垃圾收集器使用的主要算法。做可达性分析的时候应该有哪些前置性的操作在进行垃圾回收之前JVM 会暂停所有正在执行的应用线程称为 Stop-the-World。这是因为可达性分析过程必须确保在执行分析时内存中的对象关系不会被应用线程修改。如果不暂停应用线程可能会出现对象引用的改变导致垃圾回收过程中判断对象是否可达的结果不一致从而引发严重的内存错误或数据丢失。3. Java 中可作为 GC Roots 的引用有哪几种所谓的 GC Roots就是一组必须活跃的引用不是对象它们是程序运行时的起点是一切引用链的源头。在 Java 中GC Roots 包括以下几种虚拟机栈中的引用方法的参数、局部变量等本地方法栈中 JNI 的引用类静态变量运行时常量池中的常量String 或 Class 类型1、虚拟机栈中的引用方法的参数、局部变量等来看下面这段代码publicclassStackReference{publicvoidgreet(){ObjectlocalVarnewObject();// 这里的 localVar 是一个局部变量存在于虚拟机栈中System.out.println(localVar.toString());}publicstaticvoidmain(String[]args){newStackReference().greet();}}在 greet 方法中localVar 是一个局部变量存在于虚拟机栈中可以被认为是 GC Roots。在 greet 方法执行期间localVar 引用的对象是活跃的因为它是从 GC Roots 可达的。当 greet 方法执行完毕后localVar 的作用域结束localVar 引用的 Object 对象不再由任何 GC Roots 引用假设没有其他引用指向这个对象因此它将有资格作为垃圾被回收掉 。2、本地方法栈中 JNI 的引用Java 通过 JNIJava Native Interface提供了一种机制允许 Java 代码调用本地代码通常是 C 或 C 编写的代码。当调用 Java 方法时虚拟机会创建一个栈帧并压入虚拟机栈而当它调用本地方法时虚拟机会通过动态链接直接调用指定的本地方法。JNI 引用是在 Java 本地接口JNI代码中创建的引用这些引用可以指向 Java 堆中的对象。// 假设的JNI方法publicnativevoidnativeMethod();// 假设在C/C中实现的本地方法/* * Class: NativeExample * Method: nativeMethod * Signature: ()V */JNIEXPORTvoidJNICALLJava_NativeExample_nativeMethod(JNIEnv*env,jobject thisObj){jobject localRef(*env)-NewObject(env,...);// 在本地方法栈中创建JNI引用// localRef 引用的Java对象在本地方法执行期间是活跃的}在本地C/C代码中localRef 是对 Java 对象的一个 JNI 引用它在本地方法执行期间保持 Java 对象活跃可以被认为是 GC Roots。一旦 JNI 方法执行完毕除非这个引用是全局的Global Reference否则它指向的对象将会被作为垃圾回收掉假设没有其他地方再引用这个对象。3、类静态变量来看下面这段代码publicclassStaticFieldReference{privatestaticObjectstaticVarnewObject();// 类静态变量publicstaticvoidmain(String[]args){System.out.println(staticVar.toString());}}StaticFieldReference 类中的 staticVar 引用了一个 Object 对象这个引用存储在元空间可以被认为是 GC Roots。只要 StaticFieldReference 类未被卸载staticVar 引用的对象都不会被垃圾回收。如果 StaticFieldReference 类被卸载这通常发生在其类加载器被垃圾回收时那么 staticVar 引用的对象也将有资格被垃圾回收如果没有其他引用指向这个对象。4、运行时常量池中的常量来看这段代码publicclassConstantPoolReference{publicstaticfinalStringCONSTANT_STRINGHello, World;// 常量存在于运行时常量池中publicstaticfinalClass?CONSTANT_CLASSObject.class;// 类类型常量publicstaticvoidmain(String[]args){System.out.println(CONSTANT_STRING);System.out.println(CONSTANT_CLASS.getName());}}在 ConstantPoolReference 中CONSTANT_STRING 和 CONSTANT_CLASS 作为常量存储在运行时常量池。它们可以用来作为 GC Roots。这些常量引用的对象字符串Hello, World和 Object.class 类对象在常量池中只要包含这些常量的 ConstantPoolReference 类未被卸载这些对象就不会被垃圾回收。4. finalize()方法了解吗有什么作用用一个不太贴切的比喻垃圾回收就是古代的秋后问斩finalize()就是刀下留人在人犯被处决之前还要做最后一次审计青天大老爷看看有没有什么冤情需不需要刀下留人。如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链那它将会被第一次标记随后进行一次筛选筛选的条件是此对象是否有必要执行 finalize()方法。如果对象在在 finalize()中成功拯救自己——只要重新与引用链上的任何一个对象建立关联即可譬如把自己 this 关键字赋值给某个类变量或者对象的成员变量那在第二次标记时它就”逃过一劫“但是如果没有抓住这个机会那么对象就真的要被回收了。5. 垃圾收集算法了解吗垃圾收集算法主要有三种分别是标记-清除算法、标记-复制算法和标记-整理算法。说说标记-清除算法标记-清除算法分为两个阶段标记标记所有需要回收的对象清除回收所有被标记的对象优点是实现简单缺点是回收过程中会产生内存碎片。说说标记-复制算法标记-复制算法可以解决标记-清除算法的内存碎片问题因为它将内存空间划分为两块每次只使用其中一块。当这一块的内存用完了就将还存活着的对象复制到另外一块上面然后清理掉这一块。缺点是浪费了一半的内存空间。说说标记-整理算法标记-整理算法是标记-清除复制算法的升级版它不再划分内存空间而是将存活的对象向内存的一端移动然后清理边界以外的内存。缺点是移动对象的成本比较高。说说分代收集算法分代收集算法是目前主流的垃圾收集算法它根据对象存活周期的不同将内存划分为几块一般分为新生代和老年代。新生代用复制算法因为大部分对象生命周期短。老年代用标记-整理算法因为对象存活率较高。为什么要用分代收集呢分代收集算法的核心思想是根据对象的生命周期优化垃圾回收。新生代的对象生命周期短使用复制算法可以快速回收。老年代的对象生命周期长使用标记-整理算法可以减少移动对象的成本。6. Minor GC、Major GC、Mixed GC、Full GC 都是什么意思Minor GC 也称为 Young GC是指发生在年轻代Young Generation的垃圾收集。年轻代包含 Eden 区以及两个 Survivor 区。Major GC 也称为 Old GC主要指的是发生在老年代的垃圾收集。CMS 收集器的特有行为。Mixed GC 是 G1 垃圾收集器特有的一种 GC 类型它在一次 GC 中同时清理年轻代和部分老年代。Full GC 是最彻底的垃圾收集涉及整个 Java 堆和方法区元空间。它是最耗时的 GC通常在 JVM 压力很大时发生。FULL gc怎么去清理的Full GC 会从 GC Root 出发标记所有可达对象。新生代使用复制算法清空 Eden 区。老年代使用标记-整理算法回收对象并消除碎片。停顿时间较长STW会影响系统响应性能。7. Young GC 什么时候触发如果 Eden 区没有足够的空间时就会触发 Young GC 来清理新生代。8. 什么时候会触发 Full GC在进行 Young GC 的时候如果发现老年代可用的连续内存空间新生代历次 Young GC 后升入老年代的对象总和的平均大小说明本次 Young GC 后升入老年代的对象大小可能超过了老年代当前可用的内存空间就会触发 Full GC。执行 Young GC 后老年代没有足够的内存空间存放转入的对象会立即触发一次 Full GC。System.gc()、jmap -dump等命令会触发 full gc。空间分配担保是什么空间分配担保是指在进行 Minor GC新生代垃圾回收前JVM 会确保老年代有足够的空间存放从新生代晋升的对象。如果老年代空间不足可能会触发 Full GC。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询