Java程序运行基本原理

Java的跨平台性

java代码通过编译后生成.class文件运行在java虚拟机上,同一个.class文件通过虚拟机会得到不同的机器指令(Windows和Linux的机器指令不同),但是最终执行的结果却是相同的。java虚拟机屏蔽了底层操作系统指令上的差异,从而实现java语言的跨平台性。

.class文件的内容

.class文件包含java程序运行的字节码,是一组以8位字节为基础严格按照规定的格式紧凑排列的二进制流,中间无任何分隔符(如下图);二进制文件不易于阅读,我们可以通过class字节码工具:javap输出易于阅读的字节码内容。
在这里插入图片描述

java运行时的数据区

Java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。如下图
在这里插入图片描述
线程独占:每个线程都会有它的独立空间,随线程的生命周期而创建和销毁
线程共享:所有线程都能访问的内存数据,随虚拟机或者GC而创建和销毁
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,它是一块各个线程共享的内存区域。
堆内存:是JVM所管理的内存中最大的一块,在虚拟机启动时创建,用于存储对象实例,也是线程共享区域。堆内存还可以细分为:老年代、新生代(Eden、From Survivor、To Survivor),垃圾回收器GC主要管理的就是堆内存空间。如果满了就会触发OOM。
在这里插入图片描述
虚拟机栈:虚拟机栈是线程独占的,它的生命周期与线程相同,默认栈内存大小是1M。
线程栈会由多个栈帧组成。
栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用到执行完成的过程,对应的就是一个栈帧在虚拟机栈中入栈到出栈的过程。
一个线程会执行一个或多个方法,每个方法会对应一个栈帧。
本地方法栈:本地方法栈和虚拟机

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值