
JVM
horseber
飞是小李飞刀的飞,刀是小李飞刀的刀
展开
-
JVM:介绍
JVM系列知识大都来自于国内学习JVM最好的书籍【深入理解Java虚拟机】没有之一。经过自己理解和总结汇成该系列。学习JVM书是必看的、还需要结合大牛的文章,自己画图理解,学习总结等途径。1、什么是JVM?Java虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是运行相同的字节码,它们在不同平台都会给出相同...原创 2019-09-15 10:52:47 · 102 阅读 · 0 评论 -
JVM:Java内存模型
JMM(java memory model)java内存模型主要目标是定义程序中的共享变量,(此处所指的变量是实例字段、静态字段等,不包含局部变量和函数参数,因为这两种是线程私有无法共享)在虚拟机中存储到内存与从内存读取出来的规则细节java被分为工作内存和主内存,工作内存中保存了该线程使用到的变量的主内存副本拷贝,并规定线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读...原创 2019-09-15 10:53:11 · 111 阅读 · 0 评论 -
JVM:内存模型
JDK7的jvm数据区内存结构图:1、程序计数器程序计数作用:记录当前线程所运行的代码指令地址(记录线程执行到那个地方,线程切换回来的时候以便继续执行),字节码解释器工作时,就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳准、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成,程序计数器保证了程序的正常执行注意:当线程执行的是本地方法的时候,程...原创 2019-09-15 10:53:27 · 113 阅读 · 0 评论 -
JVM:判断对象存活算法
JVM线程私有部分(程序计数器,虚拟机栈,方法栈)随着线程而生,随线程而灭,内存分配和回收都具有确定性,而堆、方法区(jdk8为元数据区),内存分配和回收都是动态的。 GC做的三件事哪些内存需要回收(判断对象存活) 如何回收(回收算法) 谁去回收一、判断对象存活引用计数算法引用计数算法很简单,类似重入锁原理。与对象它实际上是通过在对象头中分配一个空间来保存该对象被引用的次数。如果...原创 2019-09-15 10:53:39 · 199 阅读 · 0 评论 -
JVM:回收算法
二、如何回收(回收算法)判断了对象存活的状态,就需要通过gc回收算法,将垃圾回收2.1、标记-清除算法该算法先标记,后清除,将所有需要回收的对象进行标记,然后清除;这种算法的缺点是:效率比较低(标记和清除的效率都不高);标记清除后会出现大量不连续的内存空间碎片,这些碎片太多将来到需要分配较大对象时,无法找到连续的内存,而不得再次触发GC,造成内存浪费以及时间的消耗。2.2、复制算法...原创 2019-09-15 10:53:47 · 113 阅读 · 0 评论 -
JVM:垃圾回收器
前面了解过,通过可达性算法可以分析出谁需要被收回、回收算法知道如何去回收,接下来就是使用不同垃圾回收器去回收JDK7之后的HotSpot虚拟机包含垃圾回收器有:用于回收新生代的收集器包括Serial、PraNew、Parallel Scavenge,回收老年代的收集器包括Serial Old、Parallel Old、CMS,还有用于回收整个Java堆的G1收集器。Serial收集器...原创 2019-09-15 10:53:57 · 168 阅读 · 0 评论 -
JVM:虚拟机性能监控工具
jps 查看进程状况-q:仅输出VM标识符,不包括classname,jar name,arguments in main method-m:输出main method的参数-l:输出完全的包名,应用主类名,jar的完全路径名-v:输出jvm参数 -V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件 -Joption:传递参数到...原创 2019-09-15 10:54:07 · 145 阅读 · 0 评论 -
JVM:类加载器
对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。如果两个类来源于同一个Class文件,只要加载它们的类加载器不同,那么这两个类就必定不相等。启动类加载器(Bootstrap ClassLoader)使用C++语言实现,是虚拟机自身的一部分;这个类加载器负责将存放在\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟...原创 2019-09-15 10:54:36 · 124 阅读 · 0 评论 -
JVM:类装载机制
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化。最终形成可以被虚拟机最直接使用的java类型的过程就是虚拟机的类加载机制。JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化。在五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为...原创 2019-09-15 10:54:24 · 331 阅读 · 1 评论