JDK、JRE和JVM
JDK包含JRE、JRE包含JVM
java8
- JDK(Java Development Kit):Java开发工具集;
- JRE( Java Runtime Environment ):Java运行时环境;
- JVM( Java Virture Machine):Java虚拟机
内存溢出解决方法
解决内存溢出
- 模拟内存溢出
package demo1;
import java.util.ArrayList;
import java.util.List;
public class JvmTest {
public static void main(String[] args) {
List<Demo> list=new ArrayList<>();
while(true) {
list.add(new Demo());
}
}
}
堆内存溢出
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- 定位错误代码
生成堆内存快照,并指定堆内存大小为20M,配置参数;
-Xms20m -Xmx20m ##设置堆大小20m,并将最小和最大值设置相等,避免扩展
-XX:+HeapDumpOnOutOfMemoryError ##dump出当前的内存堆转储快照
右键=>Run As =>Run configurations
生成的快照文件
对快照文件进行分析,下载分析工具Eclipse 中的 Memory Analysis
help=>Eclipse MarketPlace搜索memory analysis进行安装
安装之后打开快照文件
查看运行数据,Shallow Heap对象本身所占用的内存大小,不包含引用,Retained Heap当前对象大小加上直接或间接引用大小之和。
查看被创建的类为Demo,找出问题;
可视化监控工具
在JDK中的bin目录中由一个命令jconsole.exe
,再命令窗口中执行该命令会打开一个监控工具,可以查看当前堆内存使用情况、线程等其他信息。
内存池
- Eden
- Survivor(两块)
Eden中存储新创建的对象,如果被标记为垃圾回收对象则会被回收,如果存活下来则放入Survivor中。如果多次存活则放入持久带中。