重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
程序在执行之前先要把 java代码 转换成 字节码文件 (.class文件), JVM 首先需要把字节码通过一定的方式 类加载器 (ClassLoader) 把文件加载到内存中 运行时数据区 (Runtime Data Area) , 而字节码文件是 JVM 的一套指令集规范, 并不能直接交给底层操作系统去执行, 因此需要特定的命令解析器 执行引擎 (Execution Engine) 将字节码翻译成底层系统指令再交由CPU去执行, 而这个过程中需要调用其他语言的接口 本地库接口 来实现整个程序的功能.
创新互联建站是一家专注于成都网站建设、成都网站设计与策划设计,商洛网站建设哪家好?创新互联建站做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:商洛等地区。商洛做网站价格咨询:028-86922220总的来看, JVM主要通过以下四部分来运行Java程序:
通俗来讲 JVM 划分的区域就是:
而在栈中还能分两部分:
这里经常会有一个小的试题出现: 看代码.
package Test;
public class Demo {
private int n = 10;
private static int m = 20;
public static void main(String[] args) {
Demo demo = new Demo();
}
}
问: 在当前代码中, n 在内存中的哪个区域? m 在内存中的哪个区域? demo 在内存中的那个区域?
答: n是成员变量, 就是在堆上. m是静态变量, 在类对象里, 就是在方法区中. demo是局部变量, 就是在栈上.
另一段代码:
package Test;
class A {
private int x = 10;
}
public class Demo {
private int n = 10;
private static int m = 20;
private static A a = new A();
public static void main(String[] args) {
Demo demo = new Demo();
}
}
在看这段代码, 在这段代码中, 问: x 在内存中的哪个区域? a在内存中的哪个区域?
答: 首先 a 是静态的, 那么它仍然在方法区中, 但是它 new 的 A(), 还是在堆里, 所以 x 也是在堆里.
内存划分JVM 运行时数据区域也叫内存布局, 它由一下五个部分组成:
从上图我们可以看出, 栈 是每一个线程都有的, 然后在图中是没有方法区的, 多了一个元数据区, 大家看到了吗, 方法区是 JDK1.7 之前的版本, 到了 1.8 之后, 把之前的方法区给去掉了, 弄出来这个元数据区, 他们两个的区别就是: 元数据区的内存不是在 JVM 中的, 之前方法区是在 JVM 申请到的这一大块内存里, 划分的区域. 元数据区呢是用的本地内存.
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧