java JVM ClassLoader机制,类加载器,JNI和NDK

JVM:

线程共享:方法区,堆

线程独享:栈,程序计数器;

它的内存区域有五块:堆,虚拟机栈,本地方法栈,方法区,程序计数器

程序计数器:
用来记录当前执行的字节码位置。 

方法区:

放常量,静态量,常量池的地方,以及放。CLass文件;

虚拟机栈:

就是指的“栈”,存放对象引用

本地方法栈:

JVM使用到的Naive方法提供内存空间

堆:

放对象的地方,JVM的GC就是在这里发生,3代模式;

new 一个对象时,JVM中发生了什么?

如何判定一个对象是否要GC:

 

GC的几种收集方法:

只在新生代区进行GC(Minor GC)和整个堆进行GC(Full GC)

类的加载:

类加载器 

类加载是由类加载器完成的,总共有四种类加载器,引导加载器,拓展加载器,系统类加载器,自定义加载器;

类加载机制:

如上图,采用的是双亲委派模式:

如果一个类加载器收到了 Class 加载的请求,它首先不会自己去尝试加载这个 Class ,而是把请求委托给父加载器去完成,依次向上。因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的 Class 时,即无法完成该加载,子加载器才会尝试自己去加载该 Class 。

采用双亲委派的好处是:
1. 避免同一个类被多次加载
2. 安全,Java 核心 API 中定义的类不会被随意替换
3. 每个加载器只能加载自己范围内的类

类加载过程:加载、验证、准备、解析、初始化

JNI:

NDK:

猜你喜欢

转载自blog.csdn.net/emmmsuperdan/article/details/81703101