JVM系列----内存划分

在说JVM内存划分之前,先了解一下java程序的执行流程:
在这里插入图片描述
java源文件经过java编译器编译后变成class字节码文件
JVM的classloader加载class文件完成后,交由execution engine执行

     Classloader 类加载器,用来加载Java类到 Java 虚拟机中的一种加载器
     Execution Engine  执行引擎

java把内存的控制权力交给了虚拟机,不会像C++语言一样(使用一个对象时,需要对其进行new操作,如果不用这个对象的时候就要对其进行delete操作,要是开发人员忘记了写delete,就会发生内存的泄露),java不会发生这个情况,JVM有GC机制。

GC  垃圾回收

在这里插入图片描述

方法区

Method Area是各个线程共享内存区域,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载。

在HtoSpot虚拟机中该区域叫永久代,即方法区是虚拟机规范,而永久代是HotSpot实现的方法区。

小博主对于HtoSpot虚拟机虚拟机也不是很懂,过几天去学习学习,开一篇专题介绍,上面这句话是在学习中看到的,方法区在其他虚拟机的名称。看来不应该局限于一个地方,要多多的学习。

堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此区域的唯一目的就是存放对象实例(Java虚拟机规范中的描述时:所有的对象实例以及数组都要在堆上分配)。

   Java堆是GC的主要区域,所以又称为GC堆
   java堆是被所有线程共享的
   java堆的主要作用是存放对象实例
   java堆可以分为新生代和老年代,再细致还可以分为Eden区,From Surivor区,To Surivor区       
   根据java虚拟机规范,java堆可以处在物理上不连续的内存空间中,只要逻辑上是连续即可(这句小博主没有看过这本书哇。在学习其他博主的时候看到的)
本地方法栈

虚拟机栈为虚拟机执行Java方法,而本地方法栈则为虚拟机使用到的Native方法。

 Native方法  一个java调用非java代码的接口
 在看源码时,就有利用Native接口调用本地方法。     
程序计数器

程序计数器(Program Counter Register)是一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。jvm工作时,就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。

虚拟机栈

Java Virtual Machine Stacks,是线程私有的

这里提到了线程私有那就得提一下了
线程私有:在运行时数据区 中,方法区和堆是属于线程公有的
                  循环利用--->所以要进行垃圾回收   
线程私有:虚拟机栈,本地方法栈,程序计数器是属于私有线程    
                    与其线程‘"同生死",一次性的-->不用对其进行垃圾回收

虚拟机栈里面存储的是栈帧,栈帧里面存储的是局部变量表,操作数栈,动态链接,方法出口等信息。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值