![](https://img-blog.csdnimg.cn/20191222112927968.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM+GC解析
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Jeremy_Lee123
AI Everywhere!
展开
-
JVM监控和故障处理工具总结
一、JVM 命令行工具这些命令在 JDK 安装目录下的 bin 目录下:jps(JVM Process Status): 类似 UNIX 的ps命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息; jstat( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据; jinfo(Con...原创 2019-12-23 21:36:32 · 505 阅读 · 0 评论 -
JVM内存结构之垃圾回收算法
一、再谈JMMJMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式.JMM关于同步规定:1.线程解锁前,必须把共享变量的值刷新回主内存 2.线程加锁前,必须读取主内存的最新值到自己的工作内存 3.加锁解锁是同一把锁由于...原创 2019-07-03 00:38:31 · 771 阅读 · 0 评论 -
Java四大垃圾回收器
一、串行并行并发G1四大垃圾回收方式蓝色的线表示运行的线程,黄色的线表示GC线程。1.Serial(串行垃圾回收器)它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程(“stop the world”),所以不适合服务器环境。2.Parallel(并行垃圾回收器)多个垃圾收集线程并行工作,此时用户线程时暂停的,适用于科学计算/大数据处理首台处理等弱交互场...原创 2019-12-22 16:23:27 · 1029 阅读 · 0 评论 -
SOFE之StackOverflowError
Java中的常见OOM有:java.lang.StackOverFlowError:栈溢出(其实属于SOFE) java.lang.OutOfMemoryError: java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: Direct buffe...原创 2019-12-21 23:58:58 · 504 阅读 · 0 评论 -
OOM之Java heap space
Java中的常见OOM有:java.lang.StackOverFlowError:栈溢出(其实属于SOFE) java.lang.OutOfMemoryError: java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: Direct buffe...原创 2019-12-21 23:59:34 · 1692 阅读 · 0 评论 -
OOM之GC overhead limit exceeded
Java中的常见OOM有:java.lang.StackOverFlowError:栈溢出(其实属于SOFE) java.lang.OutOfMemoryError: java heap space java.lang.OutOfMemoryError: GCoverhead limit exceeded java.lang.OutOfMemoryError: Direct buffe...原创 2019-12-22 00:00:23 · 1015 阅读 · 1 评论 -
OOM之Direct buffer memory
Java中的常见OOM有:java.lang.StackOverFlowError:栈溢出(其实属于SOFE) java.lang.OutOfMemoryError: java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: Direct buffe...原创 2019-12-22 00:00:56 · 3804 阅读 · 0 评论 -
OOM之unable to create new native thread
Java中的常见OOM有:java.lang.StackOverFlowError:栈溢出(其实属于SOFE) java.lang.OutOfMemoryError: java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: Direct buffe...原创 2019-12-22 00:01:29 · 1253 阅读 · 0 评论 -
OOM之Metaspace
Java中的常见OOM有:java.lang.StackOverFlowError:栈溢出(其实属于SOFE) java.lang.OutOfMemoryError: java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: Direct buffe...原创 2019-12-22 00:02:04 · 1939 阅读 · 2 评论 -
深入理解JVM之Java字节码(.class)文件详解
Understanding bytecode makes you a better programmer前言作为一个Java开发者,对技术的追求而不仅仅停留在会用API,会写基本功能上,要想在技术上有更高的造诣,就需要深入到原理层面去认识代码运行的机制。因此,本文从class字节码文件的结构入手,一步步来解剖二进制字节码的内部工作原理,这对深入理解JVM的运行机制大有裨益,同时,对于想要使用B...原创 2019-06-22 14:15:42 · 855 阅读 · 0 评论 -
JVM底层原理之标配参数、X和XX参数
一、JVM的参数类型(1)标配参数(以-开头) java -versionjava -helpjava -showversion在JDK各个版本之间稳定,很少有大的变化。 [标准VM参数表]参数名称 描述 默认值 -d32 使用 32 位数据模型 (如果可用) / -d...原创 2019-07-03 22:42:16 · 3130 阅读 · 0 评论 -
JVM底层原理之元空间MetaspaceSize
一、JVM常用参数-Xms 初始堆内存大小,默认物理内存64/1 -Xms = -XX:InitialHeapSize-Xmx 最大堆内存,默认物理内存4/1 -Xmx = -XX:MaxHeapSize-Xss 栈内存大小 ...原创 2019-07-03 01:05:08 · 1876 阅读 · 0 评论 -
JVM底层原理之栈内存Xss讲解
一、JVM常用参数-Xms初始堆内存大小,默认物理内存64/1-Xms = -XX:InitialHeapSize-Xmx最大堆内存,默...原创 2019-07-03 22:43:52 · 3283 阅读 · 0 评论 -
JVM底层原理之堆内存初始大小
一、java1.8堆内存基本情況java1.8之後將最初的永久代取消了,由元空間取代。在java8中,永久代已經被移除,被元空間取代。元空间本质和永久代类似。元空间(java8)与永久代(java7)之间最大的区别在于:永久代使用的是JVM堆内存,但是java8以后的元空间并不在虚拟机中,而是使用本机物理内存。因此,默认情况下,元空间大小受本地内存限制。类的元数据放入na...原创 2019-07-03 00:57:48 · 1947 阅读 · 0 评论 -
JVM底层原理之PrintGCDetails回收前后对比
一、JVM常用参数-Xms初始堆内存大小,默认物理内存64/1-Xms = -XX:InitialHeapSize-Xmx最大堆内存,默...原创 2019-07-03 22:46:54 · 1265 阅读 · 3 评论 -
【深入Java虚拟机】之一:Java内存区域与内存溢出
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(Program&nbs...转载 2019-05-05 20:44:28 · 530 阅读 · 0 评论 -
【深入Java虚拟机】之二:Class类文件结构
平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就...转载 2019-05-05 21:19:35 · 461 阅读 · 0 评论 -
【深入Java虚拟机】之三:类初始化
类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的Java代码场景是:使用...原创 2019-05-05 21:46:17 · 529 阅读 · 0 评论 -
【深入Java虚拟机】之四:类加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示: 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可...原创 2019-05-05 21:49:36 · 506 阅读 · 0 评论 -
【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派
方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析。这在前面...转载 2019-05-05 21:52:54 · 418 阅读 · 0 评论 -
【深入Java虚拟机】之六:Java语法糖
转载请注明出处:http://blog.csdn.net/ns_code/article/details/18011009 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。J...转载 2019-05-05 21:56:11 · 498 阅读 · 0 评论 -
【深入Java虚拟机】之七:Javac编译与JIT编译
转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以...转载 2019-05-05 21:58:42 · 563 阅读 · 0 评论 -
【深入Java虚拟机】之八:Java垃圾收集机制
转载请注明出处:http://blog.csdn.net/ns_code/article/details/18076173对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例。谈到Java堆中的垃圾回收,自然要谈到引用。在JDK1.2之前,Java中的引用定义很很纯粹:如果reference类型的数据中存储的数值代...转载 2019-05-05 22:00:13 · 480 阅读 · 0 评论