survivor

java虚拟机-垃圾回收算法

自闭症网瘾萝莉.ら 提交于 2020-04-02 07:27:23
在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。但是首先需要明确,什么样的对象才能当为垃圾: 1.引用计数法:如果某个引用(即指针)指向对象,那么说明该对象还存活着的,如果没有指针与之相关联,则可以认为是垃圾。 缺点,无法解决循环引用的问题。 public class Main { public static void main(String[] args) { MyObject object1 = new MyObject(); MyObject object2 = new MyObject(); object1.object = object2; object2.object = object1; object1 = null ; object2 = null ; } } class MyObject{ public Object object = null ; } 最后面两句将object1和object2赋值为null,也就是说object1和object2指向的对象已经不可能再被访问,但是由于它们互相引用对方,导致它们的引用计数都不为0,那么垃圾收集器就永远不会回收它们。 2.可达性算法: 在java里面是使用可达性分析算法判断对象是否存活的。这个算法的基本思路就是通过一系列名为"GC Roots"的对象作为起始点

JVM虚拟机 与 GC 垃圾回收

懵懂的女人 提交于 2020-02-12 16:31:24
一、JVM体系结构概述 1、JVM 与系统、硬件 ​ JVM 是运行在操作系统之上的,它与硬件没有直接的交互 2、JVM 体系结构概览 ​ 3、类装载器ClassLoader 执行原理 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定 ​ 4、类装载器ClassLoader装载流程(双亲委派) ​ 虚拟机自带的加载器 启动类加载器(Bootstrap)C++ 扩展类加载器(Extension)Java 应用程序类加载器(AppClassLoader)Java 也叫系统类加载器,加载当前应用的classpath的所有类 用户自定义加载器 Java.lang.ClassLoader的子类,用户可以定制类的加载方式 注 : Execution Engine执行引擎负责解释命令,提交操作系统执行。 ​ 5、Native Interface本地接口 本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++程序,Java 诞生的时候是 C/C++横行的时候,要想立足,必须有调用 C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体做法是 Native Method Stack中登记 native方法

[转]JVM参数使用手册

扶醉桌前 提交于 2019-12-16 21:48:20
内存分配相关 Xms 英文释义:Initial heap size(in bytes) 中文释义:堆区初始值 使用方法:-Xms2g 或 -XX:InitialHeapSize=2048m Xmx 英文释义:Maximum heap size(in bytes) 中文释义:堆区最大值 使用方法:-Xmx2g 或 -XX:MaxHeapSize=2048m Xmn 英文释义:Maximum new generation size(in bytes) 中文释义:新生代最大值 使用方法:-Xmn512m 或 -XX:MaxNewSize=512m PermSize 、 MetaspaceSize 英文释义:Initial size of permanent generation(in bytes) 中文释义:永久代(元空间)初始值 使用方法:-XX:PermSize=128m(1.7 之前版本)、-XX:MetaspaceSize=128m(1.7 之后版本) MaxPermSize 英文释义:Maximum size of permanent generation(in bytes) 中文释义:永久代(元空间)最大值 使用方法:-XX:MaxPermSize=256m(1.7之前版本)、-XX:MaxMetaspaceSize=256m(1.7之后版本) Xss 英文释义:Thread

JVM监控工具jstat使用详解

☆樱花仙子☆ 提交于 2019-12-16 13:09:04
一、常用的JVM监控工具有如下几项: 1、 VisualVM :是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力。所有这些都是免费的!它囊括的命令行工具包括jps,jstat,jmap,jinfo,jstack,JConsole,这些工具与JDK的标准版本是一致的。 2、 jps :与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 3、 jstat :一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 4、 jmap :打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 5、 jinfo :此JVM监控工具可以输出并修改运行时的java进程的opts。并展示堆栈占用空间大小,运行的JVM版本等信息。 6、 jstack :可以观察到jvm中当前所有线程的运行情况和线程当前状态。如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的javastack和nativestack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题(如死锁等问题)。 7、 jconsole :一个javaGUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。 二

窥探JVM内存分配和回收的过程

百般思念 提交于 2019-12-07 12:08:35
一、环境 JDK 垃圾收集器 是否启用TLAB 通用JVM参数(堆内存分配见下图) 1.6.0_65 Serial + Serial Old 否 -Xms20m -Xmx20m -Xmn10m -XX:SurvivorRatio=8 二、说明 Minor GC 发生在 新生代 ,当 Eden 区域没有足够空间进行分配 Java对象大多具有 短命 的特性 Minor GC 非常频繁 ,速度也比较 快 Major GC / Full GC 发生在老年代 出现Major GC, 经常 伴随至少一次Minor GC SpeedOf (Minor GC) ≈ 10 * SpeedOf (Major GC) 三、示例 1. 对象优先分配在 Eden区 1.1 说明 新对象,优先考虑分配在 Eden 区域 如果Eden区域没有 足够的空间 容纳新对象,进行GC 如果老年代有 足够的连续空间 用来存储所有新生代对象(或历次晋升的平均大小) ⇒ Minor GC 如果对象太大,以至于 Survivor 区域 无法容纳 ,对象直接晋升到 老年代 否则使用复制算法, 复制 到Survivor区域 否则 ⇒ 先进行一次 Minor GC ,若仍不满足上述条件,进行 Full GC 若 Full GC 后依然内存不足, 1.2 代码 # 代码 public class TestAllocation {

The G1 Garbage Collector

你离开我真会死。 提交于 2019-12-06 02:11:56
The G1 Garbage Collector The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories. It meets garbage collection (GC) pause time goals with a high probability, while achieving high throughput. The G1 garbage collector is fully supported in Oracle JDK 7 update 4 and later releases. The G1 collector is designed for applications that: Can operate concurrently with applications threads like the CMS collector. Compact(压紧) free space without lengthy(冗长的) GC induced pause times. Need more predictable(可预见的) GC pause durations. Do not

jvm中堆栈以及内存区域分配

无人久伴 提交于 2019-12-05 11:21:00
JVM内存组成结构 JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: 1)堆 所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示: 新生代。新建的对象都是用新生代分配内存,Eden空间不足的时候,会把存活的对象转移到Survivor中,新生代大小可以由-Xmn来控制,也可以用-XX:SurvivorRatio来控制Eden和Survivor的比例 旧生代。用于存放新生代中经过多次垃圾回收仍然存活的对象 2)栈 每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果 3)本地方法栈 用于支持native方法的执行,存储了每个native方法调用的状态 4)方法区 存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值 垃圾回收机制 JVM分别对新生代和旧生代采用不同的垃圾回收机制 新生代的GC: 新生代通常存活时间较短

3.0、JVM 学习——垃圾回收器

此生再无相见时 提交于 2019-11-27 07:05:13
文章目录 前言 本文基于 HotSpot 虚拟机 JVM 内存模型中的堆(Heap) 堆分为新生代和老年代 新生代 和 Minor GC 老年代和 Major GC/FullGC 永久代和Major GC/Full GC 垃圾回收器 前言 体能状态先于精神状态,习惯先于决心,聚焦先于喜好。 本文基于 HotSpot 虚拟机 本文基于 HotSpot 虚拟机 JVM 内存模型中的堆(Heap) JVM 内存模型中的堆是整个JVM中占用内存最大的一块。 堆分为新生代和老年代 堆的内存空间可以被细分为新生代和老年代,新生代中的对象有着“朝生夕死”的特征,老年代中的对象则大概率的会"持久"的被应用调用。 新生代对象达到某些条件(比如新生代垃圾回收次数超过默认的15次,或同年龄对象超过Survivor一半)可以进入老年代。 超过阀值大小的大对象直接进入老年代。 新生代 和 Minor GC 在HotSpot 中,新生代又被细分为一个 Eden 和 两个Survivor,一个 Eden :一个 Survivor=8:1,即新生代的内存空间会被分为10份,Eden占8份, 两个Survivor各占一份。两个Survivor又被细分为 Survivor From 和 Survivor To 新生代空间有限,当条件满足时会触发新生代的垃圾回收——Minor GC,存活下来的对象放入 Survivor