深入理解Java虚拟机

65 阅读1分钟

第二章 Java内存区域与内存溢出异常

image.png

Java虚拟机运行时数据区
- 线程隔离
    程序计数器:程序执行的字节码行号指示器
    虚拟机栈:Java方法执行的线程内存模型(局部变量表,操作数栈,动态连接,方法出口),每个方法执行,jvm创建一个栈帧
    本地方法栈:为虚拟机使用到的native方法服务
- 线程共享
    方法区:存储虚拟机加载的类型信息,常量,静态变量等
        运行时常量池:常量池表-类加载后生成的字面量与符号引用
    堆:逻辑上连续,可扩展,存放对象实例
    
直接内存:不属于jvm运行时数据区
NIO:基于channel和buffer的io方式,使用native函数直接分配堆外内存,避免Java堆和native堆来回复制数据

对象的创建
new
- jvm遇到new关键字后,先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程