JVM
jvm是一种虚拟机
JVM实现大都自带即时编译器(just in time JIT)
JVM提供了一些内置的基本类型
除基本类型之外的其他一切都是对象
对象是通过引用类型来访问的
垃圾收集器过程将过期的对象从内存中删除
一般而言,代码在32位还是64位的Java运行时环境中运行都无关紧要。在64位的运行时环境中运行时可使用的运行内存更多,但只要不执行原生操作系统调用或需要的GB内存都无关紧要。(在C语言中,数据类型的长度取决于原生态系统,而在JVM中整型都是无符号且长为32位)
JDK是开发工具包,JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面包含lib和bin,可以认为bin就是JVM,lib则是JVM工作所需要的类库,而JVM+lib就是jre.
Java虚拟机所管理的内存区域分为如下部分:方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。
方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据。
堆内存主要用于存放对象和数组,它是JVM管理的内存中最大的一块区域,堆内存和方法区都被所有线程共享,在虚拟机启动时创建。
程序计数器是一块非常小的内存空间,可以看做是当前线程执行字节码的行号指示器,每个线程都有一个独立的程序计数器,因此程序计数器是线程私有的一块空间,此外,程序计数器是Java虚拟机规定的唯一不会发生内存溢出的区域。
虚拟机栈也是每个线程私有的一块内存空间,它描述的是方法的内存模型,虚拟机会为每个线程分配一个虚拟机栈,每个虚拟机栈中都有若干个栈帧,每个栈帧中存储了局部变量表、操作数栈、动态链接、返回地址等
本地方法栈与虚拟机栈的区别是,虚拟机栈执行的是Java方法,本地方法栈执行的是本地方法(Native Method)