史上最全的java面试题独家整理(Java面试技术问答宝典)
史上最全的java面试题独家整理(Java面试技术问答宝典)3). Survivor 设置过小一是新生代设置过大会导致旧生代过小(堆总量一定),从而诱发 Full GC;二是新生代 GC耗时大幅度增加1).新生代设置过小 一是新生代 GC 次数非常频繁,增大系统消耗;二是导致大对象直接进入旧生代,占据了旧生代剩余空间,诱发 Full GC2). 新生代设置过大
我们参加Java培训学习都是希望能够毕业后找到满意的工作,然而培训机构只是推荐就业,我们仍然需要进行面试,提高面试技术问答的正确率有助于增加面试官的满意度。本系列全面汇总了企业Java面试的技术问题,希望能够帮助大家。
本文列举的技术问题有:
- 导致 Full GC 一般有哪些情况?
- Minor GC,Full GC 触发条件是什么?
- 类加载器有哪些?
- Java 对象创建过程是怎样的?
更多Java面试技术问答后续会继续提供,想要一口气获得所有答案的小伙伴可以评论交流哦~
121、为什么 Java 被称作是无关平台的编程语言?
1).新生代设置过小
一是新生代 GC 次数非常频繁,增大系统消耗;二是导致大对象直接进入旧生代,占据了旧生代剩余空间,诱发 Full GC
2). 新生代设置过大
一是新生代设置过大会导致旧生代过小(堆总量一定),从而诱发 Full GC;二是新生代 GC耗时大幅度增加
3). Survivor 设置过小
导致对象从 eden 直接到达旧生代
4). Survivor 设置过大
导致 eden 过小,增加了 GC 频率,一般说来新生代占整个堆 1/3 比较合适
GC 策略的设置方式
1). 吞吐量优先 可由-XX:GCTimeRatio=n 来设置
2). 暂停时间优先 可由-XX:MaxGCPauseRatio=n 来设置
122、Minor GC,Full GC 触发条件是什么?
Minor GC 触发条件:当 Eden 区满时,触发 Minor GC。
Full GC 触发条件:
(1)调用 System.gc 时,系统建议执行 Full GC,但是不必然执行
(2)老年代空间不足
(3)方法区空间不足
(4)通过 Minor GC 后进入老年代的平均大小大于老年代的可用内存
(5)由 Eden 区、From Space 区向 To Sp3ace 区复制时,对象大小大于 To Space 可存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小。
123、类加载器有哪些?
启动类加载器:Bootstrap ClassLoader,负责加载存放在 JDK\jre\lib(JDK 代表 JDK 的安装目录,下同)下,或被-XbootClassPath 参数指定的路径中的,并且能被虚拟机识别的类库。
扩展类加载器:Extension ClassLoader,该加载器由 sun.misc.Launcher$ExtClassLoader 实现,它负责加载 DK\jre\lib\ext 目录中,或者由 java.ext.dirs 系统变量指定的路径中的所有类库(如javax.*开头的类),开发者可以直接使用扩展类加载器。
应用程序类加载器:Application ClassLoader,该类加载器由 sun.misc.Launcher$AppClassLoader来实现,它负责加载用户类路径(ClassPath)所指定的类,开发者可以直接使用该类加载器。
124、类加载器有哪些?
1.JVM 遇到一条新建对象的指令时首先去检查这个指令的参数是否能在常量池中定义到一个类的符号引用。然后加载这个类(类加载过程在后边讲)
2.为对象分配内存。一种办法“指针碰撞”、一种办法“空闲列表”,最终常用的办法“本地线程缓冲分配(TLAB)”
3.将除对象头外的对象内存空间初始化为 0
4.对对象头进行必要设置
更多Java面试技术问答后续会继续提供,想要一口气获得所有答案的小伙伴可以评论交流哦~