Java - 关键词术语
我最近在重温java知识,靠脑子记是不可能的,写在笔记本上也是不可能的,故有了这篇博客。这篇博客会一直更新,直到我重温结束。文章结尾也会提示是持续更新还是结束了。
1. java技术体系:
java程序设计语言、java虚拟机、class文件格式、java API类库、来自商业机构和开源社区的第三方java类库。
2. JDK(Java Development Kit)
java程序设计语言、java虚拟机、java API类库。
3. JRE(Java Runtime Environment)
Java API类库中的Java SE API字集和java虚拟机。
4. JVM java虚拟机
运行时内存分配:方法区、虚拟机栈、本地方法栈、堆、程序计数器
-Xms表示堆最小值, -Xmx表示堆最大值
避免堆自动扩展:-Xms和-Xmx一样值
配置参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常时Dump出当前内存堆转储快照以便事后分析。
5. 虚拟机栈、本地方法栈溢出(-Xss)
(1)如果线程请求的栈深度大于虚拟机所允许的深度(内存无法分配),单个线程下,虚拟机栈容量小或者栈帧比较大(大量定义本地变量)。抛出StackOverflowError
(2)当虚拟机栈动态扩展时无法申请到足够的内存。抛出OutOfMemoryError。
如果是建立过多线程导致的内存溢出,在不能减少线程数或者更换64位虚拟机的情况下,就只能通过减少最大堆和减少栈容量来换取更多的线程。
6. Java堆出现java.lang.OutOfMemoryError: Java heap space
分析方法:分析dump出的堆转储快照,确认内存中的对象是否是必要的,也就是分析是出现了内存泄漏还是内存溢出。如果是内存泄漏,可进一步通过工具查看泄漏对象到GC的引用链。查看泄漏对象通过怎样的路径与GC Roots相关联并导致垃圾回收器无法自动回收。如果不存在泄漏,也就是说这些对象必须存活的,那就先查虚拟机的堆参数(-Xms, -Xmx)机器物理内存对比看是否可以调大。
7. 方法区溢出
更新中。。。