功能:
存储当前线程正在执行的字节码行号如果当前线程执行的java方法:记录虚拟机字节码指令地址如果当前线程执行的native方法:该计数器的值为空特点: - 不会抛出outOfMemoryError异常 - 线程私有的
功能:
描述(java)方法执行时的内存模型方法调用的过程就是栈帧入栈到出栈的过程特点: - 线程私有的 - 请求栈深大于虚拟机所允许的栈深,抛出stackOverFlowError - 虚拟机栈请求不到足够的内存来扩展空间,将会抛出outOfMemoryError
功能:
与虚拟机栈的功能类似,但虚拟机栈描述的java方法执行的内存模型本地方法则为虚拟机提供使用本地方法的服务特点: - 线程私有的 - 请求栈深大于虚拟机所允许的栈深,抛出stackOverFlowError - 虚拟机栈请求不到足够的内存来扩展空间,将会抛出outOfMemoryError
功能:
用于存放实例对象特点: - 线程共享的 - 虚拟机启动时创建,虚拟机关闭时结束 - 垃圾收集器管理的主要部分,也被称作GC堆(Garbage Collected Heap) - 一般可扩展。但申请扩展内存失败的时候会抛出 outOfMemoryError
功能:
存储 虚拟机加载的类信息 常量 静态变量 即时编译器编译后的代码特点: - 线程共享的 - outOfMemoryError
功能:
存放类在编译期生成的字面量 和 符号引用 和编译出来的直接引用特点: - 线程共享的 - outOfMemoryError - 方法区的一部分
功能:
用于缓存i/o数据特点: - 不是虚拟机运行时数据区的一部分 - outOfMemoryError
什么是直接引用什么是符号引用?
在java中,一个java类将会编译成一个class文件。在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool(假设)来表示Tool类的地址。而在类装载器装载People类时,此时可以通过虚拟机获取Tool类 的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址什么是栈帧??
java在方法执行时会创建一个栈帧,用于存放局部变量表、操作数栈、动态链接、方法出入口什么是局部变量表
存放基本数据类型 引用(reference) returnAddress(字节码指令的地址) 局部变量表的大小在编译期间确定,运行期间局部变量表的大小是不会改变的什么是JTT编译(即时编译器)??
解释与编译的区别: 解释:边执行边解释成机器语言,(吃火锅边吃边涮) 编译:先编译成机器语言在执行,(先做好一桌子菜,做好菜再吃) java编译语言还是解释语言? 第一步: 先利用javac命令解释成BYTECODE文件(字节码文件,.class文件) 第二步: 1) 使用jvm边解释边允许 2)使用JIT翻译(编译)成机器指令,直接执行 3)二次编译 生成静态的目标平台代码 将发现程序中的热点位置 将本部分代码编译成本地机器码直接执行,这样会加快代码执行的效率