jvm内存模型 + 简单调优

jvm 源码学习笔记

    • jdk jre jvm概念介绍
    • jvm结构
    • jvm堆结构图及分代
    • 垃圾回收算法
    • 分代回收器 (有7个)
    • jvm 优化

jdk jre jvm概念介绍

  1. JDK(Java Development Kit(配套元件)) 是 Java 语言的软件开发工具包(SDK)

软件开发工具包(缩写:SDK、外语全称:Software Development Kit)在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。 , 软件开发工具包(缩写:SDK、外语全称:Software Development Kit)在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。

  1. JRE(Java Runtime Environment,Java运行环境)

包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)

  1. JVM是Java Virtual(虚拟) Machine(机器)(Java虚拟机)的缩写

JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。, JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

  1. JVM体系结构与运行原理:

Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS(操作系统 ,英语:operating system,缩写作 OS)之上的Java解释器中解释执行。

jvm结构

  1. 类加载子系统 运行时将.class 文件的内容和静态常量池放进方法区

  2. java 堆 Xmx (堆得指令) 在启动时就建立 java程序最主要的内存工作区域 堆空间是所有线程共享的

  3. 直接内存 直接映射到物理内存 大小限制取决于物理内存的大小 主要运行NIO库下面的东西 提升性能

  4. 垃圾回收系统 可以回收、自动管理 方法区 java堆 直接内存

  5. java 栈 保存着局部变量、方法参数,同时 和 java 方法的调用 、返回密切相关

  6. 本地方法栈

  7. pc pc寄存器 区分本地方法 和 java 中的方法

  8. 执行引擎 负责执行虚拟机的字节码

jvm内存模型 + 简单调优_第1张图片

jvm堆结构图及分代

一般分为新生代、老年代和永久代(静态属性、常量、类信息)
分代是为了提高对象内存分配 和 垃圾回收的效率
jvm内存模型 + 简单调优_第2张图片

垃圾回收算法

1.引用计数法 无法处理循环引用的问题
2.复制算法 需要两倍的内存空间

jvm内存模型 + 简单调优_第3张图片

3.标记-清除

需要暂停整个应用
会产生内存碎片

4.标记-整理 是对1.3 算法的优化

jvm垃圾收集器
次收集 影响的区域是年轻代
全收集 老年代

分代回收器 (有7个)

jvm内存模型 + 简单调优_第4张图片

  1. 串行收集器(Serial) 会暂停所有的线程
    jvm内存模型 + 简单调优_第5张图片

2.并行收集器 (ParNew)
解决安全点时间长短
jvm内存模型 + 简单调优_第6张图片

3.Parallel Scavenge 收集器

提高吞吐量

4.cms

并发 收集器 应用到服务端的优化

5.Serial old 老年代 串行化老年版

6.peralled old 并行化的老年版

jvm内存模型 + 简单调优_第7张图片

7.分区收集 - G1收集器 可跨区

jvm 优化

jdk 工具 jps , jstat, jinfo, jmap ,jvisualvm, Jconsole,jProfile,VisualVM

1.选择jvm的版本
2.堆内存大小的设置
3.垃圾收集器的选择
可以参见改博主 https://www.cnblogs.com/jay36/p/7680023.html

你可能感兴趣的:(源码学习)