JVM
乱糟
学到的都是自己的
展开
-
日常记录——JVM—GC常用参数
一、GC常用参数 1.-Xmn -Xms -Xmx -Xss : 年轻代 最小堆 最大堆 栈空间 2.-XX:+UseTLAB : 使用TLAB(线程本地分配缓存区),默认打开 3.-XX:TLABSize:设置TLAB大小 4.-XX:+DisableExplictGC:System.gc()失效 5.-XX:+PrintGC:打印GC信息 6.-XX:+PrintGCDetails:打印GC详细信息 7.-XX:+PrintGCTimeStamps:打印GC系统时间 8.-XX:+PrintVMOpti原创 2020-07-28 01:20:52 · 340 阅读 · 0 评论 -
日常记录——JVM—PS+PO的GC日志分析
一、代码 public class GCtest { public static void main(String[] args) { List<byte[]> byteList = new ArrayList<>(); for (;;){ byte[] bytes = new byte[1024]; byteList.add(bytes); } } } 二、配置 -Xm原创 2020-07-27 00:56:16 · 1119 阅读 · 0 评论 -
日常记录——JVM—G1垃圾回收器
一、简介、 G1垃圾回收器(Garbage First):是当今垃圾回收技术最前沿的成果之一,在17年作为JDK9默认的垃圾处理器。是一个可控的STW时间垃圾回收器,通过-XX:MaxGCPauseMillis 设置预期STW最大时间,G1会尽量达成目的,但不一定达成。 二、原理 G1垃圾回收器逻辑上存在年轻代、年老代之分,但实际在内存分配上将内存分成一小块一小块的Region,每个Region在某一时刻代表年老区(O),伊甸区(E),幸存区(S),大对象区(H,属于年老代,一个对象超过一半区域就放入H区)原创 2020-07-25 00:48:41 · 192 阅读 · 0 评论 -
日常记录——JVM—垃圾回收器(除G1、ZGC)
一、Serial 收集器 Serial:工作在年轻代的垃圾回收器,采用复制算法,单线程工作。GC线程工作时,用户线程停止工作,造成停顿STW(Stop The World),开启参数-XX:+UseSerialGC。 二、Serial Old 收集器 Serial Old :工作在年老代,采用标记整理算法,单线程工作。GC线程工作时,用户线程停止工作,造成停顿STW。 三、ParNew收集器 ParNew:Serial收集器的多线程版本,工作在年轻代,采用复制算法,多线程工作,在多核cpu提高GC效率,原创 2020-07-24 01:21:24 · 219 阅读 · 0 评论 -
日常记录——JVM—垃圾定义、垃圾寻找、基本垃圾回收方法、堆内存逻辑分区
一、垃圾定义 一个没有引用指向的对象,就是垃圾。可以理解为断了线的风筝。 二、垃圾寻找 1.引用计数法:有一个引用指向该对象,该对象头部的计数器加一,失效就减一,为0则代表垃圾。java不使用该方法,该方法存在循环引用问题,A指向B ,B 指向A 。则 A B 的计数器最小为1,不会回收。 2.可达性分析法:通过一系列名为GC Roots的对象作为起始点,不在GC Roots的引用连路上的对象则为垃圾。GC Roots对象:线程栈变量(方法的局部变量),静态变量(class的静态变量),常量(calss的常原创 2020-07-23 00:57:21 · 342 阅读 · 0 评论 -
日常记录——JVM—new Object()
一、对象创建过程 1.loading:加载对应类class文件。 2.linking:验证文件格式(verification)、为类的静态变量分配内存,并初始化为默认值(preparation)、将符号引用转成直接引用(resolution)。 3.initializing:初始化过程为类的静态变量赋予正确的初始值. 4.为对象分配内存。 5.成员变量赋默认值。 6.调用构造方法:成员变量赋默初始值,其他语句。 二、对象结构 1.对象头:Mark Word(标记字段)、Class Pointer(类型指针)原创 2020-07-22 00:39:33 · 945 阅读 · 0 评论 -
日常记录——JVM—自定义类加载器
一、简介 自定义类加载器实现方式为,继承ClassLoader类,重写其内部方法。简单介绍一下ClassLoader的与加载类相关的方法: 1.getParent():返回该类加载器的父类加载器。 2.loadClass(String name):加载名称为 name 的类,返回的结果是 java.lang.Class 类的实例。 3.findClass(String name):查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。 4.findLoadedClass(Str原创 2020-07-21 00:26:47 · 135 阅读 · 0 评论 -
日常记录——JVM—类加载器工作原理
一、简介 类加载器:负责读取 Java 字节代码文件(.class),并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance() 方法就可以创建出该类的一个对象。即将对应类的.class文件中的二进制流加载到内存空间。 二、类加载器分类 类加载器一共有四种: 1.Bootstrap ClassLoader :引导类加载器,它用来加载 Java 的核心库(存放在<JAVA_HOME>\lib目录中),是用原生代码来实现原创 2020-07-20 01:20:28 · 225 阅读 · 0 评论 -
日常记录——JVM—JVM简介、class文件解析
一、JVM简介 JVM:Java Virtual MAchine-Java虚拟机,可以将class文件解释为各种平台可执行的指令行,java中一个类在运行时,首先将java文件编译(javac)为class文件,然后jvm将class文件解释并执行。 JVM可分为三部分:类加载器(ClassLoader)系统、执行引擎、运行时数据区。 类加载器系统:负责加载程序中的类和接口。 执行引擎:解释执行+即时编译(JIT),开始对所有的代码都采取解释执行的方式,经常调用的方法编译为本地代码。 运行时数据区:程序计数原创 2020-07-19 01:40:51 · 544 阅读 · 1 评论 -
日常记录——JVM—java的四种引用及代码演示效果
一、简介 java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象,对象的引用包括: 1.强引用:使用 new 这个关键字创建对象时创建出来的对象就是强引用。GC宁愿抛出OutOfMemoryError也不会回收有强引用的对象。 2.软引用SoftReference:软引用的对象如果内存空间足够,GC不会回收,如果内存空间不足,就会回收该对象。可以和引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被回收,就会把这个软引用加入到与之关联原创 2020-07-08 01:04:14 · 187 阅读 · 0 评论