JVM 简介、程序计数器、虚拟机栈
JVM是什么?
定义:Java Virtual Machine - java程序的运行环境 (java 二进制字节码的运行环境)
Java的优点(JVM)
- 一次编写,到处运行
- 自动内存管理,垃圾回收功能
- 数组下标越界越界检查
- 多态
JVM JDK JRE 的关系
Program Counter Register程序计数器(寄存器)
在java代码进行编译执行的时候,先将java代码转换成二进制的编码,这个地方的二进制编码就是jvm指令,jvm的指令会给到解释器,而在这里程序计数器就会记住吓一跳jvm指令的地址。这就是程序计数器。
程序计数器的特点
- 是线程私有的
- 不会存在内存溢出
Java Virtual Machine Stack 虚拟机栈
定义 :每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
使用代码进行测试,代码如下:一段简单的java代码,在设置断点,进行debug,每执行一条语句,这个方法会占用内存,也就是会被放进这个栈当中,当方法执行完成之后再进行出栈操作。
问题辨析
- 垃圾回收是否涉及栈内存?
答:栈的内存不需要进行回收。 - 栈内存分配越大越好吗?
答:不是,内存分配的越大,线程的数目会变少,采取默认大小即可。 - 方法内的局部变量是否线程安全?
答:如果方法内局部变量没有逃离方法的作用访问,它是线程安全的。如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全