专栏首页Duncan's BlogJAVA虚拟机了解

JAVA虚拟机了解

1.走进JAVA

1.JDK(Java Developmen Kit):将Java程序设计语言,Java虚拟机和Java API类库这三部分统称为JDK.

2.JRE(Java Runtime Environment):把Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE.

2.JAVA内存区域与内存溢出异常

先放一张jvm运行时数据区分配情况图

  1. Java堆中分配内存方式:如果Java堆中的内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就是仅仅把那个指针向空闲空间那边挪动一段与对象大小相等的距离,这种分配方式称为指针碰撞(Bump the pointer);如果Java堆中的内存并不是规整的,已使用内存和空闲的内存相互交错,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象,并更新列表上的记录,这种分配方式称为空闲列表(Free List);
  2. 划分内存过程需要考虑同步问题,两种方式:1)对分配内存空间的动作进行同步处理(CAS配上失败重试的方式保证更新操作的原子性);2)每个线程在Java堆中预先分配一小块内存,为本地线程分配缓冲(Thread Local Allocation Buffer),当TLAB分配完了之后再做同步操作.
  3. 对象的访问定位:使用句柄和直接指针

3.垃圾收集算法

  • 标记-清除算法:首先标记出所有需要回收的对象,在标记完成后一次性回收所有被标记的对象.
  • 复制算法:将可用内存分为两块,每次只使用其中一块,当着一块内存用完了,就将还存活的对象复制到另一块上,然后把已使用的内存空间一次清理掉.
  • 标记-整理算法:首先标记出所有需要回收的对象,让所有存活的对象都向一端移动,然后直接清理掉端界外的内存.\
  • 分代收集法:将堆分为新生代和老年代,根据每个代的特点选择合适的垃圾回收算法.

4.垃圾收集器

  1. Serial收集器 这个收集器是一个单线程的收集器,但它的”单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束.(Client模式下默认的垃圾收集器)
  2. ParNew收集器 ParNew收集器就是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数,收集算法,Stop the world,对象分配规则,回收策略等都与Serial收集器完全一样.(Server模式下的垃圾收集器)
  3. Parallel Scavenge收集器 Parallel Scavenge收集器更多关注于控制吞吐量(吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)).
  4. Serial Old收集器
  5. Parallel Old收集器
  6. CMS收集器 CMS收集器是一种以获取最短回收停顿时间为目标的收集器.目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上. CMS收集器是基于”标记-清除”算法实现的,运作过程分为4个步骤:
  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除
  1. G1收集器 运作大致分为:
  • 初始标记(标记GC Roots直接关联到的对象)
  • 并发标记(GC Roots可达性分析)
  • 最终标记(修正在并发标记阶段标记发生改变的那部分标记记录)
  • 筛选回收(对各个Region的回收价值和成本排序)

5.内存对象收集器

1.新生代GC(Minor GC):指发生在新生代的垃圾收集动作,Minor GC非常频繁,一般回收速度也比较快.

2.老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC,Major GC的速度一般会比Minor GC慢10倍以上.

6.虚拟机性能监控与故障处理工具

  • jps:虚拟机进程状况工具
  • jstat:虚拟机统计信息监视工具
  • jinfo:Java配置信息工具(实时地查看和调整虚拟机各项参数)
  • jmap:Java内存映像工具
  • jhat:虚拟机堆转储快照分析工具
  • jstack:Java堆栈跟踪工具
  • JConsole和VisualVM(可视化工具)

7.虚拟机执行子系统

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 后缀树

    Manacher算法: 用一个辅助数组Len,Len[i表示以字符T[i]为中心的最长回文串最友字符到T[i]的长度.

    DuncanZhou
  • pip安装包更换pypi源

    DuncanZhou
  • 社交网络中抽取有代表性的用户

    将用户以各个属性构建向量,以向量之间的距离来定义人物之间的代表性. 以Twitter社交拓扑为例,当A用户关注了B用户,将会有A指向B的一条有向边,

    DuncanZhou
  • 这一次,终于系统的学习了 JVM 内存结构

    最近在看《 JAVA并发编程实践 》这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的了解到 JVM 内存结构,关于 JVM 内存结构...

    黄泽杰
  • Java Instrument 功能使用及原理

    用户1263954
  • 《深入理解Java虚拟机》(五)JVM调优 - 工具

    JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Ja...

    搜云库
  • 深入JVM内存区域管理,值得你收藏

    JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包

    阿伟
  • 看懂这6张图,理解JVM内存布局就没问题了!

    本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要...

    macrozheng
  • 万字精美图文,带你掌握 JVM 内存布局及细节分析

    本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要...

    搜云库技术团队
  • 万字精美图文 | JVM学习面试大总结

    本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要...

    暴走大数据

扫码关注云+社区

领取腾讯云代金券