
java虚拟机
Qgwperfect
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
常用java虚拟机参数(跟踪垃圾回收--读懂虚拟机日志)
一,跟踪垃圾回收–读懂虚拟机日志 1,以下日志打印从上到下,依次变得越来越详细: -XX:+PrintGC 只要遇到GC,就会打印日志 -XX:+PrintGCDetails 打印详细的GC日志 -XX:+PrintHeapAtGC 每次GC前后分别打印堆的信息2,-XX:+PrintGCTimeStamps 该参数会在每次GC发生时,额外输出GC发生的时间,该输出时间为虚拟机启动后的原创 2017-10-10 19:32:27 · 481 阅读 · 0 评论 -
java学习 - JVM JSTAT命令的用法和参数讲解
一、常用命令分析1. jstat -gc pid可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。2.jstat -gccapacity pid可以显示,VM内存中三代(young,old,pe...转载 2019-03-19 09:38:33 · 358 阅读 · 0 评论 -
jvm jstat命令演示
1,jstat -gc pidC结尾是容量,U结尾是已使用空间。后面的是GC的次数和时间2,jstat -gccapacity pidNGCMN:年轻代(young)中初始化(最小)的大小(字节),MX就是最大NGC:年轻代(young)中当前的容量(字节)OGCMN:old代中初始化(最小)的大小(字节) ,OGC:old代当前新生成的容量(字节)PGCM...原创 2019-03-19 10:05:56 · 759 阅读 · 0 评论 -
jvm---jmap命令
1,jmap -histo pid打印每个class的实例数目,内存占用,类全名信息.VM的内部类名字开头会加上前缀”*”.如果live子参数加上后,只统计活的对象数量2,jmap -finalizerinfo pid打印正等候回收的对象的信息3,jmap -heap pid展示pid的整体堆信息GC使用的算法下面是参数说明:Heap Configurat...转载 2019-03-19 10:39:43 · 347 阅读 · 0 评论 -
【JVM】java程序执行流程示例
public class TestAdd { public static void main(String[] args) { int sum = add(1, 2); System.out.println(sum); } public static int add(int a, int b) { int c = 0; ...原创 2019-04-04 09:09:52 · 254 阅读 · 0 评论 -
Metaspace 之二--PermGen vs. Metaspace 运行时比较
PermGen vs. Metaspace 运行时比较 为了更好地理解Metaspace内存空间的运行时行为, 将进行以下几种场景的测试: 使用JDK1.7运行Java程序,监控并耗尽默认设定的85MB大小的PermGen内存空间。 使用JDK1.8运行Java程序,监控新Metaspace内存空间的动态增长和垃圾回收过程。 使用JDK1.8运行Java程序,...转载 2019-04-04 10:48:06 · 213 阅读 · 0 评论 -
JVM学习笔记
-Xss:规定了每个线程虚拟机栈的大小-Xms:堆的初始值-Xmx:堆能达到的最大值-Xms和-Xmx 设置相同可以减轻伸缩堆大小带来的压力判断对象是否为垃圾的算法:1,引用计数法1,通过判断对象的引用数量来决定对象是否可以被回收2,每个对象实例都有一个引用计数器,被引用则+1,完成引用则-13,任何引用计数为0的对象实例可以被当做垃圾进行收集优点:执行效率高,程序执...原创 2019-04-04 17:14:06 · 139 阅读 · 0 评论 -
GC roots如何判断对象不可达
查找内存中不再使用的对象 引用计数法 引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾。这种方法的缺点就是不能检测到环的存在。 2.根搜索算法 根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象...转载 2019-04-11 13:54:06 · 392 阅读 · 0 评论 -
JVM学习笔记---垃圾回收算法
1,标记-清除算法(Mark and Sweep)标记:从根集合进行扫描,对存活的对象进行标记 清除:对堆内存从头到尾进行线性遍历,回收不可达对象内存缺点:碎片化严重2,复制算法(Copying)分为对象面和空闲面 对象在对象面上创建 存活的对象从对象面复制到空闲面 将对象面所有的对象清除优点:解决碎片化的问题 顺序分配内存,简单高效 适用于对象存活率低的场...原创 2019-04-07 21:51:25 · 229 阅读 · 0 评论 -
JVM源码分析之安全点safepoint
上周有幸参加了一次关于JVM的小范围分享会,听完R大对虚拟机C2编译器的讲解,我的膝盖一直是肿的,能记住的实在有点少,能听进去也不多1、什么时候进行C2编译,如何进行C2编译(这个实在太复杂)2、C2编译的时候,是对整个方法体进行编译,而不是某个方法段3、JVM中的safepoint一直都知道,当发生GC时,正在执行Java code的线程必须全部停下来,才可以进行垃圾回收,这就是熟悉的...转载 2019-04-07 22:00:29 · 744 阅读 · 0 评论 -
JVM学习笔记---年轻代垃圾收集器
垃圾收集器之间的联系年轻代常见垃圾收集器:1,Serial收集器 (-XX:+UseSerialGC,采用复制算法)单线程收集,进行垃圾收集时,必须暂停所有的工作线程 简单高效,client模式下默认的年轻代收集器2,ParNew收集器 (-XX:+UseParNewGC,采用复制算法)多线程收集,其余的行为,特点和Serial收集器一样 单核执行效率不如Ser...原创 2019-04-08 10:18:47 · 558 阅读 · 0 评论 -
JVM学习笔记---老年代垃圾收集器
老年代常见垃圾收集器1,Serial Old收集器 (-XX:+UseSerialOldGC, 采用标记-整理算法)单线程收集,进行垃圾收集时,必须暂停所有的工作线程 简单高效,Client模式下默认的老年代垃圾收集器2,Parallel Old收集器 (-XX:+UseParallelOldGC, 采用标记-整理算法)多线程,吞吐量优先3,CMS收集器 (-XX:+...原创 2019-04-08 11:14:35 · 481 阅读 · 0 评论 -
JVM学习笔记---强引用,软引用,弱引用,虚引用
强引用最普遍的引用:Object obj = new Object(); 抛出OutOfMemoryError终止程序也不会回收具有强引用的对象 通过将对象设置为null来弱化引用,使其被回收软引用 (Soft Reference)对象处在有用但是非必须的状态 只有当内存空间不足时,GC才会回收该引用的对象内存空间 可以用来实现高速缓存 软引用可以和一个引用队列(Referen...原创 2019-04-08 14:43:32 · 161 阅读 · 0 评论 -
JVM学习笔记---WeakReference简单示例
public class Mobile { private double price; private String colour; public Mobile(double price, String colour){ this.price = price; this.colour = colour; } public double getPrice() { r...原创 2019-04-08 16:15:19 · 256 阅读 · 0 评论 -
类私有的静态变量
实体:public class TestPrivateStatic { private static int num = 0; public void setNum() { num++; } public int getNum() { return num; }}Main方法:public class Test { public static v...原创 2019-03-18 10:02:43 · 2543 阅读 · 0 评论 -
Java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”。根据“Java中的变量与数据类型”中的介绍,“变量是在内存中分配的保留区域的名称。换句话说,它是一个内存位置的名称”,也就是说我们通过这个变量名字就可以找到一个指向这个变量所引用的数据的内存指针,根据变量的类型我...转载 2019-03-18 10:18:42 · 188 阅读 · 0 评论 -
常用java虚拟机参数(类加载/卸载跟踪)
1,-verbose:class 跟踪类的加载和卸载 -XX:+TraceClassLoading 跟踪类的加载 -XX:+TraceClassUnloading 跟踪类的卸载java虚拟机还允许研发人员在运行是打印,查看系统中类的分布情况,只要系统启动时加上 -XX:+PrintClassHistogram参数,然后在java的控制台按下Ctrl+Break组合原创 2017-10-10 19:44:10 · 1185 阅读 · 1 评论 -
常用java虚拟机参数(系统参数查看)
由于目前的java虚拟机提供众多的可配置参数,不同的参数可能对系统的执行效果有较大的影响,因此,有必要明确当前系统的实际运行参数,虚拟机提供了一些手段来帮助研发人员获取这些参数。-XX:+PrintVMOptions 可以在程序运行是,打印虚拟机接受到的命令行显式参数。-XX:+PrintCommandLineFlags 可以打印传递给虚拟机的显式和隐式参数,隐式参数未必是通过命令直接给出的,它可能原创 2017-10-10 19:54:09 · 928 阅读 · 0 评论 -
学习堆的配置参数(最大堆和初始堆的设置)
-Xms 可以指定初始堆的空间大小-Xmx 可以指定最大堆空间的大小实际最大可用堆内存会小于指定的最大堆空间内存大小,这个偏差是由于虚拟机内部并没有直接使用新生代from/to的大小,而是进一步堆它们做了对齐操作。在实际工作中,也可以直接将初始堆-Xms与最大堆-Xmx设置相等,正阳的好处是可以减少程序运行时进行的垃圾回收次数,从而提高程序的性能。原创 2017-10-10 21:07:33 · 1914 阅读 · 1 评论 -
java虚拟机堆,方法区,java栈的关系
对象实例在堆里,类及方法实现在方法区,局部变量在栈中。java栈是一块线程私有的内存空间,如果说,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关。线程执行的基本行为是函数调用,每次函数调用的数据都是通过java栈传递的。java栈保存的主要内容为栈帧,每一次函数调用,都会有一个对应的栈帧被压入java栈,每一个函数调用结束,都会有一个栈帧被弹出java栈。由于每次函数调用都会生成原创 2017-10-28 23:50:06 · 952 阅读 · 0 评论 -
栈帧-局部变量表
局部变量表是栈帧的重要组成部分,它用于保存函数的参数和局部变量,局部变量表中的变量只在当前函数调用中有效,当函数调用结束后,随着函数栈帧的销毁,局部变量也会随之销毁。可以通过jclasslib查看函数的局部变量信息。局部变量表中槽位是可以重用的,如果一个局部变量过了作用域,那么在其作用域之后申请的新的局部变量就很有可能会复用过期局部变量的槽位,从而节省资源。局部变量表中的变量也是重要的垃圾回收根节点原创 2017-10-29 14:32:15 · 664 阅读 · 0 评论 -
栈帧-操作数栈,帧数据区,栈上分配
操作数栈主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。操作数栈也是先进后出的数据结构。帧数据区:除了局部变量表和操作数栈,java栈还需要一些数据来支持常量池解析,正常方法返回和异常处理等,大部分java字节码指令需要进行常量池访问,在帧数据区中保存着访问常量池的指针,方便程序访问常量池。当函数返回或者出现异常时,虚拟机要恢复调用者函数的栈帧,并让调用者函数继续执行下去,对异原创 2017-10-29 14:53:18 · 1551 阅读 · 0 评论 -
识别方法区
与java堆相同,方法区是一块所有线程共享的内存区域,用于保存类信息,如类的字段,方法,常量池等,方法区的大小决定了系统可以保存多少个类,系统定义了太多的类,导致方法区溢出,虚拟机会抛出内存溢出错误。在JDK1.6和1.7中,方法区可以理解为永久区,永久区可以使用-XX:PermSize和-XX:MaxPermSize指定,默认情况下-XX:MaxPermSize为64M。系统如果使用一些动态代理,原创 2017-10-29 20:42:55 · 332 阅读 · 0 评论 -
java虚拟机架构
java虚拟机的基本结构类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间,除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)java堆会在虚拟机启动的时建立,它是java程序最主要的内存工作区域,几乎所有的java对象实力都存放与java堆中。堆空间是所有线程共享的原创 2017-10-22 17:11:15 · 475 阅读 · 0 评论 -
新生代的配置
参数 -Xmn可以用于设置新生代的大小。设置一个较大的新生代大小会减少老年代的大小,此参数对系统性能以及GC影响很大。新生代的大小一般设置为整个堆空间的1/3到1/4左右。参数-XX:SurvivorRatio用来设置新生代中eden空间和from/to空间的比例关系,如下: XX:SurvivorRatio=eden/from=eden/to可以使用-XX:NewRatio来设置新生代和老年代的原创 2017-10-31 23:03:17 · 591 阅读 · 0 评论 -
堆溢出处理
在java程序运行过程中,如果堆空间不足,则有可能抛出内存溢出错误,java虚拟机提供参数 -XX:+HeapDumpOnOutOfMemoryError 使用该参数可以在内存溢出时,导出整个堆信息,可以和XX:HeapDumpPath配合使用,可以指定导出堆存放的路径。-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=原创 2017-10-31 23:33:25 · 461 阅读 · 0 评论 -
了解非堆内存的参数配置
虚拟机还有一些内存用于方法区,线程栈和直接内存的使用。方法区配置: 方法区主要存放类的元信息。 在JDK1.6和1.7版本中,可以使用-XX:PermSize和-XX:MaxPermSize配置永久区大小。其中-XX:PermSize表示初始的永久区大小,-XX:MaxPermSize表示最大永久区。在JDK1.8中,永久区被彻底移除,使用了新的元数据区存放类的元数据。默认情况下,元数据区只受系原创 2017-11-02 07:36:33 · 513 阅读 · 0 评论 -
linux性能监控工具-(显示系统整体资源使用情况-top命令)
显示系统整体资源使用情况 -top命令 top命令是linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况: 前半部分是系统统计信息,后半部分是进程信息。从左到右依次表示:系统当前时间,系统运行时间,当前登录用户数。load average表示系统的平均负载,即任务队列的平均长度,这三个值分别表示1分钟,5分钟,15分钟到现在的平均值。第二行是进程统计信息,分别表示正在运行的进原创 2017-11-02 08:04:25 · 1001 阅读 · 0 评论 -
【学习笔记】--- CMS垃圾回收器
Concurrent Mark Sweep Collector是回收停顿时间比较短,它通过初始标记(Initial Mark),并发标记(Concurrent Mark),重新标记(Remark),并发清除(Concurrent Sweep)四个步骤完成垃圾回收工作,第1,3步的初始标记和重新标记依然会引发STW,而第2,4步的并发标记和并发清除两个阶段可以和应用程序并发执行,也是比较...原创 2019-06-10 15:45:03 · 213 阅读 · 0 评论