JVM
文章平均质量分 83
JVM
涂作权的博客
To do what I want to do!
展开
-
详细了解G1、了解G1、G1垃圾收集器详解、G1垃圾回收器简单调优
首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象。垃圾回收的基本步骤:1.查找内存中不再使用的对象。2.释放这些对象占用的内存。1.查找内存中不再使用的对象那么问题来了,如何判断哪些对象不再被使用呢?A:引用计数法引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾。这种方法的缺点就是不能检测到环的存在。B:根搜索算法(可达性分析算法)原创 2023-08-22 21:57:01 · 2758 阅读 · 3 评论 -
72.JVM参数设置(各种jvm参数)、分析;Total Heap;The Young Generation;
72.JVM参数设置、分析JVM系列三:JVM参数设置、分析不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主要cup个数,内存不同),所以使用的GC种类转载 2021-08-15 14:20:50 · 777 阅读 · 0 评论 -
75. CPU 100%运行实战案例分析
75. CPU 100%运行实战案例分析生产库问题现象:1),每次tomcat启动后第8天左右就会出现CPU 100%运行的情况;2),jmap -heap pid命令查看老年代已使用99%;jvm启动配置项:-server -Xms2048m -Xmx2048m -Xmn700m -XX:SurvivorRatio=8 -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+Pr转载 2021-08-15 13:52:00 · 251 阅读 · 0 评论 -
73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令
73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令73.1.堆内存基本结构73.2.参数分类73.3.推荐的配置项73.4.参数混用问题73.5.常用命令73.JVM内存基础结构,参数分类,推荐的配置项,参数混用问题,常用工具,常用命令73.1.堆内存基本结构注:以下内容无特殊说明都是jdk7 hotspot虚拟机环境下的配置。73.2.参数分类JVM启动参数共分为三类:1、标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容。例如转载 2021-08-15 13:39:48 · 273 阅读 · 0 评论 -
67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优
67.Java垃圾收集机制67.1.对象引用67.2.垃圾对象的判定67.3.垃圾收集算法67.3.1.标记—清除算法67.3.2.标记—整理算法67.3.3.分代收集67.4.垃圾收集器67.5.性能调优67.Java垃圾收集机制67.1.对象引用Java 中的垃圾回收一般是在 Java 堆中进行,因为堆中几乎存放了 Java 中所有的对象实例。谈到 Java 堆中的垃圾回收,自然要谈到引用。在 JDK1.2 之前,Java 中的引用定义很很纯粹:如果 reference 类型的数据转载 2021-08-15 12:52:30 · 234 阅读 · 0 评论 -
66.javac 编译与 JIT 编译\编译过程\javac 编译\词法、语法分析\填充符号表\语义分析\字节码生成\JIT 编译
66.javac 编译与 JIT 编译66.1.编译过程66.2.javac 编译66.2.1.词法、语法分析66.2.2.填充符号表66.2.3.语义分析66.2.4.字节码生成66.3.JIT 编译66.javac 编译与 JIT 编译66.1.编译过程不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码转载 2021-08-15 12:17:41 · 599 阅读 · 0 评论 -
65.Java语法糖
65.Java语法糖语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java 中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。泛型是 JDK1.5 之后引入的一项新特性,Java 语言在还没有出现泛型时,只能通过 Object 是所有转载 2021-08-15 12:01:49 · 247 阅读 · 0 评论 -
64.多态性实现机制—静态分派与动态分派(方法解析、静态分派、动态分派、单分派和多分派)
64.多态性实现机制—静态分派与动态分派64.1.方法解析64.2.静态分派64.3.动态分派64.4.单分派和多分派64.多态性实现机制——静态分派与动态分派64.1.方法解析Class 文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在 Class 文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给 Java 带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使转载 2021-08-15 11:55:54 · 766 阅读 · 0 评论 -
62.类文件结构(平台无关性、类文件结构)
62.类文件结构62.1.平台无关性62.2.类文件结构62.类文件结构62.1.平台无关性Java 是与平台无关的语言,这得益于 Java 源代码编译后生成的存储字节码的文件,即 Class 文件,以及 Java 虚拟机的实现。不仅使用 Java 编译器可以把 Java 代码编译成存储字节码的 Class 文件,使用 JRuby 等其他语言的编译器也可以把程序代码编译成 Class 文件,虚拟机并不关心 Class 的来源是什么语言,只要它符合一定的结构,就可以在 Java 中运行。Java 语转载 2021-08-15 11:41:50 · 281 阅读 · 0 评论 -
60.Java 代码编译和执行的整个过程
60.Java 代码编译和执行的整个过程60.Java 代码编译和执行的整个过程Java 代码编译是由 Java 源码编译器来完成,流程图如下所示:Java字节码的执行是由 JVM 执行引擎来完成,流程图如下所示:Java 代码编译和执行的整个过程包含了以下三个重要的机制:Java 源码编译机制类加载机制类执行机制Java 源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成 class 文件流程图如下所示:最后生成的 cl转载 2021-08-15 11:08:37 · 284 阅读 · 0 评论 -
53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例
53.垃圾回收算法的实现原理53.1.目录53.2.启动Java垃圾回收53.3.Java垃圾回收过程53.4.垃圾回收中实例的终结53.5.对象什么时候符合垃圾回收的条件?53.5.1.GC Scope 示例程序53.5.2.GC OutOfMemoryError 的示例程序。53.垃圾回收算法的实现原理http://www.importnew.com/13493.html53.1.目录1.垃圾回收介绍2.垃圾回收是如何工作的?3.垃圾回收的类别4.垃圾回收监视和分析本教程是转载 2021-08-15 10:57:20 · 643 阅读 · 0 评论 -
JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点
47.JVM的内存结构,Eden和Survivor比例49.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数50.-XX:+CMSScavengeBeforeRemark51.JVM调优——之CMS 常见参数解析52.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点47.JVM的内存结构,Eden和Survivor比例eden 和 survior 是按8比1分配的http://blog.csdn.net/lojze_转载 2021-08-15 10:36:23 · 1289 阅读 · 0 评论 -
46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)
46.什么情况下会发生栈内存溢出46.1.Java 内存区域与内存溢出46.1.1.内存区域46.1.1.1.程序计数器46.1.1.2.Java 虚拟机栈46.1.1.3.本地方法栈46.1.1.4.Java 堆46.1.1.5.方法区46.1.1.6.直接内存46.1.2.内存溢出46.1.3.对象实例化分析46.什么情况下会发生栈内存溢出如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。 如果虚拟机在动态扩展栈时无法申请到足够的内存空间转载 2021-08-15 10:25:35 · 361 阅读 · 0 评论 -
45.JVM调优策略、常见问题:内存泄漏(年老代堆空间被占满、持久代被占满、堆栈溢出、线程堆栈满、系统内存被占满)优化方法:优化目标、优化GC步骤、优化总结;案例分析(公司系统参数、网上给的配置参数)
45.JVM调优策略45.1.常见问题45.1.1.内存泄漏45.1.1.1.年老代堆空间被占满45.1.1.2.持久代被占满45.1.1.3.堆栈溢出45.1.1.4.线程堆栈满45.1.1.5.系统内存被占满45.2.优化方法45.2.1.优化目标45.2.2.优化GC步骤45.2.3.优化总结45.3.案例分析45.3.1.案例1 Intellij IDEA 2016优化45.3.2.公司系统参数45.3.3.网上给的配置参数45.3.4.Intellij IDEA 2转载 2021-08-15 09:59:12 · 2252 阅读 · 0 评论 -
36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
36.JVM内存分哪几个区,每个区的作用是什么?37.如和判断一个对象是否存活?(或者GC对象的判定方法)38.简述java垃圾回收机制?39.java中垃圾收集的方法有哪些?40.java类加载过程?41.简述java类加载机制?42.类加载器双亲委派模型机制?43.什么是类加载器,类加载器有哪些?44.简述java内存分配与回收策率以及Minor GC和Major GC36.JVM内存分哪几个区,每个区的作用是什么?Java虚拟机主要分为以下一个区:方法区:有时候也成为永久代,转载 2021-08-15 09:36:06 · 910 阅读 · 0 评论 -
35.JVM 参数(JVM中的各种参数及含义、收集器相关、PrintGC等各种辅助参数)
35.JVM 参数说下下面jvm参数含义:-server -Xms512m -Xmx512m -Xss1024K-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly35.1 内存相关选项参数详解默认值-Xms初始堆大小–-Xmx最大堆大转载 2021-08-15 00:28:23 · 263 阅读 · 0 评论 -
34.对象 GC,GC属性,影响GC的因素,GC步骤,GC算法,安全区/安全区域,新生代,老年代等介绍
34.对象 GC,GC属性,影响GC的因素,GC步骤,GC算法,安全区/安全区域,新生代,老年代等介绍34.1.GC属性34.2.影响GC的因素34.3.GC步骤34.3.1.Mark34.3.1.1.引用计数算法(Reference Counting)34.3.1.2.可达性分析算法(Reachability Analysis)34.3.2.Clean Up34.3.2.1.清除(Sweep)34.3.2.2.复制(Copying)34.3.2.3.整理(Compacting)34.转载 2021-08-15 00:13:40 · 591 阅读 · 0 评论 -
31. 如何计算对象已死(引用计数器算法、可达性分析算法)32.对象是否可 GC?33. Minor GC 和 Full GC
31. 如何计算对象已死31.1.引用计数器算法引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象不再被使用,是“垃圾”了。引用计数器实现简单,效率高;但是不能解决循环引用问问题(A对象引用B对象,B对象又引用A对象,但是A,B对象已不被任何其他对象引用),同时每次计数器的增加和减少都带来了很多额外的开销,所以在JDK1.1之后,这个算法已经不再使用了。31.2.可达性分析算法可达性分析算法是通过一些转载 2021-08-14 23:50:08 · 179 阅读 · 0 评论 -
30.jvm.gc(GC之详解CMS收集过程和日志分析)
30.jvm.gc(GC之详解CMS收集过程和日志分析)30.1.话题引入30.2.ParNew and CMS30.3.日志30.3.1.GC日志初体验30.3.2.Minor GC30.3.3.Full/Major GC30.3.3.1.Phase 1: Initial Mark30.3.3.2.Phase 2: Concurrent Mark30.3.3.3.Phase 3: Concurrent Preclean30.3.3.4.分析30.3.3.5.Phase 4: Conc转载 2021-08-14 23:41:29 · 355 阅读 · 0 评论 -
29.类加载机制、类加载过程、加载、验证、准备、解析、初始化、总结
29.类加载机制29.1.类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持 Java 语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成转载 2021-08-14 22:38:10 · 500 阅读 · 0 评论 -
28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器
28Java类的加载机制28.1.什么是类的加载28.2.类的生命周期28.2.1.加载:查找并加载类的二进制数据28.2.2.连接28.2.3.初始化28.3.类加载器28.4.类的加载28.5.双亲委派模型28.6.自定义类加载器28. Java类的加载机制28.1.什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是原创 2021-08-14 22:11:14 · 207 阅读 · 0 评论 -
27.垃圾收集器(Serial收集器、ParNew收集器、Parallel收集器、Parallel Old 收集器、CMS收集器、G1收集器、常用的收集器组合)
27.垃圾收集器27.1.Serial收集器27.2.ParNew收集器27.3.Parallel收集器27.4.Parallel Old 收集器27.5.CMS收集器27.6.G1收集器27.7.常用的收集器组合27.8.参考27.垃圾收集器再如:https://wangkang007.gitbooks.io/jvm/content/la_ji_shou_ji_qi.html如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现27.1.Serial收集器串行收集器是转载 2021-08-14 21:11:33 · 302 阅读 · 0 评论 -
26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法
26.Java GC算法 垃圾收集器1.1.1标记 -清除算法1.1.2复制算法1.1.3标记-压缩算法1.1.4分代收集算法26.Java GC算法 垃圾收集器概述垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 ja原创 2021-08-14 20:49:40 · 274 阅读 · 0 评论 -
24.volatile关键字的作用、volatile原理、可见性、内存屏障、volatile性能、transient
24.volatile关键字的作用24.1.volatile原理24.2.可见性24.3.内存屏障24.4.volatile性能25.transient24.volatile关键字的作用volatile在Java并发编程中常用于保持内存可见性和防止指令重排序。24.1.volatile原理被volatile关键字修饰的变量,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读原创 2021-08-14 20:35:04 · 434 阅读 · 0 评论 -
14.VisualVM使用详解、15.VisualVM堆查看器使用的内存不足、19.class文件--文件结构--魔数、20.文件结构--常量池、21.文件结构访问标志(2个字节)、22.类加载机制概
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足16.性能调优概述17.性能调优–案例118.性能调优—案例三19.class文件–文件结构–魔数20.文件结构–常量池21.文件结构访问标志(2个字节)22.类加载机制概述23.类加载过程14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足在使用visualvm分析大的dump文件时,常会遇到堆查看器使用的内存不足。解决办法:修改:JAVA_HOME/lib/visualvm/原创 2021-08-14 20:24:44 · 1978 阅读 · 0 评论 -
13.8.可视化虚拟机工具--Jconsole内存监控、13.9.可视化虚拟机工具--Jconsole线程监控、13.10.死锁原理以及可视化虚拟机工具--Jconsole线程
13.8.可视化虚拟机工具–Jconsole内存监控13.9.可视化虚拟机工具–Jconsole线程监控13.10.死锁原理以及可视化虚拟机工具–Jconsole线程13.8.可视化虚拟机工具–Jconsole内存监控13.9.可视化虚拟机工具–Jconsole线程监控线程监控类似:jstack监控再new一个线程将程序改成:13.10.死锁原理以及可视化虚拟机工具–Jconsole线程需要两个线程。案例代码:...原创 2021-08-14 19:35:56 · 194 阅读 · 0 评论 -
13.7.深入理解jstack日志,线程的状态
13.7.深入理解jstack日志转自:https://blog.csdn.net/iteye_5603/article/details/82652200在分析线上问题时常使用到jstack 命令将当时Java应用程序的线程堆栈dump出来。面对jstack 日志,我们如何查看?首先要清楚线程的状态线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead线程状态变迁图:各状态说明:New: 当线程对象创建时存在的状态,此时转载 2021-08-14 19:17:01 · 10333 阅读 · 0 评论 -
13.5.虚拟化工具--jhat详解、13.6.虚拟化工具--jstack详解
13.5.虚拟化工具–jhat详解一般不通过这个命令执行,而是通过图形化工具类查看jvm信息。在页面下有:查看什么是OQL语句在页面上有OQL help,可以查看OQL的语法。13.6.虚拟化工具–jstack详解转自:https://zhuanlan.zhihu.com/p/88880002jstack主要用来查看某个Java进程内的线程堆栈信息.1, jps 查看java进程pid2, top -Hp pid 找出该进程内最耗费CPU的线程3, printf “%x\n转载 2021-08-14 18:50:35 · 295 阅读 · 0 评论 -
13.4.虚拟化工具--jmap详解
13.4.虚拟化工具–jmap详解13.4.1.jmap命令基本概述13.4.2.命令格式13.4.3.参数说明13.4.虚拟化工具–jmap详解13.4.1.jmap命令基本概述jmap命令是一个可输出所有内存中对象的工具,甚至可以将VM中的heap,以二进制输出成文本。64位机上使用需要使用如下方式:jmap -J-d64 -heap pid13.4.2.命令格式jmap [option] <pid> (to connect to running pro转载 2021-08-14 18:42:14 · 737 阅读 · 0 评论 -
13.3.虚拟化工具--jinfo详解
13.3.虚拟化工具–jinfo详解实时查看和调整虚拟机的各项参数。jinfo命令可以用来查看java进程运行的JVM参数,命令如下:[root@admin ~]# jinfo --helpUsage: jinfo [option] <pid> (to connect to running process) jinfo [option] <executable <core> (to connect to a core fi转载 2021-08-14 18:31:42 · 619 阅读 · 0 评论 -
13.2.虚拟化工具--jstat
13.1.虚拟化工具–jps工具13.2.虚拟化工具–jstat13.2.1.使用详情列表13.1.虚拟化工具–jps工具本地虚拟机唯一id Ivmid local virtual machine idm运行时传入主类的参数v虚拟机参数L运行时的主类全面 或者jar包名称。13.2.虚拟化工具–jstatjstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat [-命令选项][vmid][间隔时间/毫秒][查询次数]13.2.1.使用详情列表S0C转载 2021-08-14 17:17:52 · 331 阅读 · 0 评论 -
12.JDK1.8 JVM运行时数据区域概览、各区域介绍、程序计数器、Java虚拟机栈、本地方法栈、堆、堆空间内存分配(默认情况下)、字符串常量池、元数据区、jvm参数配置
12.JDK1.8 JVM运行时数据区域概览12.1.JDK1.8 JVM运行时数据区域概览12.2.各区域介绍12.3.各区域介绍12.3.1.程序计数器12.3.2.Java虚拟机栈12.3.3.本地方法栈12.3.4.堆12.3.4.1.堆空间内存分配(默认情况下)12.3.4.2.字符串常量池12.3.5.元数据区12.3.5.1.jvm参数配置12.JDK1.8 JVM运行时数据区域概览转自:https://blog.csdn.net/bruce128/article/d原创 2021-08-14 15:49:43 · 429 阅读 · 0 评论 -
11.JDK8内存模型、本地方法栈、虚拟机栈、栈帧结构(局部变量表、操作数栈、方法出口、虚拟机栈与本地方法栈的关系、寄存器、方法区、堆(Heap)、jvm中的常量池、Metaspace(元空间))
11.JDK8内存模型11.1.本地方法栈(Native Method Stacks)11.2.虚拟机栈(Java Virtual Machine Stacks)11.3.栈帧结构11.3.1.局部变量表11.3.2.操作数栈11.3.3.方法出口11.4.虚拟机栈与本地方法栈的关系11.5.寄存器(The pc Register)11.6.方法区(Method Area)11.7.堆(Heap)11.8.jvm中的常量池11.9.Metaspace(元空间)11.10.堆内存划分原创 2021-08-14 15:37:44 · 823 阅读 · 0 评论 -
4、JVM垃圾回收机制、新生代的GC、GC(Minor GC、FullGC)、GC日志、JVM参数选项、元空间(笔记)
4.JVM垃圾回收机制4.1.新生代的GC4.1.1.串行GC(SerialGC)4.1.2.并行回收GC(Parallel Scavenge)4.1.3.并行GC(ParNew)4.2.GC(Minor GC、FullGC)4.2.1.Minor GC4.2.2.FullGC4.3.GC日志4.JVM垃圾回收机制JVM分别对新生代和老年代采用不同的垃圾回收机制。4.1.新生代的GC新生代通常存活时间较短,因此基于复制算法来进行回收,所谓复制算法就是扫描出存活的对象,并复制到一块新的原创 2021-05-29 23:15:35 · 768 阅读 · 0 评论 -
3.内存分配、逃逸分析与栈上分配、直接内存和运行时常量池、基本类型的包装类和常量池、TLAB、可达性分析算法(学习笔记)
3.JVM内存分配3.1.内存分配概述3.2.内存分配–Eden区域3.3.内存分配–大对象直接进老年代3.3.1.背景3.3.2.解析3.4.内存分配–长期存活的对象进去老年代3.5.内存分配–空间分配担保3.5.1.堆空间参数3.5.2.-XX:HandlePromotionFailure3.6.内存分配–逃逸分析与栈上分配3.6.1.逃逸分析3.6.1.1.方法逃逸3.6.1.2.线程分配3.6.2.栈上分配3.6.3.逃逸分析/栈上分配的优势分析3.6.3.1.同步消原创 2021-05-29 23:06:26 · 708 阅读 · 0 评论 -
2、垃圾回收算法(标记清除算法、复制算法、标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)
2.垃圾回收概述2.1.垃圾回收算法2.1.1.垃圾回收算法-标记清除算法2.1.2.垃圾回收算法–复制算法2.1.3.垃圾回收算法–标记整理算法和分代收集算法2.1.4.垃圾回收算法–Serial收集器详解2.1.5.垃圾回收算法–Parnew收集器详解2.1.6.垃圾回收算法–Parallel收集器详解2.1.7.垃圾回收算法–CMS收集器详解2.1.8.最牛的垃圾回收集器–g1收集器详解2.垃圾回收概述对象什么时候才能变成垃圾。如何判定对象为垃圾对象。关于垃圾回收的三个问题:原创 2021-05-29 21:55:58 · 1081 阅读 · 0 评论 -
1、虚拟机内存管理、运行时数据区、线程共享区、Java堆、新生代、老年代、Eden区域分配、方法区、线程独占区、虚拟机栈
1.Java虚拟机内存管理1.1.运行时数据区[Runtime Data Area]1.1.1.线程共享区1.1.1.1.Java堆[heap]1.1.1.1.1.新生代、老年代、Eden区域分配1.1.1.1.2.年轻代(Young Generation)1.1.1.1.3.老年代(Old Generation)1.1.1.2.方法区[Method Area]1.1.2.线程独占区1.1.2.1.虚拟机栈[VM Stack]1.1.2.2.本地方法栈[Native Method sta原创 2021-05-29 21:16:43 · 1436 阅读 · 9 评论 -
01_Eclipse Memory analyzer的使用,hprof分析
1、 新建工程编写Demo,内容如下:package jvm;public class Demo { }DemoTest的内容如下:package jvm;import java.util.ArrayList;import java.util.List;public class DemoTest { public static void main(String[] args) { List<Demo> demoList = new ArrayList<原创 2021-04-12 23:51:39 · 2056 阅读 · 0 评论 -
Tomcat内存溢出的三种情况及解决办法分析
Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存溢出是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况: 1.OutOfMemoryError: Java heap space 2.OutOfMemoryError: PermGen space 3.OutOfMemo转载 2014-05-09 17:34:54 · 1520 阅读 · 0 评论 -
Eclipse Memory Analyzer以及内存泄露的原因
Eclipse Memory Analyzer是一个非常棒的堆内存分析工具,是JDK自带的堆分析工具jhat的一个非常好的替代品,能够快速地定位Java内存泄露的原因。 可能有的同学会问,JVM不是号称自动内存管理,GC会自动垃圾回收,Java怎么会有内存泄露,不会搞错吧?当然不会^_^, Java的内存泄露不同于C/C++的内存泄露,C/C++的内存泄露是由于使用了堆内存(new/转载 2014-05-09 11:04:58 · 1838 阅读 · 0 评论