--------------------------------------------------2018-05-04-18:07--------------------------------------------------
记录一下此时学习JVM内存区域的一些想法
JVM内存区域划分五大块
--程序计数器
--虚拟机栈
--本地方法栈
--堆
--方法区
上面的概念和作用有不懂的,可以自行百度,讲的都很详细。
我留个网址便于以后看的时候勾起自己的记忆。
http://www.cnblogs.com/xrq730/p/4827590.html
https://www.cnblogs.com/dolphin0520/p/3613043.html
其中方法区中包含运行时常量池。
有一块内存区域不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。这块区域是“直接内存”,可以通过DirectByteBuffer这个类直接进行操作,在Java的nio系列中,使用了直接内存,避免在Java堆和Native堆中来回复制数据。
对象访问
比如main方法中有一行代码:
Object obj = new Object();
当程序运行到main方法时会在虚拟机栈中创建一个栈帧,栈帧中的局部变量表中会创建一个Object类型的引用obj;
之后创建new Object()的实例对象在堆里。这个实例对象包括实例化的数据和对象类型信息(对象类型信息包括对象的类型,父类,实现的接口,方法等,对象类型信息存储在方法区中)。
如果此时看自己写的和链接的文章有疑惑,说明你开始遗忘这块知识了。
对象访问的方式有句柄访问和直接指针访问,HotSpot虚拟机使用的是后种方式。
参考:https://blog.csdn.net/fire_tray/article/details/51275788
此时看的是周志明的《深入理解Java虚拟机》
--------------------------------------------------2018-05-05-14:13--------------------------------------------------
再留一些记忆片段给自己,我真的只记得大概。尴尬的记性。
----------垃圾收集器判断对象已死-------------
1. 引用计数算法
2. 根搜索算法
别忘了Java中的“强软弱虚”四种引用作用。
----------垃圾收集器回收垃圾对象的方式-------------
1. 标记-清除算法
2. 复制算法
3. 标记-整理算法
----------垃圾收集器种类-------------
这里有一篇别人总结很完善的文章。
https://blog.csdn.net/tjiyu/article/details/53983650
https://crowhawk.github.io/2017/08/15/jvm_3/
------------------内存分配策略------------------
1. 对象优先在Eden区分配
2. 大对象直接进入老年代
3. 长期存活的对象将进入老年代
4. 动态对象年龄判断
虚拟机并不总是要求对象年龄必须达到MaxTenuringThresold才能晋升到老年代,如果Survivor空间中,某一年龄的所有对象的空间占用大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无需等到MaxTenuringThresold要求的年龄。
5. 空间分配担保
在发生Minor GC时,JVM会检测之前每次晋升到老年代的平均空间大小是否大于老年代剩余空间大小,如果大于,则Minor GC改为Full GC。如果小于,则查看HandlePromotionFailure设置是否允许担保失败;如果允许,就只进行MinorGC,不允许就改为Full GC。
------------------JVM性能监控与故障处理工具-----------------
名称 主要作用
jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。
jstat JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据。
jinfo Configuration Info for Java,显示虚拟机配置信息
jmap Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件)
jhat JVM HeapDump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果。
jstack Stack Trace for Java,显示虚拟机线程快照。
JConsole Java Monitoring and Management Console,Java监视与管理控制台,基于JMX的可视化监视和管理工具。
VisualVM All-In-One Java Trobleshooting Tool 多合一故障处理工具。”-_-“多合一”-_-”。
---------遇到的虚拟机参数,我也不知道有没有用,暂且记在这,以后看不懂写的了就看别人的博客,hia,hia----------
参数 -XX:PretenureSizeThreshold 令大于这个设置值的对象直接在老年代分配,适用Serial和ParNew两款收集器。
参数 -XX:MaxTenuringThreshold 对象晋升到老年代的年龄阈值。
参数 -XX:-HandlePromotionFailure 不允许担保失败
参数 -XX:+HeapDumpOnOutOfMemoryError 让虚拟机在OOM异常出现之后自动生成dump文件。
----------------------------------------------------------------------------------------------------------