1. 本地方法栈定义
一些带有native关键字的方法就是需要JAVA去调用本地的C或C++方法,因为Java有时候没法直接和操作系统底层交互,所以需要用到本地方法栈,服务于带native关键字的方法
2. 堆的定义
Heap 堆:通过关键字创建的对象都会被放在堆内存
3. 堆的特点
(1)它是线程共享的,堆内存中的对象需要考虑线程安全问题
(2)有垃圾回收机制
(3)堆内存溢出:java.lang.OutofMemoryError-java heap space.堆内存溢出
(4)堆内存溢出演示案例
public class heap_1 {
public static void main(String[] args) {
int i = 0;
try {
ArrayList<String> list = new ArrayList<>();
String a = "hello";
while(true){
list.add(a);
a = a + a;
i++;
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(i);
}
}
}
Xmx:该JVM参数表示java堆可以扩展到的最大值
(5)堆内存诊断
— jps 工具:查看当前系统中有哪些java进程
— jmap工具:查看堆内存占用情况jmap - heap 进程id
— jconsole工具:图形界面的,多功能的检测工具,可以连续监测
(6)堆内存诊断案例
public class heap_2 {
public static void main(String[] args) throws InterruptedException {
System.out.println("1...");
Thread.sleep(3000); // 执行之后打开jconsole诊断平台
byte[] array = new byte[1024*1024*10]; // 10Mb的字节对象
System.out.println("2...");
Thread.sleep(2000);
array = null;
System.gc(); // 垃圾回收
System.out.println("3...");
Thread.sleep(1000000L);
}
}