面试笔记
什么是JVM
java程序的运行环境
好处:
一次编译,导出运行
自动的内存管理,垃圾回收功能
数组下标越界检查
多态
比较
JVM
JRE(JVM+基础类库)
JDK(JRE+编译工具)
JVM内存结构
程序计数器、虚拟机栈、本地方法栈、堆、方法区
程序计数器的作用?
两点
1.记录下一条指令的地址
2.多线程的情况下,记录当前线程的执行位置,从而当线程切换回来时可以知道线程上次运行到哪里了。
特点:线程私有 没有内存溢出
java虚拟机栈
每个线程运行时所需要的内存,称为虚拟机栈
每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存
每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
垃圾回收是否涉及栈内存?
栈内存分配越大越好吗?
方法内的局部变量是否线程安全?
如果方法内的局部变量没有逃离方法的作用访问,它是线程安全的。
如果局部变量引用了对象,并逃离了方法的作用范围,需要考虑线程安全
top 查看进程活动情况
ps H -eo pid,tid,%cpu | grep tid 查看所有线程 进程,线程,cpu占用率
jstack 进程id
本地方法栈
堆
通过new关键字,创建的对象都会使用堆内存
特点:
线程共享的,堆中对象都需要考虑线程安全问题
有垃圾回收机制
堆内存溢出
jps 查看当前系统中有哪些进程
jmap -heap 进程id 查看堆内存占用情况