@@ -314,6 +314,134 @@ public class Demo {
314314
315315** 编译器会按从上至下的顺序,收集所有 {} 代码块和成员变量赋值的代码,形成新的构造方法,但原始构造方法内的代码总是在最后!**
316316
317+ ## 常见面试题二
318+
319+ > jvm运行时数据区的划分?
320+
321+ ! [image- 20220531143854437 ](https: // cdn.fengxianhub.top/resources-master/202205311438599.png)
322+
323+ > 根据jvm规范,这些数据区中哪些会出现内存溢出异常,分别是什么场景下出现?
324+
325+ 只是程序计数器是不会存在内存溢出(java中唯一不用考虑内存溢出的地方)
326+
327+ - 栈空间:java.lang. StackOverflowError
328+
329+ 以下情况可能会导致栈内存溢出:
330+
331+ - 栈帧过多导致栈内存溢出(例如不合理的递归调用)
332+ - 栈帧过大导致栈帧溢出
333+ - 类的循环引用导致内存溢出
334+
335+ - 堆内存溢出:java.lang. OutOfMemoryError : Java heap space
336+
337+ 堆空间申请过多
338+
339+
340+
341+ > 这些数据区哪些是线程独有的,哪些是线程共享区?
342+
343+ ! [image- 20220531144228815 ](https: // cdn.fengxianhub.top/resources-master/202205311442898.png)
344+
345+ > 每个区存储的数据的特点?
346+
347+
348+
349+ > 程序计数器是什么,它是线程独有的吗? 它是否有内存溢出问题.
350+
351+ 在java中使用CPU 寄存器作为程序计数器
352+
353+ 作用:是记住下一条JVM 指令的执行地址
354+
355+ 特点:
356+
357+ 1. 是线程私有的,每个线程都有自己的程序计数器,用来记录程序运行到了那个位置
358+ 2. 不会存在内存溢出(java中唯一不用考虑内存溢出的地方)
359+
360+ > 虚拟机栈上保存哪些数据? 怎么放? 虚拟机栈是线程独有的吗,它是否有内存溢出问题? 虚拟机栈的优点?
361+
362+ Java Virtual Machine Stacks (Java 虚拟机栈)
363+
364+ - 每个线程运行时所需要的内存,称为虚拟机栈
365+ - 每个栈由多个栈帧(Frame )组成,对应着每次方法调用时所占用的内存
366+ - 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
367+ - 活动栈帧就是栈顶的栈帧
368+
369+ 虚拟机栈式线程独有的,存在内存溢出的问题
370+
371+ ** 基于栈式架构的特点**
372+
373+ - 设计和实现更简单,适用于资源受限的系统;
374+ - 避开了寄存器的分配难题:使用零地址指令方式分配。
375+ - 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。
376+ - 不需要硬件支持,可移植性更好,更好实现跨平台
377+
378+ > 虚拟机栈的大小是否可动? 是否会有异常出现?
379+
380+
381+
382+ > 如何设置虚拟机栈大小?
383+
384+ 我可以通过JVM 指令来分配栈空间,如果不指定会默认分配。< a href= " https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE" > Java 官方文档< / a>
385+
386+ ! [image- 20220531151856031 ](https: // cdn.fengxianhub.top/resources-master/202205311518196.png)
387+
388+ > 什么叫本地方法? 是否可以写一个例子来实现本地方法,以输出一个hello world?
389+
390+
391+
392+ > 什么叫本地方法栈? 有什么作用?
393+
394+
395+
396+ > jvm规范一定强制要求实现本地方法栈吗?
397+
398+
399+
400+ > jvm规范一定强制要求实现本地方法栈吗
401+
402+
403+
404+ > 方法区是线程独有的吗? 它是否有异常? 它的作用?
405+
406+ 不是,是线程共享的
407+
408+ 1.8 以前会导致永久代(PermGen )内存溢出
409+
410+ ```css
411+ 演示永久代内存溢出 java.lang. OutOfMemoryError : PermGen space
412+ - XX : MaxPermSize = 8m
413+ ```
414+
415+ 1.8 之后会导致元空间内存溢出
416+
417+ ```css
418+ 演示元空间内存溢出 java.lang. OutOfMemoryError : Metaspace
419+ - XX : MaxMetaspaceSize = 8m
420+ ```
421+
422+ > 方法区的演进, jdk7及以前,它叫什么? jdk8开始,这又叫什么
423+
424+
425+
426+
427+ > 方法区或永久代的大小如何设置?
428+
429+ 1.8 以前会导致永久代(PermGen )内存溢出
430+
431+ ```css
432+ 演示永久代内存溢出 java.lang. OutOfMemoryError : PermGen space
433+ - XX : MaxPermSize = 8m
434+ ```
435+
436+ 1.8 之后会导致元空间内存溢出
437+
438+ ```css
439+ 演示元空间内存溢出 java.lang. OutOfMemoryError : Metaspace
440+ - XX : MaxMetaspaceSize = 8m
441+ ```
442+
443+ ## 常见面试题三
444+
317445
318446
319447## 大厂JVM 一
@@ -366,33 +494,65 @@ Java的垃圾回收器都有哪些,说下g1的应用场景,平时你是如
366494
367495## 大厂面试题二
368496
369- - CMS 和G1 的异同
497+ > CMS 和G1 的异同
498+
499+
500+
501+ > G1 什么时候引发Full GC
502+
503+
504+
505+ > 聊下垃圾回收算法,各有什么利弊
506+
507+
508+
509+ > 垃圾回收器背一下,特点和应用场景
510+
511+ 垃圾回收器主要分为三类
512+
513+
514+
515+ > 怎么判断内存泄露
516+
517+
518+
519+ > CMS 垃圾回收的流程
520+
521+
522+
523+ > 为什么要有压缩指针?超过多少会失效?为什么超过会失效?
524+
525+ 1. 在64 位平台的HotSpot 中使用32 位指针,内存使用会多出1.5 倍左右,使用较大指针在主内存和缓存之间移动数据,*** 占用较大带宽,同时GC 也会承受较大的压力***
526+ 2. 为了*** 减少64 位*** 平台下*** 内存*** 的*** 消耗*** ,启用指针压缩功能
527+ 3. 在JVM 中,32 位地址最大支持4G内存(2 的32 次方),可以通过对对象指针的压缩编码、解码方式进行优化,使得JVM 只用32 位地址就可以支持更大的内存配置(小于等于32G)
528+ 4. 堆空间小于4G时,不需要启用指针压缩,JVM 会直接去除高32 位地址,即使用低虚拟地址空间
529+ 5. *** 堆内存大于32G时,压缩指针会失效*** ,会强制使用64 位(即8 字节)来对Java 对象寻址,这就会出现1 中的问题,所以堆内存不要大于32G为好
530+
531+ > 怎么解决线上OOM 问题,你是如何进行GC 调优的
532+
533+
534+
535+ > ThreadLocal 有没有内存泄露问题
536+
537+
538+
539+ > G1 两个Region 不是连续的,而且之间没有可达的引用,我现在要回收一个,另一个要如何处理
370540
371- - G1 什么时候引发Full GC
372541
373- - 聊下垃圾回收算法,各有什么利弊
374542
375- - 垃圾回收器背一下,特点和应用场景
543+ > JVM 堆内存管理(对象分配过程)
376544
377- - 怎么判断内存泄露
378545
379- - CMS 垃圾回收的流程
380546
381- - 为什么压缩指针超过32G会失效
547+ > 讲一下 CMS 的并发预处理和并发可中断预处理
382548
383- - 怎么解决线上OOM 问题,你是如何进行GC 调优的
384549
385- - ThreadLocal 有没有内存泄露问题
386550
387- - G1 两个 Region 不是连续的,而且之间没有可达的引用,我现在要回收一个,另一个要如何处理
551+ > 多大的内存会直接晋升到老年代
388552
389- - JVM 堆内存管理(对象分配过程)
390553
391- - 讲一下CMS 的并发预处理和并发可中断预处理
392554
393- - 多大的内存会直接晋升到老年代
555+ > ZGC 的m0和m1模式分别是什么?
394556
395- - ZGC 的m0和m1模式分别是什么?
396557
397-
398558
0 commit comments