浅析JVM内存模型

对于初学JAVA的人来说弄懂虚拟机JVM内存分布模式是很有必要的
首先我们要大致明白配置JDK环境变量的用途
1、环境变量、
如何配置环境变量,在上一篇文章我已经做过详细的说明,这里再次强调一次,不要用单纯的java、javac、或者java-version来判断是否安装成功,应该三者一起用。
javac的作用是将我们的可读的java源文件文件编译成让jvm或者是cpu能够识别的字节码文件(.class)
java的作用是将我们编译的.class字节码解释成电脑运行的程序
所以单一去验证jdk的安装是不严谨的,两者是单独成立的
2、JVM内存模式分布
这里很抽象,看不到摸不着,但是弄明白很有必要,因为所有的数据都在内存里面保存着。有句话是little and often,坚持学习。

jvm内存模型:方法区、堆、程序计数器 、本地方法栈、虚拟机栈
这里针对方法区、栈、堆、程序计数器做一个说明
这里我们来说个流程:
程序(非多线程)开始运行的时候,在系统中会自动分配一个栈,这个时候程序计数器就开始起到作用了,它会指示jvm对编译之后的字节码的执行方向,同时在执行一个方法的时候就会在栈中分配一个属于方法一个栈帧,方法的局部变量都会存放在这个栈帧中,其生命周期随着方法的结束而释放,这里强调一点的是先进后出的逻辑,堆中的数据当没有对象引用的时候就成了孤立数据,此时就会被GC垃圾回收器对其进行内存释放。
方法区包含了常量池:存放类信息、常量、静态变量、即时编译器编译后的代码等。其中静态成员变量在类装载的时候就进行了创建,在整个程序结束时按序销毁。

静态成员变量在类装载的时候就进行了创建,在整个程序结束时按序销毁。
实例变量在类实例化对象时候创建,在对象销毁的时候销毁。
局部变量在局部范围使用时创建,跳出局部范围销毁

这里我们说个题外话,在术语中经常会听到编译期和运行期
编译期:就是将源码编译成二进制的.class字节码文件,并将文件放到了磁盘中,编译期相当于只是做了一个翻译的过程
运行期:这块就是我们java解释器将二进制.class字节码解释成程序能识别的程序(将磁盘中的代码放到内存中就是类加载过程)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值