JVM堆溢出实例

堆溢出条件

要观察堆溢出,要同时满足两个条件:

  1. 堆大小固定,不可扩展
  2. 不断创建对象,并保持对象不被回收

因为对象是在堆里面创建的,堆大小一定,一直创建对象就可以消耗完堆空间,同时,由于由于垃圾回收的存在,创建对象的时候也要保证对象不要被当做垃圾回收了,JVM使用可达性分析来判断一个对象是否是垃圾。我们可以使用jvm参数来限制堆大小,可以将对象加入到List中,保持对象存活。

堆溢出代码

package test.jvm;import java.util.ArrayList;
import java.util.List;/**java堆溢出实例* 原理:java的堆是用来存放对象实例的,所以我们只要做到以下三点就可以使堆溢出:* 1、限制堆的大小,不可扩展* 2、不断新建对象* 3、保持对象存活不被回收* 对应的,我们需要:* 1、改变JVM的启动参数,将堆的最小值和最大值设成一样,这样就可以避免堆自动扩展(其实不一样也可以)* 2、不断产生对象* 3、使用一个List来保存对象,保持对象存活* * JVM配置参数: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError* @author luchu**/
public class JVMLearnning01 {static class OOMObject{}public static void main(String[] args){JVMLearnning01 hello = new JVMLearnning01();List<OOMObject> list = new ArrayList<>();while(true){list.add(new OOMObject());}}}

上面的代码要产生堆溢出,要先配置jvm启动参数,run as –> run configration 里可以配置。

上面几个人参数的意思是:

-Xms20m -Xmx20m : 堆的最大最小值都是20m,避免自动扩展。

XX:+HeapDumpOnOutOfMemoryError :让虚拟机在出现堆溢出时dump当前内存堆转储快照,以便进行分析。分析可以使用Eclipse Memory analyzer进行。


学习《深入浅出Java虚拟机》 周志明版 2.4章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 不确定度_python机器学习-chapter2_16

•分类器的不确定度决策函数(decision_function)&#xff1a;二分类&#xff1a;返回类型为(n_samples, )&#xff0c;为每个样本返回一个浮点数&#xff0c;这个浮点数的正负号代表了预测的分类&#xff0c;值的大小代表了置信度。多分类&#xff1a;返回类型为(n_samples, n_…

Java NIO学习

概述 NIO是一种基于缓存的、非阻塞的异步IO。NIO主要涉及到三个概念&#xff1a;Buffer&#xff08;缓存&#xff09;&#xff0c;Channel&#xff08;通道&#xff09;&#xff0c;Selector&#xff08;选择器&#xff09;。NIO和传统IO不同在于&#xff1a;NIO是基于缓存的&…

python的convert_python编程开发之类型转换convert实例分析

本文实例讲述了python编程开发之类型转换convert。分享给大家供大家参考&#xff0c;具体如下&#xff1a;在python的开发过程中&#xff0c;难免会遇到类型转换&#xff0c;这里给出常见的类型转换demo&#xff1a;int(x [,base ]) 将x转换为一个整数long(x [,base ])…

CSS3 pointer-events的应用

CSS3定义的pointer-events属性可以改变点击元素默认触发的事件 禁用a标签触发点击事件 使用pointer-events&#xff1a;none可以达到禁止点击的效果。我们都知道input标签有disable属性&#xff0c;但是其它标签没有&#xff0c;而很多时候&#xff0c;我们都是用a标签来做按…

TCP笔记

TCP笔记 概念 MTU&#xff1a;maximum transmission unit最大传输单元 每种网络都不一样&#xff0c;以太网是1500。最小46字节。当数据块大于MTU时&#xff0c;将在发送端IP层进行分片&#xff0c;接收端IP层进行重组。IP分组在网络中传输中出现丢包时&#xff0c;由于IP层没有…

微信语音怎么转发给别人听_微信分付怎么邀请别人 微信分付如何才能被邀请开通...

阅读本文前&#xff0c;请您先点击上面蓝色字体&#xff0c;再点关 注这样您就可以继续免费收到文章了&#xff0c;每天都有分享&#xff0c;完全是“免费订阅”&#xff0c;请放心关注注&#xff1a;本文转载自网络&#xff0c;如有侵权&#xff0c;请在后台留言联系我们进行删…

Javascript事件委托

Javascript事件通过冒泡传递&#xff0c;事件最初发生在某个元素&#xff0c;然后传递给该元素的父元素&#xff0c;父元素再传给父元素&#xff0c;如此一级一级往上传递。如果事件发生的元素不处理事件&#xff0c;而是让事件传递到祖先元素&#xff0c;让祖先元素处理&#…

Cmd Markdown 简明语法手册

转自地址&#xff1a; https://www.zybuluo.com/mdeditor?urlhttps://www.zybuluo.com/static/editor/md-help.markdown『Cmd 技术渲染的沙箱页面&#xff0c;点击此处编写自己的文档』Cmd Markdown 简明语法手册 Cmd-Markdown 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体。 示…

python函数拟合编程_Python应用实现双指数函数及拟合代码实例

双指数函数待拟合曲线为 y(x) bepx ceqximport matplotlib.pyplot as pltx ([0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0])y ([0.33, 0.26, 0.18, 0.16, 0.12, 0.09, 0.08, 0.07, 0.06, 0.06,0.06, 0.…

ThreeJS 开发实例

形状和材质 虚线 画虚线&#xff1a; function DrawDashLine(){var geometry new THREE.Geometry();/*** vertexColors: false 关闭使用点颜色来生成线的颜色&#xff0c;这个值默认是false&#xff0c;如果设置为true&#xff0c;那么后面设置的color将不起作用* dashSize…

【poj3070】Fibonacci

矩乘快速幂入门 题目已经把题解讲得很清楚了 1 #include<cstdio>2 #include<cstring>3 #include<cassert>4 #include<algorithm>5 using namespace std;6 #define p 100007 #define N 108 #define ll long long9 struct matrix{ 10 int n,m; 11 …

调用线程必须为sta_Java手写分布式系统远程调用RPC框架

一、RPC简介最近看hadoop底层通信&#xff0c;都是通过RPC实现的。RPC(Remote Procedure Call Protocol)远程调用&#xff1a; 远程过程调用是一种常用的分布式网络通信协议,它允许运行于 一台计算机的程序调用另一台计算机的子程序&#xff0c;同时将网络的通信细节隐藏起来&a…

ThreeJS阴影

在threejs中&#xff0c;阴影可以定义为“在渲染器支持的情况下&#xff0c;有一个可以产生阴影的光&#xff0c;照射在若干个可以产生阴影的物体上&#xff0c;并在某个可以接受阴影的物体上产生阴影”。所以&#xff0c;要产生阴影&#xff0c;渲染器、光、物体&#xff0c;接…

python2发送http不编码_[转]Python 2.x中常见字符编码和解码方面的错误及其解决办法...

Python 2.x中的字符编码&#xff0c;设计的的确不好&#xff0c;导致初学者&#xff0c;甚至是即使用Python很长时间的人&#xff0c;都会经常遇到字符编解码方面的错误。下面就把一些常见情&#xff0c;尽量的都整理出来&#xff0c;并给出相应的解决办法。看此文之前Python中…

shell总结(0基础入门)

一、简介 shell是用户和操作系统交互的命令行解释器。 shell有很多种&#xff1a; bash、csh、sh、ksh、、、 我们等了linux时看到的命令行就是一个bash。 二、第一个脚本&#xff1a; [rootlinux1 script]# vim first.sh #!/bin/bash#auther:xiaofan#time:2016.10.4#井号是注…

使用webpack打包ES6代码

安装nodejs 根目录下运行 npm init根据提示输入项目相关信息&#xff0c;然后运行&#xff1a; npm install 安装webpack 在项目根目录下运行 npm install webpack --save-dev 安装babel loader 和 转码规则 在根目运行命令&#xff1a; npm install babel-loader --sa…

c语言代码可以python运行吗_c语言如何运行python脚本

目前的C/C与python的混合编程分为两大类&#xff1a;1、使用python调用c/c编写的扩展库&#xff0c;扩展python的功能&#xff0c;我们暂且称为python调用c/c2、使用c/c程序调用执行python中定义的函数等&#xff0c;我们暂且称为c/c调用python本文只针对c/c调用执行python作一…

十万个为什么 —— 为什么一个数的 0 次方只能是 1

1. 幂的排列 212,224,238 ⇒ 20?,2−112 2012. 指数乘法运算 对于所有的实数 x,y&#xff0c;ax⋅ayaxy 因此&#xff1a; 当 y0 时&#xff0c;ax⋅a0ax ⇒ a01当 y−x 时&#xff0c;ax⋅a−xa0 ⇒ a01转载于:https://www.cnblogs.com/mtcnn/p/9423448.html

Threejs性能监视和可视化控制

概述 性能监视是监视threejs运行中的刷新频率&#xff0c;要使用到threejs提供的stat.js&#xff0c;可视化控制是在窗口中显示一个可见的控制框&#xff0c;可以通过鼠标改变其中的值&#xff0c;达到改变threejs对象参数的目的&#xff0c;需要使用到dat.gui.js 性能监视 …

python autoit上传文件_结合python+selenium使用AutoIt V3实现文件、图片上传

1.下载、安装AutoIt V3下载官网&#xff1a;https://www.autoitscript.com/site/autoit/downloads/2.AutoIt V3组件介绍AutoIt Windows Info 或者Au3Info_x64.exe 用于帮助我们识别Windows控件信息。Compile Script to.exe 或者Aut2exe_x64.exe 用于将AutoIt生成 exe …