摘要:
类装载的执行过程 加载:查找和导入class文件。 验证保证加载类的准确性。 准备:为类变量分配内存并设置类变量初始值。 解析:把类中的符号引用转换为直接引用。 初始化:对类的静态变量,静态代码块执行初始化操作。 使用:JVM 开始从入口方法开始执行用户的程序代码。 卸载:当用户程序代码执行完毕后, 阅读全文
摘要:
什么是类加载器 JVM只会字节码文件,类加载器的作用就是将字节码文件加载到JVM中,从而让Java程序能够启动起来。 类加载器有哪些 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/ib目录下的库。 扩展类加载器(ExtClassLoader):主要加载J 阅读全文
摘要:
直接内存 直接内存并不属于JVM中的内存结构,不由JVM进行管理。 是虚拟机的系统内存,常见于NIO操作时,用于数据缓冲区,分配回收成本较高,但读写性能高,不受JVM内存回收管理。 阅读全文
摘要:
解释一下方法区 方法区(Method Area)是各个线程共享的内存区域,主要存储类的信息、运行时常量池。 虚拟机启动的时候创建,关闭虚拟机时释放。 如果方法区域中的内存无法满足分配请求,则会抛出OutOfMemoryError:Metaspace。 介绍一下运行时常量池 常量池可以看作是一张表,虚 阅读全文
摘要:
什么是虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈,对应着当前正在执行的那个方法。 垃圾回收是否涉及栈内存 垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放。 栈内存分配越大越好吗 未必,默认 阅读全文
摘要:
作用 线程共享的区域:主要用来保存对象实例,数组等,内存不够则抛出OutOfMemoryError异常。 组成 年轻代+老年代。 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区。 老年代主要保存生命周期长的对象,一般是一些老的对象。 Jdk1.7和1.8的区别 1.7中有有一 阅读全文