jvm虚拟机分享课笔记

深入理解jvm虚拟机分享

1、 jvm执行流程

java-编译-.class—类加载器(随时随地加载)--【进入java虚拟机】

执行引擎—本地方法接口---本地方法库

运行时数据区

2、 运行时数据区

1) 程序计数器:记录程序执行位置,线程安全,计数器互不影响

2) 栈:创建一个线程,就会创建一个栈,执行一个方法就会创建一个栈帧,线程不共享 StackOverFlow

递归调用有内存泄漏风险

3) 堆:最大一块,java线程共享,存储对象地方,GC管理的主要区域,还分为新生代和老年代

4) 方法区:要加载类的信息(名称、修饰符等)、类中的静态变量,类中定义为final类型的变量、勒种Filekd信息、类中的方法信息。是被java线程锁共享的,不会频繁被GC回收,超过内存大小会抛出OutOfMemeory错误

5) 本地方法区 Native方法服务

3、 Java对象访问模式

1)、什么类型产生垃圾

引用类型

堆内存  栈内存  方法去

2)Object obj = 描述的是保存在栈内存中,而保存堆内存的引用,数据保存在本地变量表

   new Object() 一个真正的对象,保存在堆内存中

4、 通过句柄访问

本地变量表—句柄池—对象实例数据指针+对象类型数据指针-à找到对应的对象实例和对象类型

5、 通过直接指针访问---hotSpot虚拟机

本地方法表---对象+数据---对象类型

2006年开源,sun改良

6、 三种JVM

JVM中不在保存句柄

Sun 改良了hotSpot

BEA 的JRockit

IBM JVMs

7、 JVM垃圾回收

对不需要的对象进行标记,而后进行清除

JVM堆内存

1.8后 使用了元空间,去除了永久带

为什么取消永久带

为了将hotSpot与JRockit两个虚拟机标准联合为一个

8、堆内存分为三块

新生代:新对象和没达到一定年龄年轻代

老年代:对象被长时间使用的对象。老年代空间要比年轻代大

元空间:像一些方法中的操作的临时变量,对象等,是物理内存使用

每个代都有伸缩区,可以调配

8、 年轻代GC实现算法:复制算法

算法:复制采用的方式为从根集合扫描出存货的对象

原文地址:https://www.cnblogs.com/shuaiandjun/p/9665324.html