Java面试总结——JVM

1、程序的运行流程

HelloWorld.java——>javac——>HelloWorld.class——>jvm 从软件层次屏蔽不同操作系统在底层硬件与指令上的区别——>windows机器码和linux机器码。一次编译,到处运行。

实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。

2、java虚拟机主要组成部分

堆:用来存放由new创建的对象和数组,先进后出。

栈:栈内存都速度要快于堆内存,因为栈内存储存的局部变量,跟新速度快。主要有局部变量,操作数栈,动态链接,方法出口几部分组成。

局部变量:int a=1;int b=2;

程序计数器:是每个线程独有的,程序计数器是一个记录着当前线程所执行的字节码的行号指示器。

操作数栈:每一个独立的栈桢中除了包含局部变量表以外,还包含一个后进先出的操作数栈,也可以称之为表达式栈。在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈/出栈

  • 某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用他们后再把结果压入栈。
  • 比如:执行复制、交换、求和等操作。

动态链接:指向运行时常量池的方法引用。在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用保存在class文件的常量池里。比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。

方法出口

方法区:它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

本地方法:该方法的实现由非java语言实现,比如C,由native修饰

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值