这个中秋连着国庆,主包也是给自己放了一个大大的假,今天回来继续更新学习,如果其中讲解的有问题,希望大家多多指正。
JVM是什么?
java程序的运行环境(java二进制字节码的运行环境)
好处:
一次编写,到处运行
自动内存管理,垃圾回收机制
首先我先自己理解一下最底层一定是计算机硬件,包括了计算机cpu和内存条。然后上方是操作系统window或linux... 最后是JVM
JVM的组成
1.什么是程序计数器?
- 程序计数器是私有的,每个线程一份(私有的就没有安全问题)
- 内部保存的字节码的行号
- 用于记录正在执行的字节码指令地址
2.介绍一下什么是JAVA堆?
java堆:线程共享的资源(共享就有安全问题)
用来保存对象实例+数组,当内存不够时,抛出OOM异常
java堆的组成:年轻代+老年代
- 年轻代分为:Eden区 两个大小完全相同的Servivor区
- 老年代是:主要保存生命周期长的对象
我想讲一下,对象从eden中垃圾回收后如果还存活会进入下一个块,最后到达老年代,这个后期会详细讲解。
jdk1.7和jdk1.8的区别:
jdk1.7有一个永久代是用于存储类信息,静态变量,常量,变以后代码,jdk1.8后移除了永久代,把数据存储到了本地内存的元空间中,这么做是为了防止OOM(内存溢出)
元空间中包括了:保存类的信息,静态变量,常量,编译后代理。
最后我想总结一下JVM的内存结构:
——————————————————————————————————
虚拟机栈 本地方法栈 堆:年轻代+老年代
程序计数器
本地内存:直接内存+元空间
——————————————————————————————————
好的,那么今天的分享就先这样啦,希望有帮助到大家