
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java编程是大多数软件开发程序员都在学习的一个编程开发语言,而本文贵阳达内IT培训就给大家简单介绍一下,java编程开发JVM内存的结构。
加载:将字节码文件按照双亲委托机制(当某个类加载器需要加载某个.class文件时,它先把这个任务委托给他的上级类加载器,递归这个操作。如果上级的类加载器没有加载,自己才会去加载这个类,方块中对应的便是BootstrapClassLoader(启动类加载器),ExtensionClassLoader(标准扩展类加载器),ApplicationClassLoader(系统类加载器))进行加载;
链接字节码文件:分为三个步骤,分别是字节码验证(verify)、class类数据结构分析(prepare)以及相应的内存分配和后的符号表的链接(resolve);
初始化操作:比如类中静态属性和初始化赋值,以及静态块的执行等。
1.方法区(MethodArea):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码。运行时常量池也是方法区的一部分,比如Stringw=”hello”;中,hello就被放在了方法区里。方法区是线程共享的。有一点要注意,JDK1.8使用元空间MetaSpace替代方法区,元空间并不在JVM中,而是使用本地内存;
_2.堆区(HeapArea):_堆区是JVM中占地大的区域,所有的实例对象全部都在堆区上,这个位置也是线程共享的;
3.栈区(StackArea):存放了每一个线程的当前状态,每一个线程都有一个自己的栈,而栈中存放了以下数据组成的一个个栈帧:操作数、局部变量表、动态链接、返回地址,需要注意的是,栈中只存引用或者基本类型,而且线程不共享(并没有指内部的优化动作);
4.程序计数器(PCRegisters):它是当前线程执行字节码的行号指示器。在多线程中,为了让每个线程切换回来后能够恢复原来执行的指令,就需要为每个线程启动一个PC计数器,这些计数器之间是互补影响的,因为程序计数器和栈一样都是线程私有的。当然程序计数器是JVM个不会出现内存溢出的组件;
5.本地方法栈(NativeMethodStatck):保存了本地方法,它是当程序调用类库(本地方法)中的方法时才会用到它,即nativemethod。
JNI(Java本地接口)通过使用Java本地接口书写程序,可以确保代码在不同的平台上方便移植。通过JNI实现与本地方法库的调用交互,使得在Java虚拟机内运行的Java代码能够与其它编程语言互相操作,包括_创建本地方法、更新Java对象、调用Java方法,_引用Java类,捕捉和抛出异常等,也允许Java代码调用C/C++或汇编语言编写的库。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。