JVM的知识

什么是JVM

1.JVM:

JVM其实就是运行在 操作系统之上的一个特殊的软件。

2.JVM的内部结构:

(1)因为栈会将执行的程序弹出栈。

(2)垃圾99%的都是在堆和方法区中产生的。

类加载器:加载class文件。

类是模板,是抽象的,只有一个。但是对象是具体的

类加载器的类型:

虚拟器自带加载器

启动类(根)加载器

扩展类加载器

用户类加载器 (找类加载器会一层一层的往上找)

双亲委派机制:为了安全

其原理是:类加载器的查找顺序是按照这样的方式执行的:用户类加载器-> 扩展类加载器-> 启动类加载器 (最终执行)。

如果在启动类加载器和扩展类加载器中都找不到类,就会反过来找,即 启动类加载器-> 扩展类加载器-> 用户类加载器。如果都找不到的话,就会抛出异常,通知子类进行加载。

沙箱安全机制:为了安全

组成:字节码校验器、类装载器(使用的是双亲委派机制)。

Native:

带有native的关键字,说明java的作用达不到了,需要调用底层C语言库,进入本地方法栈。然后本地方法栈调用本地方法接口,进而调用本地方法库。

程序计数器: 线程私有的,就是一个指针,用于指向方法区中字节码。

方法区:

静态变量(static)、常量、类信息以及运行时常量池都放在方法区中。实例化变量存在堆内存中,于方法区无关。

栈:

一种数据结构,先进后出。一旦线程结束,栈就结束了。

三种JVM:

HotSpot

BEA

J9VM JIE

堆:

类加载器读取类文件后,一般在堆中存放引用对象的实例对象,具体是包含类、方法、常量、变量。

堆中分区:

新生区:分为伊甸园区(所有new的对象实例化都是在该区)和幸存者区 (from 和to 它们是可以相互之间进行转化的)

  1. 如果伊甸园区满了就进行轻度垃圾回(GC)收伊甸园区,如果有存活下的对象就进入幸存者区。
  2. 当幸存者区和伊甸园区都满了,就会进行一次重度垃圾回收(full GC),存活下来的程序进入老年区。

如果新生区和老年区都满了,就会出现内存溢出的现象(OOM)的现象。

老年区:
永久区:

jDK1.6之前:永久代,常量放在方法区中

JDK1.7 :永久代,但是逐渐退化

JDK1.8 :去除永久代,使用元空间代替。(逻辑上存在,实际物理层不存元空间)

永久区一般存放JDK自身携带的Class对象interface接口数据、存储java运行时的一些环境和类信息。这个区不存在垃圾回收。

JDK1.8以前的:

轻度垃圾回收:GC

重度垃圾回收:full GC

JVM分配的总内存是电脑内存的1/4,初始化内存大概是1/64。

如果堆出现OOM的情况:试着给堆空间分配更大的的内存。如果还报错就查找代码的错误。

3.GC 介绍和引用计数:

GC的作用区域

4.GC 的算法:

1. 引用计数器

引用计算器:给每个对象加一个计算器,每调用一次就计数加1。没有使用的话就直接清除。缺点是:需要占用额外的空间去计数。

2. 复制算法

复制算法(年轻代主要用的是复制算法):将幸存区(from) 的内容复制到幸存区(to)那边,此时幸存区(from)和幸存区(to)的角色会互换。当对象经历了15GC还没被清除,就会进入养老区。

每次GC后,幸存区to是空的。

好处是:没有碎片。

缺点是:浪费空间,因为幸存区(to) 是

空的。

MaxTenuringThreshold参数讲解 (最大任期)

在GC回收的时候. 如下图详解 From 区和To区 会来回的复制和交换位置. 每交换一次,就会增加一次年龄. 默认交换了15次, 就会从新生代到老年代中去.

3. 标记清除法

好处是:不需要额外的空间,与复制算法相比

缺点是:两次扫描需要时间,会产生内存碎片

4. 标记压缩算法

算法:再次扫描,将内存的碎片进行清除。

好处是:不会产生碎片。

缺点:再次扫描需要时间成本。

5. 标记清除压缩算法

先标记删除,等到几次,再将碎片进行压缩。

总结

年轻代:使用复制算法比较好,因为存活率低。

老年代:标记清除和标记压缩的方法比较好,因为存活率低,尽可能将内存碎片最小化。

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值