jvm内存模型 + 简单调优
jvm 源码学习笔记
jdk jre jvm概念介绍
- 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。
- JRE(Java Runtime Environment,Java运行环境)
包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
- JVM是Java Virtual(虚拟) Machine(机器)(Java虚拟机)的缩写
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。, JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
- JVM体系结构与运行原理:
Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS(操作系统 ,英语:operating system,缩写作 OS)之上的Java解释器中解释执行。
jvm结构
-
类加载子系统 运行时将.class 文件的内容和静态常量池放进方法区
-
java 堆 Xmx (堆得指令) 在启动时就建立 java程序最主要的内存工作区域 堆空间是所有线程共享的
-
直接内存 直接映射到物理内存 大小限制取决于物理内存的大小 主要运行NIO库下面的东西 提升性能
-
垃圾回收系统 可以回收、自动管理 方法区 java堆 直接内存
-
java 栈 保存着局部变量、方法参数,同时 和 java 方法的调用 、返回密切相关
-
本地方法栈
-
pc pc寄存器 区分本地方法 和 java 中的方法
-
执行引擎 负责执行虚拟机的字节码
jvm堆结构图及分代
一般分为新生代、老年代和永久代(静态属性、常量、类信息)
分代是为了提高对象内存分配 和 垃圾回收的效率
垃圾回收算法
1.引用计数法 无法处理循环引用的问题
2.复制算法 需要两倍的内存空间
3.标记-清除
需要暂停整个应用
会产生内存碎片
4.标记-整理 是对1.3 算法的优化
jvm垃圾收集器
次收集 影响的区域是年轻代
全收集 老年代
分代回收器 (有7个)
- 串行收集器(Serial) 会暂停所有的线程
2.并行收集器 (ParNew)
解决安全点时间长短
3.Parallel Scavenge 收集器
提高吞吐量
4.cms
并发 收集器 应用到服务端的优化
5.Serial old 老年代 串行化老年版
6.peralled old 并行化的老年版
7.分区收集 - G1收集器 可跨区
jvm 优化
jdk 工具 jps , jstat, jinfo, jmap ,jvisualvm, Jconsole,jProfile,VisualVM
1.选择jvm的版本
2.堆内存大小的设置
3.垃圾收集器的选择
可以参见改博主 https://www.cnblogs.com/jay36/p/7680023.html
类似文章链接:
https://www.jianshu.com/p/b072ecc239f5
https://www.cnblogs.com/jieerma666/p/10803774.html