网络异常
请检查网络设置后重试
重新加载
jvm详解
2
成员
登录后加入频道即可发帖
0/1000
不选择版块
发表
全部
烧肉点心蒸马桶
频道主
2024-10-30
当一个class文件被ClassLoader load进入JVM后,方法指令保存在Stack中,此时Heap 区没有数据。然后程序技术器开始执行指令,如果是静态方法,直接依次执行指令代码,当然此时指令代码是不能访问Heap 数据区的;如果是非静态方法,由于隐含参数没有值,会报错。因此在非静态方法执行前,要先new对象,在Heap 中分配数据,并把Stack中的地址指针交给非静态方法,这样程序技术器依次执行指令,而指令代码此时能够访问到Heap 数据区了。
点赞
评论
分享
烧肉点心蒸马桶
频道主
2024-10-30
非静态的对象属性作为对象实例的一部分保存在Heap 中,而对象实例必须通过Stack中保存的地址指针才能访问到。因此能否访问到对象实例以及它的非静态属性值完全取决于能否获得对象实例在Stack中的地址指针。
#jvm详解
点赞
评论
分享
烧肉点心蒸马桶
频道主
2024-10-30
Stack的内存管理是顺序分配的,而且定长,不存在内存回收问题;而Heap 则是随机分配内存,不定长度,存在内存分配和回收的问题;因此在JVM中另有一个GC进程,定期扫描Heap ,它根据Stack中保存的4字节对象地址扫描Heap ,定位Heap 中这些对象,进行一些优化(例如合并空闲内存块什么的),并且假设Heap 中没有扫描到的区域都是空闲的,统统refresh(实际上是把Stack中丢失了对象地址的无用对象清除了),这就是垃圾收集的过程;
点赞
评论
分享
烧肉点心蒸马桶
频道主
2024-10-30
Stack(栈)是JVM的内存指令区。Stack管理很简单,push一定长度字节的数据或者指令,Stack指针压栈相应的字节位移;pop一定字节长度数据或者指令,Stack指针弹栈。Stack的速度很快,管理很简单,并且每次操作的数据或者指令字节长度是已知的。所以Java 基本数据类型,Java 指令代码,常量都保存在Stack中。
#jvm详解
点赞
评论
分享
烧肉点心蒸马桶
频道主
2024-10-30
Java文件编译的过程
因此就需要编译:
程序员编写的.java文件
由javac编译成字节码文件.class:(为什么编译成class文件,因为JVM只认识.class文件)
在由JVM编译成电脑认识的文件 (对于电脑系统来说 文件代表一切)
(这是一个大概的观念 抽象画的概念)
#jvm详解
点赞
评论
分享
公告
暂无公告
直播
暂无直播