虚拟机JVM
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了虚拟机JVM,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1833字,纯文字阅读大概需要3分钟。
内容图文
![虚拟机JVM](/upload/InfoBanner/zyjiaocheng/993/520d4c7cad9241bcadc89c65022286a9.jpg)
简单复盘一下这几天学到的,可能有点乱,但是希望下次再回来看这篇文章的时候,理解得更深透一点吧。
虚拟机内存结构模型
jdk1.8 的版本:
线程私有:线程内的虚拟机栈(栈)、程序计数器、本地方法栈。
线程间共享:堆、方法区。
栈
线程栈是用来存放各种数据类型(Boolean、byte、short、int、long、float、double、char)、对象引用(使用句柄或者直接指针)等。由上面的模型图可知,栈内引用对象后,执行对象内的多个方法(栈帧)。每个栈帧都有:局部变量表、操作数栈、动态链接、方法出口,其中操作数栈就是将方法中的代码分解成一条条指令来执行,由字节码解释器修改程序计数器进行计数。名字叫栈,就有着栈的特性:先进后出,主方法(栈帧)main先进栈,根据方法内的调用,再往栈中压入后面的方法(栈帧),执行完后进的方法弹出,逐渐将结果返回到main最后弹出。java的返回方式有两种:return语句,抛出异常。不管哪一种,栈帧都会被弹出栈。
Java虚拟机栈会出现两种错误:'stackOverFlowError'(堆栈溢出)和 'OutOfMemoryError'(内存不足)
程序计数器
也叫PC寄存器。由字节码解释器控制,对java方法所进行的每一条指令计数,如果是native本地方法,计数值为空。java方法中的循环、分支、跳转、异常、线程恢复都依赖计数器来完成。在多线程环境中主要用来记录执行到哪了,保存当前执行指令的地址,线程切换时进行恢复,由于是线程私有的,所以具有线程安全。它是唯一不会出现OutOfMemoryError内存不足的错误,线程会保证它的内存,生命周期随着线程的创建而创建,随着线程的死亡而死亡。
本地方法栈
Native关键字,对本地中存在的其他语言方法进行调用。也会出现stackOverFlowError和OutOfMemoryError错误。
堆
几乎所有的new处理的对象实例、数组都在这。在栈中使用(句柄或者直接指针)来访问堆中的对象实例。同时Java堆也是垃圾收集器管理的主要区域,也被叫做GC堆,JVM调优主要是针对这里。
GC回收
目前的Java堆垃圾收集器主要是采用分代垃圾收集算法,Java堆可以进行划分:Eden区、From Survivor(幸存者)、To Survivor、老年代。垃圾回收算法有:标记-清除算法(最基础回收算法,后面的算法都是对此进行优化)、标记-复制算法、标记-整理算法、分代收集算法。
内容总结
以上是互联网集市为您收集整理的虚拟机JVM全部内容,希望文章能够帮你解决虚拟机JVM所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。