学习JVM

学习JVM,第1张

学习JVM JVM

java virtual Machine

好处:一次编写,到处运行。

        自动内存管理,垃圾回收功能。

        数组下表越界检查。

        多态。

理解底层的底层原理:

整体框架:

程序计数器

作用

        用于保存             JVM中       下一条所要执行的指令的地址

特点(每个线程都有自己的程序计数器。)

线程私有

CPU会为每个线程分配时间片,当当前线程的时间片使用完以后,CPU就会去执行另一个线程中的代码。程序计数器是每个线程所私有的,当另一个线程的时间片用完,又返回来执行当前线程的代码时,通过程序计数器可以知道应该执行哪一句指令。不会存在内存溢出

虚拟机栈:线程运行时需要的内存空间。

             每个虚拟机栈内是由多个栈帧构成的。

定义

每个线程运行需要的内存空间,称为虚拟机栈

每个栈由多个栈帧组成,对应着每次调用方法时所占用的内存

每个线程只能有一个活动栈帧,对应着当前正在执行的方法

演示

栈帧:每个方法运行时占用的内存。

垃圾回收是否涉及栈内存?

不需要。因为虚拟机栈中是由一个个栈帧组成的,在方法执行完毕后,对应的栈帧就会被d出栈。所以无需通过垃圾回收机制去回收内存。栈内存的分配越大越好吗?

不是。因为物理内存是一定的,栈内存越大,可以支持更多的递归调用,但是可执行的线程数就会越少。方法内的局部变量是否是线程安全的?

如果方法内局部变量没有逃离方法的作用范围,则是线程安全的如果如果局部变量引用了对象,并逃离了方法的作用范围,则需要考虑线程安全问题

Java.lang.stackOverflowError 栈内存溢出

发生原因

虚拟机栈中,栈帧过多(无限递归)每个栈帧所占用过大

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5708130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存