面试题:jvm、jdk、jre的区别?二、概述
Java作为一种高级语言,要让计算机执行Java程序,也得需要经过编码-->编译-->运行步骤。但是Java编译程序并不能将Java源代码直接编译为计算机能识别的0/1指令,而是编译为字节码文件(.class)这时候就需要jvm将字节码文件翻译为与平台有关的0/1指令。所以有了jvm,Java程序就达到了“一次编译到处运行”的目的。所以其跨平台好的根本原因就是因为jvm的存在。 它的内存空间包括方法区、堆、方法栈、本地方法栈、PC寄存器。(以上5块又成为运行时数据区)。我们刚才也提到,Java源代码经过Java编译程序。能够产生相应的.class文件,也就是字节码文件。字节码文件经过jvm中的解释器,再次编译成特定机器上的机器码指令。上图:
面试题:什么是双亲委派原则?我们今天主要浅聊一下PC寄存器、方法区、栈、堆
面试题:JNI(Java Native Interface)Java本地方法接口中Native关键字的作用?
面试题:一张白纸,画出对象实例化过程的内存图?五、栈
栈基于后进先出的特性,当执行完成后,会被弹出栈。栈溢出的问题(StackOverflow)
为什么main()是先执行,最后结束?(因为一开始是main()方法最先入栈,最后弹出,结束执行)
听闻:99%的对象都是临时对象,能进入养老区的不多,所以OOM的错误也很少见。
面试题:工作中,遇到OOM了,你是怎么排查的?扩大内存空间参数:
1、尝试扩大堆内存空间,如果还满,可能有垃圾代码存在
2、分析内存,使用专业工具看哪里出了问题
[面试官:工作中遇到过 OOM 吗?你是怎么排查的? - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/165981061)
jdk1.6之前:永久代,常量池在方法区方法区又称非堆,本质还是堆,只是为了区分概念。
jdk1.7:永久代,但是慢慢退化了(去永久代)常量池在堆中
jdk1.8之后:无永久代,常量池在元空间
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |