当前位置: 首页 > news >正文

服务器 空间 虚拟主机 网站需要哈尔滨住房和城乡建设局网站

服务器 空间 虚拟主机 网站需要,哈尔滨住房和城乡建设局网站,可视化导航网站源码,南京谷歌优化问题来源 一次生产事故,由于一次性从数据库查询过多数据导致线程 OOM:Java heap space 异常(千万级表,JVM堆内存2G),但是在线程OOM发生时,java进程却没有立即挂掉。 ##OOM与异常 说到底OutOfM…

问题来源

一次生产事故,由于一次性从数据库查询过多数据导致线程 OOM:Java heap space 异常(千万级表,JVM堆内存2G),但是在线程OOM发生时,java进程却没有立即挂掉。

##OOM与异常
说到底OutOfMemoryError也只是一个java中的异常而已,属于Error一系非检查异常:

ObjectThrowableErrorVirtualMachineErrorOutOfMemoryError

堆内存不够与异常的关系

线程发生OOM Java heap space,首先是堆空间不够了,然后再由jvm在申请分配空间的方法调用上抛出OOM异常。
对于线程,它会像处理普通异常一样,处理OutOfMemoryError。

实例

package org.example;import com.sun.javafx.scene.control.skin.TableHeaderRow;import java.util.ArrayList;//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {public static void main(String[] args) throws InterruptedException{//TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text// to see how IntelliJ IDEA suggests fixing it.System.out.printf("Hello and welcome!");System.out.println("JVM从OS获取的 最大 内存" + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");System.out.println("JVM从OS获取的 当前 内存" + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");System.out.println("JVM从OS获取的 但空闲 内存" + Runtime.getRuntime().freeMemory() / 1024 / 1024 + "M");// 创建线程new Thread(() -> {ArrayList<byte[]> bytes = new ArrayList<>();for (int i = 0; i < 2000; i++) {byte[] bytes1 = new byte[3 * 1024 * 1024];bytes.add(bytes1);System.out.println(Thread.currentThread().getName()+":JVM从OS获取的 当前 内存" + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");}}).start();// 创建线程new Thread(() -> {ArrayList<byte[]> bytes = new ArrayList<>();for (int i = 0; i < 2000; i++) {byte[] bytes1 = new byte[3 * 1024 * 1024];bytes.add(bytes1);System.out.println(Thread.currentThread().getName()+":JVM从OS获取的 当前 内存" + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");}}).start();while (true){System.out.println(Thread.currentThread().getName() + " continuing...");Thread.sleep(1000L);}}
}

结果:

##本机64位,16G内存,默认最大堆3600M
JVM从OS获取的 最大 内存3600M
JVM从OS获取的 当前 内存243M
JVM从OS获取的 但空闲 内存237M
main continuing...##2个线程分别开始创建byte数组,占用内存 
Thread-0:JVM从OS获取的 当前 内存307M
Thread-1:JVM从OS获取的 当前 内存307M
Thread-1:JVM从OS获取的 当前 内存307M
Thread-0:JVM从OS获取的 当前 内存307M##JVM增长到极限,Thread-1先报OOM
Thread-0:JVM从OS获取的 当前 内存3366M
Thread-0:JVM从OS获取的 当前 内存3366M
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap spaceat org.example.Main.lambda$main$1(Main.java:39)at org.example.Main$$Lambda$2/1828972342.run(Unknown Source)at java.lang.Thread.run(Thread.java:750)
Thread-0:JVM从OS获取的 当前 内存3366M
Thread-0:JVM从OS获取的 当前 内存3366M#Thread-1失败终止后,起引用的对象也就可以GC了,Thread-0又获取了好多内存,直到OOM
Thread-0:JVM从OS获取的 当前 内存3616M
Thread-0:JVM从OS获取的 当前 内存3616M
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap spaceat org.example.Main.lambda$main$0(Main.java:29)at org.example.Main$$Lambda$1/1989780873.run(Unknown Source)at java.lang.Thread.run(Thread.java:750)
main continuing...
main continuing...
main continuing...

结论

1、OOM是在线程上发生的,会被当做一般异常处理,不会导致JVM的退出;
2、多线程公用JVM,一个线程终止GC后,内存重新给其他线程分配。

http://www.yayakq.cn/news/148510/

相关文章:

  • 桥头镇网站仿做深圳响应式网站价格
  • 怎样在微信上做网站灰色的网站
  • php网站开发用什么php祥云平台技术支持双语网站
  • app软件小程序网站建设mvc做网站前台代码
  • 海南网站运营托管咨询医院门户网站建设方案
  • 广州网站开发水平广州亦客网络网站建设营销口号
  • 天津本地网站增城建设网站
  • 网站定制开发收费标准是多少公司o2o网站建设
  • 贴心的广州网站建设开福区网站建设中
  • 适合初学者做的网页在线seo优化工具
  • 做公司的网站大概多少钱安康市天然气公司
  • 莱芜区政协网站域名注册价格
  • 网页制作与网站建设实战大全 光盘网站不收录 域名问题
  • cms 网站后台内容管理系统模板个人建站步骤
  • 网站已运行时间代码百度有刷排名软件
  • 三亚网站建设费用建设推广站网站方案
  • 西宁网站建设维护制作app公司哪家好
  • 枣庄做网站通辽网站建设培训
  • 网站建设小程序公众号销售福州企业网站建设专业服务
  • 包头手机网站制作网站举报能不能查到举报人
  • 网站广审怎么做上海市住房和城乡建设部官方网站
  • 番禺区住房和建设局网站国外做化工产品的网站
  • 东莞网站设计哪家强建设网站商城后台系统
  • 网站开通专业网站建设定制公司
  • 上海火迎网络推广运营优化广州网站建设公司乐云seo598
  • 卖花网站源码学校网站建设基本流程
  • 赤峰市做网站建设的公司wordpress视频主题
  • 泰安网站建设制作怎样修改静态公司网站页面电话
  • 怎样做网站的源代码中国建设银行招聘官方网站
  • 做的网站百度没收录手机网站开发者工具