商家建设网站的好处,泰安房产交易信息网,东莞做网站那家好,全球创新设计1、项目中什么情况下会内存溢出#xff0c;怎么解决#xff1f; #xff08;1#xff09;误用固定大小线程池导致内存溢出 Excutors.newFixedThreadPool内最大线程数是21亿(2) 误用带缓冲线程池导致内存溢出最大线程数是21亿(3)一次查询太多的数据#xff0c;导致内存占用…1、项目中什么情况下会内存溢出怎么解决 1误用固定大小线程池导致内存溢出 Excutors.newFixedThreadPool内最大线程数是21亿(2) 误用带缓冲线程池导致内存溢出最大线程数是21亿(3)一次查询太多的数据导致内存占用太大(4)动态生成类导致内存溢出2、类加载过程
三个过程加载链接 链接又分为验证、准备、解析 初始化总结所谓类加载机制就是虚拟机把Class文件加载到内存并对数据进行校验、转换解析和初始化形成虚拟机可以直接使用的Java类型即java.lang.class
补充类.class只会触发类加载且只会加载一次而new 类则会触发类初始化。静态变量的赋值在初始化时完成。
3、什么是双亲委派
4.对象引用分为哪几类 1.强引用正常对象引用 2.软引用系统内存足够时不会被回收不足时才会被回收。且若回收之后仍内存不够则会内存溢出 3.弱引用 无论内存是否充足都会被回收 4.虚引用 主要用来跟踪对象被垃圾回收的过程任何时候都可能被垃圾回收
5、堆heap和栈stack有什么区别 1、内存分配方式不同堆是动态分配内存空间的栈是静态分配内存空间的。 2、内存空间大小不同堆的内存空间通常比较大可以动态扩展而栈的内存空间通常比较小由于静态分配所以大小固定。 3、内存分配效率不同堆的内存分配效率相对较低因为需要进行垃圾回收和内存整理等操作而栈的内存分配效率相对较高因为只需要简单地移动指针即可。 4、存储内容不同堆用于存储对象实例和数组等动态数据它具有很好的灵活性而栈用于存储方法调用的局部变量和操作数栈等数据它具有很好的局部性和快速访问的特点。
6、什么情况下会发生栈内存溢出
方法调用层次过深如果方法调用层次过深每次方法调用都会在栈中创建一个新的栈帧如果栈空间不足就会导致栈内存溢出。 局部变量过多如果方法中定义了大量的局部变量也会占用栈空间如果栈空间不足就会导致栈内存溢出。 递归调用递归调用会不断地向栈中添加新的方法调用如果递归深度过大就会导致栈内存溢出。 参数传递过多如果方法参数传递过多也会占用栈空间如果栈空间不足就会导致栈内存溢出。 大量线程调用如果同时有大量的线程在栈中进行方法调用也会占用栈空间如果栈空间不足就会导致栈内存溢出。
7、什么是OOM OOM 是 OutOfMemoryError 的缩写是指在 Java 程序运行期间由于内存不足而导致程序出现错误的情况。OOM 错误通常分为堆内存溢出和非堆内存溢出两种情况。
8、如何判断一个对象是否存活 1、引用计数法引用计数法是一种简单的垃圾回收算法它通过统计对象的引用计数来判断对象是否存活。每当一个对象被引用时它的引用计数加 1当一个对象的引用计数为 0 时说明该对象已经不再被使用可以被垃圾回收器回收。但是引用计数法无法处理循环引用的情况即两个或多个对象相互引用导致它们的引用计数都不为 0无法被回收。2、可达性分析法可达性分析法是一种常用的垃圾回收算法它通过从一组根对象开始查找所有被这组根对象所引用的对象以此来确定哪些对象是存活的。在可达性分析法中根对象可以是程序中的静态变量、本地变量或者正在执行的线程等。当一个对象无法被根对象所引用时说明该对象已经不再被使用可以被垃圾回收器回收。可达性分析法是 Java 中常用的判断对象存活的方式它考虑了对象之间的引用关系可以处理循环引用的情况而引用计数法则无法处理循环引用的情况因此在 Java 中并不采用引用计数法来判断对象是否存活。
9、有哪几种垃圾回收器各自的优点是什么 Serial 垃圾回收器是一种单线程的垃圾回收器它使用标记-清除算法来回收垃圾对象。优点是简单高效适合小型应用场景但是在多核处理器上的表现较差。
Parallel 垃圾回收器是一种多线程的垃圾回收器它使用标记-整理算法来回收垃圾对象。优点是在多核处理器上的表现比 Serial 垃圾回收器更好适合中型应用场景。
CMS 垃圾回收器是一种并发的垃圾回收器它使用标记-清除算法来回收垃圾对象。优点是回收效率高暂停时间短适合大型应用场景。但是CMS 垃圾回收器会产生内存碎片可能会导致频繁的 Full GC影响应用性能。
G1 垃圾回收器是一种并发的垃圾回收器它使用标记-整理算法来回收垃圾对象。优点是在大型应用场景下表现良好可以有效避免内存碎片和频繁的 Full GC。同时G1 垃圾回收器还支持设置可预测的暂停时间使得应用程序的性能得到进一步优化。可以优先回收大块垃圾的区域
Serial和CMS都是标记清楚Parallel和G1都是标记整理。G1现在用的最多。
10、什么是JVM内存结构 JVM分为堆、虚拟机栈、本地方法栈、程序计数器、方法区
虚拟机栈里有局部变量表、操作数栈、动态链接、方法返回信息
本地方法栈是C栈执行本地方法
程序计数器用于记录当前虚拟机正执行的线程指令地址。
堆所有线程共享的一块内存虚拟机开启时就创建可通过GC进行回收。
方法区jdk1.8之后叫元数据区