微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM虚拟机

1.实现软件升级.(热替换)

2.更好的防止内存泄露,提高内存的有效使用率.

3.更好提高系统的吞吐量(可以处理更大的并发)

了解JVM产品

JVM是一个虚拟机规范,基于这个规范有不同的产品,列如:

Oracle 公司HotS

JVM构成:

在JVM规范中,可能有以下:

1.类加载子系统,负责将类读到内存,校检类的合法性,对类进行初始化

2.运行时数据区(负责存储类信息-方法区,对象信息-堆或栈,执行逻辑-栈)

3.执行引擎(负责从指定地址对应的内存中读取数据然后解释执行以及GC操作)

4.本地库接口(负责实现JAVA语言与其他语言之间的协同)

类如何加载?

在JVM类中加载由类加载器负责,她会负责将类从指定

有哪些加载器

  • 获取当前类的类加载器(AppClassLoader)
  • 获取扩展类的类加载器(ExtClassLoader)
  • 获取根类加载器(BootStrapClassLoaer)
  • 自定义类加载器,可以指定类加载方式以及扩展类的加载路径(ClasslOADER)

类加载的时机

1.隐式加载(构建当前类或子类对象,访问类中属性方法)

2.显示加载(ClassLoader.loadClass(.......))

双亲委派模型

向上询问,向下委托;当我们的类被加载时,首先会询问类加载器类对象

类加载基本过程

查找类--------读取类-------------读到字节数组后对字节数组里的内容进行效验分析,存储到方法区-------保存对象---创建字节码对象(java.lang.class)

关于类加载静态块是否执行

关于静态代码块是否执行要看类是处初始化,初始化了静态块就会执行

JVM构成

年轻代,老年代,伊甸园和幸存区

Java对象分配内存的过程是怎样的

编译器逃逸分析(JDK8已认开启),确定对象是在栈上分配还是在堆上分配

如果是在堆上分配,则首先检测是否可在TLAB(Thread Local Allocation Buffer) 上直接分配

如果在TLAB上无法直接分配则在Eden加锁区进行分配

-********************

如果Eden区无法存储对象,则执行Yongoing GC

如果Yongoing GC之后Eden区仍然不足以存储对象,则直接分配在老年代(当老年代内不能足时就会出现fullgc)

JVM年轻代幸存区设置比较小会有什么问题

伊甸园区对象被回收时,或者对象拷贝到幸存区,假如幸存区比较小,拷贝的对象比较大,对象想可能直接拷贝到老年代.这样会增加老年代GC的频率(老年代触发的GC我们可以简单理解为大GC或fullgc,这个过程非常慢),性能会影响,同时回收的思想就会被弱化

JVM参数

-xms用于设置初始堆大小

-XX?:+DoEscapeAnalysis用于逃逸分析

-XX: +PrintGC输出gc信息

-Xmx128m -Xmx128m -XX:+DoEscapeAnalysis -XX: +PrinGC

JVM中有哪些垃圾回收器

串行(Serial)

并行(Parallel)

并发(CMS)

G1(收集器--逻辑上分代------但是力度会更小)

怎么进行内存调优?

看是因为什么原因需要进行内存调优

如果是因为内存不足发生的,我可以进行设置内存大小来解决,减少GC

如果内存在固定的情况下,我们可以进行判断是否内存发生了泄露,从而判断解决

GC算法

.标记清除算法

       标记清除算法应用:----适合活着的对象比较少的内存区域,这样标记的事件就会缩短,也不会产生大量碎片

步骤:

1.会对活着的对象进行标记,

2.扫描内存对未标记的对象进行清除

总共扫描俩次,耗时有点长,标记清除算法可能会长生大量的碎片

比较适合老年代,老年代对象少,这样他的碎片就少了

 标记复制算法 -----适合或者的对象比较少的内存区,年轻代

步骤

         首先会扫描内存,对活着的对象进行标记,然后将其拷贝一块的内存中,原先的内存释放,适合活着的对象比较少的内存区,年轻代

         不是活着的就是垃圾对象,提高了效率

           以空间换时间

缺点:

        这种算法会牺牲一定的空间(年轻代生命力比较弱)

 

标记整理算法

步骤:

  1.标记活着的对象

   2.把活着对象向一侧移动

    3.清理便捷外的内存区域

比较适用于老年代

 

 对于JVM中的GC操作要考虑哪些问题

  1. 判定对象为垃圾的方式(可达性分析)
  2. 回收垃圾的算法(标记清除,标记复制,标及整理)
  3. 回收垃圾的线程(单个线程,多个线程)
  4. 回收垃圾是的并行与并发(单个线程,多个线程,秉性问题,并发问题)

原文地址:https://www.jb51.cc/wenti/3281345.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐