JVM
文章平均质量分 91
阿田和小夏
这个作者很懒,什么都没留下…
展开
-
JVM垃圾收集器概述及其简单调优
JVM垃圾收集器概述及其简单调优 Serial收集器最适用于应用程序的内存小于100MB的情况。 如果应用程序没有使用机器上的所有CPU,那么Concurrent收集器能取得更好的性能。 堆空间小于4GB的时候,CMS收集器性能比G1收集器要好,因为CMS使用的算法比G1更简单。而在大型堆或者巨型堆的时候,由于G1收集器可以分割工作,通常他比CMS收集器表现更好。 调整堆大小 如果分配的堆比较小,程序大部分时间可能消耗在GC上,没有足够的时间取运行应用程序逻辑。但如果堆分配的过大,虽然GC的频率会变得更少,原创 2021-02-21 23:12:16 · 280 阅读 · 6 评论 -
深入理解JVM学习笔记(一)
一、java内存区域 1. 运行时数据区域 1.1 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型中,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。 程序计数器是线程私有的,每个线程都有一个独立的程序计数器,各条线程之间的计数器...原创 2019-07-11 13:53:25 · 223 阅读 · 0 评论 -
深入理解JVM学习笔记(二)
二、垃圾收集器 1.概述 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,顾名思义,垃圾回收就是释放垃圾占用的空间,这一切都交给了JVM来处理。 在探讨Java垃圾回收机制之前,我们首先应该记住一个单词:Stop-the-World。Stop-the-world意味着 JVM由于要执行GC而停止了应用程序的执行,并且这种情形会在任何一种GC算法中发生。当Stop-the-w...原创 2019-07-22 17:00:16 · 152 阅读 · 0 评论 -
深入理解JVM学习笔记(三)
一、OutOfMemoryError 1.Java堆溢出 Java堆用于存储对象实例,只要不断地实例对象,并避免GC将他们回收,那么在对象达到最大堆容量的时候就会产生内存溢出错误。 这里介绍几个关于关于堆的参数: -Xms:堆的最小值 -Xmx:堆的最大值 -Xmn:新生代的大小 -XX:+HeapDumpOnOutOfMemoryError:让虚拟机在出现内训溢出错误的时候D...原创 2019-08-17 17:21:54 · 181 阅读 · 1 评论 -
什么?这样做得到的结果竟然是。。。由虚拟机栈来搞懂i++与++i
1.java虚拟机栈 简单介绍一下,在JVM中的运行时数据区分为五大区域,分别是程序计数器、java虚拟机栈、本地方法栈、堆和方法区。 而今天我们主要讲的就是java虚拟机栈。这一块区域是线程私有的,也就是每一个线程就是一个栈,在这个栈里存放的元素就是栈帧,这个栈帧说白了就是方法,每一个栈帧的入栈出栈就是一次方法的执行。在栈帧里主要有局部变量表,操作数栈,动态链接和方法出口。 了解这个东西离不开...原创 2020-04-21 16:10:35 · 222 阅读 · 1 评论 -
浅谈方法区,永久代与元空间
浅谈方法区,永久代与元空间 在我学习JVM运行时数据区的时候就有一个疑惑,永久代与元空间到底是啥?它们到底在哪?JVM规定的运行时数据区域只有五块,也没有永久代和元空间啊,对于这个问题我打算彻底搞懂他。(注:本文均是Hotspot虚拟机实现方式) JVM载入类的时候,需要存储类的元数据(即已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据),存储这些数据的区域就叫做方法区。方法区是JVM的一个规范,而永久代和元空间是对其具体的实现,在JDK7中是永久代,在JDK8中是元空间。不过永久原创 2020-07-27 17:18:33 · 197 阅读 · 0 评论