摘要:一、对象内存布局 对象在内存中存储可分为3块区域:对象头,实例数据,对齐填充 1、对象头 对象头包含两部分内容。 第一部分:存储对象自身的运行时数据,哈希吗(hashCode),GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳。如果为数组,对象头还要包含给数组的长度。 第二部分:类型
阅读全文
摘要:转载:https://blog.csdn.net/see__you__again/article/details/51998038不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面
阅读全文
摘要:一. 获取堆快照 1、出现OOME时生成堆dump: #出现 OOME 时生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError #生成堆文件地址: -XX:HeapDumpPath=/home/liuke/jvmlogs/ 2、发现程序异常前通过执行指令,直接生成当前J
阅读全文
摘要:一、介绍 jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: 主要分为两个功能: a. 针
阅读全文
摘要:jps -- Java Virtual Machine Process Status Tool 可以列出本机所有java进程的pid jps [ options ] [ hostid ] 选项 -q 仅输出VM标识符,不包括class name,jar name,arguments in main
阅读全文
摘要:不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略, 调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为 复杂的过程,由于各个程序具备不同的特点,如:web和GUI
阅读全文
摘要:一、GC可回收的对象 二:什么是内存泄露 >Java的一个最显著的优势是内存管理。你只需要简单的创建对象而不需要负责释放空间,因为Java的垃圾回收器会负责内存的回收。然而,情况并不是这样简单,内存泄露还是经常会在Java应用程序中出现 >内存泄露的定义:对于应用程序来说,当对象已经不再被使用,但是
阅读全文
摘要:引用计数法【原理】 >引用计数器是经典的也是最古老的垃圾收集防范。 >实现原理:对于对象A,只要有任何一个对象引用A,则计数器加1.当引用失效时,计数器减1.只要对象A的计数器值为0时,则A的为垃圾。 >引用计数器法存在两个缺陷: (1)无法处理循环引用的情况。A中引用B,B中引用A。无第三方对象引
阅读全文
摘要:java方法区【名词解析】 >和java堆一样,方法区是一块所有线程共享的内存区域。 >保存系统的类信息,比如,类的字段,方法,常量池等。 >方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出的错误 >jdk1.6和jdk1.7方法区可以理解为永
阅读全文
摘要:java棧和函数调用的关系图 【名词解释】 >java棧是一块线程的私有空间 >java的棧是先进后出的数据结构。函数返回,则该函数的棧帧被弹出。 >一个函数对应一个棧帧,一个棧帧里包含局部变量表,操作数棧,棧数据区【行为解释】 >每次函数调用都会生成相应的棧帧,从而占用一定的棧空间,因为棧空间不足
阅读全文
摘要:java堆内存结构图 【名词解释】 >eden,so,s1通称为新生代对象储区 >tenured称为老年代对象存储区 >s0和s1也称为from和to区域,是两块大小相等,可以互换角色的内存空间。 >新生代的大小一般设置为真个堆内存空间的1/3或1/4左右【行为解释】 >绝大数情况下,对象首先分配在
阅读全文
摘要:java虚拟机解构图一java虚拟机解构图二java虚拟机结构图三【1】类加载系统 --->负责从文件系统或网络中加载class信息,存放至方法区的内存空间【2】java堆 --->虚拟机启动时建立。java主要内存工作区域。 --->存放:java对象实例。 --->所有线程共享【3】方法区 --...
阅读全文