将Class文件字节码内容加载到内存中,并将这些静态数据转成方法区的运行时数据结构,然后在堆中生成一个代表整个类的Java.lang.Class对象,作为方法区中类数据的访问入口
将.class字节码文件编译/解释成计算机系统可以识别的机器语言,需调用本地方法接口来实现整个程序的功能。
1、特点:
栈的最主要特点是后进先出(LIFO)。
栈是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。栈的所有插入和删除操作均在栈顶进行,而栈底不允许插入和删除。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
主管程序的运行,生命周期和线程同步。
存放内容:八种基本数据类型、对象的引用、实例的方法
栈中不存在垃圾回收,程序正在执行的方法一定在栈的顶部。
栈溢出:StackOverError
特点:先进后出 (FIFO:First Input First Output)
当一个元素被添加到队列中时,它被添加到后面。当一个元素从队列中移除时,它将从前面移除。队列的两个主要操作就是入队(enqueue)和出队(dequeue)。入队意味着在队列的后面插入一个元素,而出队则意味着从队列的前面移除一个元素。
线程私有
本地方法栈与虚拟机栈类似,只不过虚拟机栈是为Java方法提供服务,本地方法栈是为native方法服务
Native 的作用:调用C++语言的类库。程序在执行之前先要把java代码转换成字节码(class文件),jvm首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 运行时数据区(Runtime Data Area) ,而字节码文件是jvm的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行,而这个过程中需要调用其他语言的接口 本地库接口(Native Interface)来实现整个程序的功能。
一个JVM只有一个堆内存,堆内存的大小是可以调节的。
存放对象的实例,方法,常量。
Minor GC是新生代GC,指的是发生在新生代的垃圾收集动作。由于java对象大都是朝生夕死的,所以Minor GC非常频繁,一般回收速度也比较快。
Major GC/Full GC 是老年代GC,指的是发生在老年代的GC,出现Major GC一般经常会伴有Minor GC,Major GC的速度比Minor GC慢的多。
https://blog.csdn.net/weixin_38750084/article/details/83280614
其他:
因为内存中针对方法的调用使用栈的数据结构。
递归->可能导致方法将栈的空间占满,导致栈溢出(StackOverFlowError)错误。
原文:https://www.cnblogs.com/nlbz/p/14773766.html