jvm理解

本人最近阅读《深入理解Java虚拟机_JVM高级特性与最佳实践》第2版  将一些核心内容进行总结,欢迎讨论!

1、jvm软件层面屏蔽了底层硬件、指令层面细节。执行class字节码文件

2、jvm运行时数据区

方法区: 存储的是虚拟机加载的类信息、静态变量等数据。

堆: 对于堆,Java程序员都知道对象实例以及数组内存都要在堆上分配。堆不再被线程所独有而是共享的一块区域,它的确是用来存放对象实例,也是垃圾回收GC的主要区域。实际上它还能细分为:新生代(Young Generation)、老年代(Old Generation)。对于新生代又分为Eden空间、From Survivor空间、To Survivor空间。

程序计数器 指向当前线程正在执行的字节码指令的地址

虚拟机栈:

与程序计数器一样,Java虚拟机栈也是线程私有的,虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈桢用于存储局部变量表,操作数栈,动态链接,方法出口等信息

本地方法栈:

本地方法栈和虚拟机栈相似,区别就是虚拟机为虚拟机栈执行Java服务(字节码服务),而本地方法栈为虚拟机使用到的Native方法服务。本地方法栈中使用的语言,使用方式,数据结构没有强制要求。

3、垃圾回收:

判断对象是否存活:

        在主流商用程序语言(java、C#)的主流实现中,都是称通过可达性分析(Reachabiliry An)来判定对象是否存活。这个算法的基本思路就是通过一系列称为"GC Roots"的对象 作为起始点,从这些起始点像下搜索,搜索所走过的路径称为引用链,当一个对象到"GC Roots"没有任何引用链相连时,则证明该对象是不可用的。

在java语言中可作为"GC Roots"的对象包含以下几种:

  a、虚拟机栈(栈帧中的本地变量表)中引用的对象

  b、方法区中类静态属性引用的对象

  c、方法区中常量引用的对象

  d、本地方法栈JNI(即一般说的Native方法)引用的变量

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值