一、内存溢出

虚拟机栈和本地方法栈溢出:-Xss256k

package com.jedis;

import java.util.LinkedList;
import java.util.List; public class Demo1 {
private int len = 1; private void fun() {
len++;
fun();
} public static void main(String[] args) {
Demo1 t = new Demo1();
try {
t.fun();
} catch (Throwable e) {
System.out.println("Length = " + t.len);
e.printStackTrace();
}
} } /*
Length = 3257
java.lang.StackOverflowError
*/

栈溢出

Java堆溢出:-Xms5M -Xmx5M -XX:+PrintGCDetails -verbose:gc

package com.jedis;

import java.util.LinkedList;
import java.util.List; public class Demo1 { public static void main(String[] args) {
List<Object> list = new LinkedList<>();
int i = 0;
while(true) {
i++;
if(i%10000==0) System.out.println("i = " + i);
list.add(new Object());
}
//String[] strings = new String[1000000000];
} }

Java堆溢出

方法区和运行时常量池溢出:-XX:MaxMetaspaceSize=3M

package com.jedis;

import java.util.LinkedList;
import java.util.List; public class Demo1 { public static void main(String[] args) {
List<Object> list = new LinkedList<>();
} }
/*
Error occurred during initialization of VM
OutOfMemoryError: Metaspace
*/

方法区溢出

本地直接内存溢出:-Xmx10M -XX:MaxDirectMemorySize=10M

package com.jedis;

import java.lang.reflect.Field;

public class Demo1 {

    public static void main(String[] args) {
Field unsafeField = Unsafe.class.getDeclaredField()[0];
unsafeField.setAccessible(true);
Unsafe unsafeInstance = (Unsafe)unsafeField.get(null);
while(true) {
unsafeInstance.allocateMemory(1024*1024);
}
}
} /*
*/

直接内存溢出

二、垃圾收集器与内存分配策略

GC要做的事:

1、Where/Which?

2、When?

3、How?

where:堆/方法区(元数据空间)

which:引用计数法/可达性分析法

引用计数缺点:相互引用

A +1

B +1

C 0

A-->B

B-->A

A、B组成孤岛,但是两个在计数上不为0

python-引用计数法

---

可达性分析:

GC Roots

1、虚拟机栈引用的对象

2、方法区类属性引用的对象

3、方法区常量引用的对象

----

怎么回收?

标记-清除算法(Mark-Sweep):直接把可回收的标记后清除——>不连续内存碎片——>无法放下大对象

复制算法(Copying):区域一分为二,存活对象一一复制过来,然后一股脑的把另一个全部释放——>内存拷贝耗时、任何时候都有一半空间空着

标记-整理算法(Mark-Compact):存活对象按照某种顺序排列——>标记、移动耗时

分代收集算法:90%对象朝生夕死——>堆分为新生代(刚new的对象)、老年代(活过多少次GC过程提取到老年代)——>定制不同的GC算法

G1:JDK1.8后常用了——>把新生代、老年代分的更小

Eden:to survival:from survival

8:1:1

JVM实战的更多相关文章

  1. 从0开始带你成为JVM实战高手(百度网盘)

    狸猫技术窝<从0开始带你成为JVM实战高手> 之前写过几篇 JVM 相关的文章,最近复盘的时候,发现狸猫技术窝<从0开始带你成为JVM实战高手>真的不错,然后就在网上找了一下( ...

  2. JVM实战调优(空格引发的服务异常)

    JVM实战调优 问题描述 某一个项目中有一个文字转语音的服务,使用的是科大讯飞的语音转换服务,需要调用三方服务.因其转换服务是一个耗时操作,官方给的demo使用的是 WebSocket 进行数据转换操 ...

  3. jvm实战-基本类型占多少内存

    jvm内存占用模型 对象的内存结构 对象头 Header 包含两部分数据Mark Word和Kclass: Mark Word:存储对象自身的运行时数据,如hashCode.GC分代年龄.锁状态标志. ...

  4. jvm实战-jvm调优

    jvm调优 jvm调优主要是内存管理方面的调优,包括各个代的大小,GC策略等. 代大小调优 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内 ...

  5. JVM实战---类加载的过程

    任何程序都需要加载到内存才能与CPU进行交流 同理, 字节码.class文件同样需要加载到内存中,才可以实例化类 ClassLoader的使命就是提前加载.class 类文件到内存中 在加载类时,使用 ...

  6. JVM实战篇

    1.1 JVM参数 1.1.1 标准参数 -version -help -server -cp 1.1.2 -X参数 非标准参数,也就是在JDK各个版本中可能会变动 -Xint 解释执行 -Xcomp ...

  7. jvm 实战

    https://blog.csdn.net/neutrojan/article/details/50532590# 1.ps -ef |grep java 找出最耗性能的JAVA进程2.top -Hp ...

  8. 从零开始带你成为JVM实战高手

    专栏大纲 1.核心gc 内存回收以及提前设置内存大小.

  9. 一篇年薪60万的JVM性能调优文章

    JVM 调优概述 性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标. 延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集 ...

随机推荐

  1. sublime的安装与使用

    1.sublime简介 Sublime是一个代码编辑器,可以编写HTML,php,js,css等文件. Sublime是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具 ...

  2. 阿里云成为Hyperledger超级账本全球会员,发力区块链生态建设

    摘要: 阿里云将会与Hyperledger社区共同推进全球区块链技术和商业生态在多行业领域的建设. 2018年12月12日在瑞士巴塞尔的2018Hyperledger全球峰会上,阿里云正式加入Hype ...

  3. bzoj1217: [HNOI2003]消防局的设立 [树形dp]

    Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了 ...

  4. BZOJ 3083: 遥远的国度 (树剖+线段树)

    传送门 解题思路 前两个操作都比较基础.对于第三个操作分类讨论一下,首先如果当前根不是要操作点的子树,那么就无影响,直接查询操作点的子树即可.第二种是当前根是操作点的子树,那就找到当前根到操作点这条链 ...

  5. NOIp2018集训test-9-1(pm)

    欢乐%你赛,大家都AK了. 1. 小澳的方阵 吸取了前几天的教训,我一往复杂的什么二维树状数组上想就立刻打住阻止自己,就可以发现它是超级大水题了.记录每一行每一列最后一次的修改,对每个格子看它所在行和 ...

  6. (转)在Source Insight中看Python代码

    http://blog.csdn.net/lvming404/archive/2009/03/18/4000394.aspx SI是个很强大的代码查看修改工具,以前用来看C,C++都是相当happy的 ...

  7. [kuangbin带你飞]专题一 简单搜索 - N - Find a way

    正确代码: #include<iostream> #include<queue> #define N 210 #define inf 0xffffff using namesp ...

  8. java 读取mysql中数据 并取出

    public static String url = null; public static String username = null; public static String password ...

  9. uoj118 【UR #8】赴京赶考

    题目 不难发现我们直接走过去就行了 考虑到第\(i\)行的构造方法就是把\(b\)数组作为模板,每个数和\(a_i\)异或一下就可以了 于是不难发现对于一段连续相等的\(a\),它们在矩阵上就形成了完 ...

  10. Mysql集群和主从

    1.Mysql cluster: share-nothing,分布式节点架构的存储方案,以便于提供容错性和高性能. 需要用到mysql cluster安装包,在集群中的每一个机器上安装. 有三个关键概 ...