Java oom Cognition

Dynasty 2021-11-25 18:56:24
java oom cognition

C'est ma participation11Le défi du mois de juin21Oh, mon Dieu.,Voir les détails de l'événement:2021Un dernier défi.

Un.. StackOverflowError

1.1 bug

public class StackOverflowErrorDemo {
public static void main(String[] args) {
javaKeeper();
}
private static void javaKeeper() {
javaKeeper();
}
}
Copier le Code

JVM La pile de machines virtuelles est profonde,La méthode est exécutée avec la pile entrante et la pile sortante,La méthode ci - dessus montre,main Récursion constante après l'exécution de la méthode,Tôt ou tard, la pile explosera.

Exception in thread "main" java.lang.StackOverflowError
at oom.StackOverflowErrorDemo.javaKeeper(StackOverflowErrorDemo.java:15)
Copier le Code

1.2 Analyse des causes

  • Boucle récursive infinie ( Les causes les plus courantes ), Notez toujours s'il y a une boucle dans votre code qui appelle une méthode et ne peut pas sortir.
  • Un grand nombre de méthodes ont été mises en œuvre , Cause thread Stack out of Space
  • Une grande quantité de variables locales est déclarée dans la méthode
  • native Le Code a une logique assignée sur la pile , Et la mémoire requise n'est pas petite ,Par exemple, java.net.SocketInputStream.read0 Demande une allocation sur la pile 64KB Cache pour(64Bits Linux)

1.3 Solutions

  • Réparer le Code d'exception qui a lancé un appel récursif infini , Pile d'exceptions lancée par le programme , Trouver des lignes de code qui se répètent constamment ,Comme tu veux., Réparer la récursion infinie Bug
  • Dépanner les dépendances cycliques entre les classes (Quand deux objets se réfèrent l'un à l'autre,En appelanttoString Cette exception se produit également lors de la méthode )
  • Adoption JVM Paramètres de démarrage -Xss Augmenter l'espace mémoire de la pile de thread , Certains scénarios d'utilisation normale nécessitent un grand nombre de méthodes ou de variables locales , La limite d'espace de la pile de fil peut être augmentée de façon appropriée

2.. Java heap space

Java Tas pour stocker des instances d'objets, Il suffit de créer des objets ,Et garantir GC Roots Il y a un chemin accessible vers l'objet pour éviter GC Effacer ces objets , Et à mesure que le nombre d'objets augmente, , Une exception de débordement de mémoire se produit lorsque la capacité totale atteint la limite de capacité maximale du tas .

Java Heap Memory OOM L'exception est l'exception de débordement de mémoire la plus courante dans les applications réelles .

2.1 bug

/** * JVMParamètres:-Xmx12m */
public class JavaHeapSpaceDemo {
static final int SIZE = 2 * 1024 * 1024;
public static void main(String[] a) {
int[] i = new int[SIZE];
}
}
Copier le Code

Le Code a tenté d'attribuer une capacité de 2M De int Tableau, Si vous spécifiez les paramètres de démarrage -Xmx12m, Allouer la mémoire ne suffit pas , C'est comme si XXXL Objet du numéro ,Allez. S No. Java heap space Bouchon intérieur .

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at oom.JavaHeapSpaceDemo.main(JavaHeapSpaceDemo.java:13)
Copier le Code

2.2 Analyse des causes

  • Demande de création d'un objet surdimensionné , Habituellement un grand tableau
  • Plus de visites que prévu /Volume des données, Habituellement, le système en amont demande une augmentation du débit , Fréquent dans toutes sortes de promotions /Activité de second Kill, Il est possible de vérifier s'il y a un pic pointu en combinaison avec les indicateurs de flux d'affaires.
  • Utilisation excessive du finalizer (Finalizer), L'objet n'a pas été immédiatement GC
  • Fuite de mémoire(Memory Leak), Un grand nombre de références d'objets ne sont pas libérées ,JVM Impossible de le recycler automatiquement , Fréquent lors de l'utilisation de File Etc. ressources non récupérées

2.3 Solutions

Pour la plupart , Normalement, il suffit de passer par -Xmx Parameter Elevation JVM L'espace mémoire en tas est suffisant . Si ce n'est toujours pas réglé , Pour plus de détails, veuillez consulter les conditions suivantes: :

  • Si c'est un objet surdimensionné , On peut vérifier son caractère raisonnable , Par exemple, si tous les résultats de la base de données sont interrogés en même temps ,Sans limiter le nombre de résultats
  • En cas de pression de pointe , Envisager d'ajouter des ressources de machines , Ou faire une rétrogradation limite de courant .
  • En cas de fuite de mémoire, Besoin de trouver l'objet détenu , Modifier la conception du Code , Comme fermer une connexion qui n'est pas libérée

Fuite de mémoire et débordement de mémoire

Débordement de mémoire(out of memory),C'est quand un programme demande de la mémoire,Pas assez de mémoire pour l'utiliser,- Oui.out of memory;Comme demander Integer,Mais je l'ai gardé. Long Le nombre qui peut être sauvegardé,C'est un débordement de mémoire..

Fuite de mémoire( memory leak),C'est le programme après avoir demandé la mémoire,Impossible de libérer l'espace mémoire demandé,Un risque de fuite de mémoire peut être ignoré,Mais les fuites de mémoire empilées ont de graves conséquences,Peu importe la quantité de mémoire,Tôt ou tard, il y aura de la lumière..

memory leak Qui finira par out of memory!

版权声明
本文为[Dynasty]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125185609057v.html

  1. hive学习笔记之二:复杂数据类型,五分钟搞懂MySQL主从复制原理
  2. hive学习笔记之一:基本数据类型,java实现分页技术详解
  3. HDU-3038-How Many Answers Are Wrong【 带权并查集 】题解,java实战项目论坛
  4. HDU 1078 FatMouse and Cheese(记忆化搜索,DP,rocketmq教程教程
  5. [Java multithreading] static synchronized method and synchronized (class) code block
  6. [Java multithreading] synchronized statement block
  7. [Java multithreading] synchronized synchronization method
  8. [Java multithreading] thread priority and guard thread
  9. [Java multithreading] stop the thread
  10. Several methods of [Java multithreading] thread
  11. [Java multithreading] Java multithreading skills
  12. Structure des données Python: tableaux, listes, piles, files d'attente et implémentations
  13. Re - Learning Swagger 2.0 and Swagger 3.0 of Spring Series
  14. Error editing HTML5 using webstorm
  15. 【Spring】mybatis-spring
  16. JavaScript post request returned an exception, possibly Cross - Domain request
  17. 图解 Kafka 线程模型及其设计缺陷
  18. Springboot + mybatis Plus + springsecurity + JWT implements user stateless request authentication (front and back end separation)
  19. SQL injection and XSS attack of springboot security vulnerability
  20. Docker employee readme: Why did docker lose to kubernetes?
  21. 19 high force linux commands, hurry to use them!
  22. Add data files for Oracle tablespaces or temporary tablespaces
  23. Intellij IDEA神器居然还有这些小技巧,mysql集群搭建视频
  24. IntelliJ IDEA(2019)之Web项目创建,掌门一对一java面试题
  25. InnoDB(2,如何访问Redis中的海量数据
  26. InheritableThreadLocal使用详解,java多线程面试题及答案整理
  27. How does Oracle modify the data type of a column
  28. Oracle 12C 12.1.0.1.0 management control file official document translation instructions
  29. Oracle 10g 10.2.0.1 in Oracle Linux 5.4 32bit RAC installation manual (Yimo Xiyang)
  30. Oracle 12C in Oracle Linux 6.5 64bit installation manual
  31. 一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
  32. Schéma du modèle de fil Kafka et de ses défauts de conception
  33. Starting and shutting down Oracle RAC database cluster
  34. CRS_ Oracle CRS stack is already configured and will be running under init(1M)
  35. Common skills of Oracle stored procedure
  36. Check the number of CPUs, core books and threads of the Linux system
  37. jQuery-实例方法
  38. Oracle de duplicated data
  39. jQuery-dom和jQuery,入口函数(基本知识)
  40. Oracle creates unique constraints on columns that already have duplicate data
  41. JavaScript-拷贝
  42. JavaScript-this指向问题
  43.  There is ^ [[a garbled code problem in the up and down keys in Oracle sqlplus
  44. JavaScript-封装与继承(两种)
  45. JavaScript-包装类型
  46. JavaScript-传值(引用类型,基本类型)
  47. JavaScript-面向对象(构造函数,实例成员,静态成员)
  48. JavaScript-解构赋值
  49. JavaScript-箭头函数
  50. JavaScript-参数
  51. JavaScript-预解析(变量提升)
  52. JavaScript-闭包closure
  53. JavaScript-声明变量的关键字
  54. JavaScript - mot - clé pour déclarer une variable
  55. Fermeture de fermeture JavaScript
  56. JavaScript Pre - parse (promotion des variables)
  57. Paramètres JavaScript
  58. Common annotations in springboot
  59. JavaScript - orienté objet (constructeur, membre d'instance, membre statique)
  60. JavaScript value Transfer (reference type, Basic type)