JVM类加载
Java里有如下几种类加载器:
- 引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如 rt.jar、charsets.jar等
- 扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包
- 应用程序类加载器:负责加载ClassPath路径下的类包,主要就是加载你自己写的那些类
- 自定义加载器:负责加载用户自定义路径下的类包
JVM类加载运行全过程
当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到 JVM。
通过Java命令执行代码的大体流程如下:
JVM内存模型
在JDK8中,运行时数据区(内存模型),一共分堆、栈(线程)、本地方法栈、程序计数器、方法区(元空间),方法区(原空间)中有:常量+静态变量+类信息。
JVM对象结构
对象内存分配
new一个对象,判断是否栈内分配,如果是栈上进行分配,如果是否,再判断是否是大对象,如果是,判断OLD,如果否,进行Full GC,然后结束,如果是,判断AGE,如果否,进行S2,判断Minor GC,如果否,转到S1,如果是,结束,
如果不是大对象,判断TLAB,如果是/否,进行EDEN,再进行Minor GC后续判断流程。