jvm
文章平均质量分 93
沉泽·
心中有阳,眼里有光。
展开
-
JVM-常见SOFE和OOM错误(十)
一、JVM中常见的两种错误StackoverFlowErrorjava.lang.StackOverflowErrorOutofMemoryErrorjava.lang.OutOfMemoryError:java heap spacejava.lang.OutOfMemoryError:GC overhead limit exceeededjava.lang.OutOfMemoryError:Direct buffer memoryjava.lang.OutOfMemoryError:u转载 2022-03-13 11:34:18 · 561 阅读 · 0 评论 -
JVM-调优工具命令大全(九)
一、调优工具介绍Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfo下面做一一介绍二、jps2.1 介绍JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。可以通过jps -help查看命令使用详情2.2 命令格式jps [options] [hostid]2.3 option参数-l : 输出主类全名或jar路径-q : 只输出LVMID-m : 输出JVM启动时传递给main()的参数转载 2022-03-12 17:58:48 · 223 阅读 · 0 评论 -
JVM-参数配置(八)
一、JVM参数类型1.1 标配参数java -version java -help java -showversion在jdk各个版本之间稳定,很少有大的变化1.2 X参数-Xint:解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式1.3 XX参数(1)jdk的调试工具:如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?jps -l #查看进程号 jinfo -flag PrintGCDetails 进转载 2022-03-12 12:10:49 · 320 阅读 · 0 评论 -
JVM-垃圾回收器(七)
[解密JVM-16] 垃圾回收:垃圾回收器 学哥斌 于 2020-07-27 11:55:28 发布 ...转载 2022-03-08 17:25:36 · 120 阅读 · 0 评论 -
JVM-垃圾回收算法(六)
一、如何判断对象可以回收1.1 引用计数法当一个对象被引用时,就当引用对象的值加一,当值为 0 时,就表示该对象不被引用,可以被垃圾收集器回收。这个引用计数法听起来不错,但是有一个弊端,如下图所示,循环引用时,两个对象的计数都为1,导致两个对象都无法被释放。1.2 可达性分析算法1、JVM 中的垃圾回收器通过可达性分析来探索所有存活的对象2、扫描堆中的对象,看能否沿着 GC Root 对象为起点的引用链找到该对象,如果找不到,则表示可以回收3、可以作为 GC Root 的对象虚拟机栈(栈转载 2022-03-05 17:48:28 · 187 阅读 · 0 评论 -
JVM-直接内存(四)
一、定义属于操作系统,常见于NIO操作时,用于数据缓冲区分配回收成本较高,但读写性能高不受JVM内存回收管理二、读写流程正常的文件IO流读写过程:使用了DirectBuffer读写过程(直接内存):直接内存是操作系统和Java代码都可以访问的一块区域,无需将代码从系统内存复制到Java堆内存,从而提高了效率。直接内存也会导致内存溢出:public class Main { static int _100MB = 1024 * 1024 * 100; public转载 2022-03-04 11:28:17 · 641 阅读 · 0 评论 -
JVM-StringTable(三)
一、常量池与串池StringTable的关系public class StringTableStudy { public static void main(String[] args) { String a = "a"; String b = "b"; String ab = "ab"; }}将上述代码先编译成字节码,再反编译,得到如下虚拟机指令(部分截图):常量池:方法内的指令StringTable也属于方法区上的一块内存,在数据结构上,是一个哈希表,下面介绍一下指令执转载 2022-03-03 14:56:28 · 329 阅读 · 2 评论 -
JVM-强引用、弱引用、软引用和虚引用(五)
前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。一、强引用(Str转载 2022-03-02 15:53:35 · 226 阅读 · 0 评论 -
JVM-内存结构-方法区(二)
一、方法区1.1 定义方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息(比如class文件)、常量、静态变量、即时编译器编译后的代码等数据。1.2 结构方法区是JVM 所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与 堆 进行区分,通常又叫 非堆。 关于 方法区内存溢出 的问题会在下文中详细探讨。1.3 永久代和元空间1.3.1 PermGen(永久代)PermGen , 就是 PermGen space ,全称是转载 2022-02-27 22:19:04 · 923 阅读 · 0 评论 -
JVM-内存结构-程序计数器、虚拟机栈、本地方法栈、堆(一)
一、前言1.1 什么是 JVM ?1)定义Java Virtual Machine ,Java 程序的运行环境(Java 二进制字节码的运行环境)。2)好处一次编译,处处执行自动的内存管理,垃圾回收机制数组下标越界检查3)比较JVM、JRE、JDK 的关系如下图所示1.2 JVM种类和结构种类:jvm结构图:ClassLoader:Java 代码编译成二进制后,会经过类加载器,这样才能加载到 JVM 中运行。Method Area:类是放在方法区中。Heap:类的实例转载 2022-02-27 15:14:30 · 358 阅读 · 0 评论 -
JVM-jps命令使用
一、介绍jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程以及进程id。 jps 也是一样,它的作用是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个转载 2022-02-26 22:04:15 · 720 阅读 · 0 评论