一、内存溢出

虚拟机栈和本地方法栈溢出:-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. 阿里云重磅推出物联网设备身份认证Link ID²

     2018年12月19日,阿里云宣布推出新版物联网设备身份认证Link ID²及物联网安全运营中心Link SOC,护航万物智联.   随着越来越多的设备连接到网络中,随之而来的安全问题越来越突出. ...

  2. thinkphp 数据缓存

    在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如: 缓存初始化 // 缓存初始化 S(array('type'=>' ...

  3. Android中滑屏实现----触摸滑屏以及Scroller类详解 .

    转:http://blog.csdn.net/qinjuning/article/details/7419207 知识点一:  关于scrollTo()和scrollBy()以及偏移坐标的设置/取值问 ...

  4. Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限

    目录 1. 需要在spring-security.xml中配置验证过滤器,来取代spring-security.xml的默认过滤器 2. 配置securityMetadataSource,可以通过ur ...

  5. HDU1285-确定比赛名次-拓扑排序板子题

    有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道 ...

  6. Hadoop节点集群挂了,Hbase数据源损坏怎么办

    今天集群节点一下子挂了5台,hbase的数据块也损坏. hadoop日志 .0.15:36642 dest: /ip:50010 2014-08-26 15:01:14,918 WARN org.ap ...

  7. Maven如何发布jar包到Nexus私库

    Nexus2可以通过管理界面来上传jar包到私库中,而最新的Nexus3却找不到了上传界面,只能通过以下方式来发布到私库. 发布第三方jar包 这种情况是maven远程仓库没有,本地有的第三方jar包 ...

  8. java-day13

    异常 指的是程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止 异常分类:编译异常,运行期异常 异常的产生过程分析 throw关键字:指方法中抛出指定异常 使用格式:throw new ...

  9. upper_bound() lower_bound() 用法

    头文件 #include<algorithm> #include<iostream>#include<vector>#include<algorithm> ...

  10. NPE问题

    “防止 NPE,是程序员的基本修养.”NPE(Null Pointer Exception) 参考: https://www.jianshu.com/p/9915f2e34a13