1、内存模型
public class Student {
public native void start(); //注意这是一个普通类
}
本地方法栈只是登记了native修饰的方法,执行引擎执行时,本质是调用JNI,加载本地方法库中的方法
.java-----编译------>.class(字节码)-----解释器---->机器码------>cpu
(1)字节码文件是多个指令的集合,每个指令都有个地址。
0: aload_0
1: aload_1
2: putfield #12 // Field loc:Ljava/lang/String;
5: return
(2)PC:
记住下一条指令的地址
线程私有
不会存在内存溢出
4、方法区
存放final、static、Class、运行时常量池
5、栈
(1)线程运行时的内存空间
(2)多个栈帧组成;栈帧:每个方法运行时需要的内存
(3)线程结束,栈内存释放;不存在垃圾回收
(4)存放局部变量、实例方法(非static)---------实际在栈帧中
(5)StackOverflowError:栈帧太多导致栈溢出
6、堆
(1)new出的对象,都在heap里
(2)线程共享,需要考虑线程安全
(3)垃圾回收
注意:堆溢出不明显,排查堆内存溢出,将堆内存设置小点
总结:
线程私有:PC、栈
栈溢出:栈
线程共享:堆
垃圾回收:堆
内存溢出:堆
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。