java虚拟主机支持maven_java虚拟机--JVM

java虚拟机

是安装在计算机操作系统上的一个虚拟计算机。

专门用于处理java程序和底层操作系统的链接工作,将java程序翻译成底层的操作系统可以理解的语言。

有别于JDK。JDK是java的开发环境,是java开发人员需要的,里面除了JVM,还有一些其他的东西。JVM是小于JDK的。

JVM的结构图如下图所示:

1. 类加载器:加载类文件到内存。[这里的类文件是class文件]

2. 运行数据区:1中加载的class文件,全部保存在运行数据区。java能够很好的运行,也是得益于运行数据区的管理。

3. 执行引擎:也叫做解释器,负责讲class文件解释成操作系统的语言。

4. 本地接口:本地接口的初衷是为了实现java中调用其他的C/C++的程序,于是就在内存中开辟了一个本地方法栈,用于等级本地方法,然后在执行引擎的时候调用本地方法。[现在使用的越来越少了]

45f01b6a79f7b270350a3d2837a9feed.png

java内存管理

1. 栈-stack

是java的程序运行区,在线程创建的时候创建,生命周期跟随线程的生命周期,所以栈中不存在垃圾回收的问题。

栈中存放是数据包括:

本地变量[输入参数、输出参数以及方法内的参数];

栈操作[记录入栈和出栈的操作];

栈帧数据[类文件、方法等]。

e68ecb2bbceb2b065433cb23e4800357.png

2. 堆

一个JVM实例中存放一个堆内存,堆内存的大小是可以调节的。类加载器读了类的文件后需要把类、方法、常变量放置在堆中。

堆内存又分为:

1) 永久存储区

常驻内存中的区域,存放JDK自身所携带的class、interface的元数据,都是一些运行环境必须的资源信息。不会被垃圾回收器回收。

2)新生区

类产生的区域。新生区又被分为两个部分:伊甸区和幸存者区。幸存区又被分为0区和1区。伊甸区new出新的类,当伊甸区满的时候,垃圾回收将这个区域整理回收,没有被回收的放到0区去。0区满了,垃圾回收又整理回收,没有回收的放到1区去。1区满了就整理到养老去去。

3)养老区

9a1a7bf666aaf764ecc029016b31c92d.png

3. 方法区

被所有的线程所共享,保存:字段和方法字节码,以及一些特殊的方法如构造函数和接口代码。这里保存的有类变量。

4. PC register 程序计数器

指导执行引擎找到下一条指令

5. 本地方法栈

相关问题

堆和栈区别

对存放的是对象,而对象内的临时变量存放在栈内存中;栈是跟随线程的,堆是跟随JVM。

类变量和实例变量的区别

类变量前面有static修饰,是类的变量;实例变量的实例new出来的。类变量存储在方法区中;实例变量存储在堆中。

java的方法传递的是值OR地址

都不是,对于原生数据传递的值,引用类型传递的地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值