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. 方法区溢出

更新中。。。

posted @ 2018-10-23 11:31  我是个神经病  阅读(303)  评论(0编辑  收藏  举报