6 个回答
JVM 的内存分为【虚拟机栈】、【本地方法栈】、【程序计数器】、【方法区】、【堆】。
【虚拟机栈】、【本地方法栈】和【程序计数器】为线程私有区域。
【方法区】和【堆】为线程共享区域。
【虚拟机栈】、【本地方法栈】和【程序计数器】为线程私有区域。
【方法区】和【堆】为线程共享区域。
发布于:1个月前 (02-08) IP属地:四川省
堆:
线程共享。堆的作用就是存放创建的对象实例,也就是 new 出来的对象。堆一般分为新生代和老年代,新生代分为 Eden 区、From Survivor 和 To Survivor ,但是无论是哪个区,其中存储的都是对象实例。
每次 Minor GC 后,Eden 区和 From Surivor 区存活的对象都会被移动到 To Surivor 区,然后清除 Eden 和 From Survivor 区,To Survivor 区转为 From Survivor 区。
线程共享。堆的作用就是存放创建的对象实例,也就是 new 出来的对象。堆一般分为新生代和老年代,新生代分为 Eden 区、From Survivor 和 To Survivor ,但是无论是哪个区,其中存储的都是对象实例。
每次 Minor GC 后,Eden 区和 From Surivor 区存活的对象都会被移动到 To Surivor 区,然后清除 Eden 和 From Survivor 区,To Survivor 区转为 From Survivor 区。
发布于:1个月前 (02-08) IP属地:四川省
方法区:
线程共享。方法区用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码。方法区对于不同的 JVM 虚拟机有不同的实现,例如 JDK1.8 之前使用永久代实现方法区,JDK1.8及之后使用元空间实现,元空间是使用的直接内存,所以不会在 JVM 上产生内存溢出,但是如果直接内存不足,也会内存溢出,但是产生的几率相对于 JVM 小得多。
线程共享。方法区用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码。方法区对于不同的 JVM 虚拟机有不同的实现,例如 JDK1.8 之前使用永久代实现方法区,JDK1.8及之后使用元空间实现,元空间是使用的直接内存,所以不会在 JVM 上产生内存溢出,但是如果直接内存不足,也会内存溢出,但是产生的几率相对于 JVM 小得多。
发布于:1个月前 (02-08) IP属地:四川省
程序计数器:
线程私有。程序计数器可以理解为程序运行位置的一个标记,当多线程时,线程切换后,可以通过程序计数器找到线程切换前代码的运行位置。
线程私有。程序计数器可以理解为程序运行位置的一个标记,当多线程时,线程切换后,可以通过程序计数器找到线程切换前代码的运行位置。
发布于:1个月前 (02-08) IP属地:四川省
本地方法栈:
线程私有。本地方法栈和虚拟机栈的区别是虚拟机栈用于处理 Java 方法而本地方法栈用于处理 JVM 的本地方法,其他的基本一致。另外,在 Sun HotSpot 虚拟机中将虚拟机栈和本地方法栈合二为一使用。
线程私有。本地方法栈和虚拟机栈的区别是虚拟机栈用于处理 Java 方法而本地方法栈用于处理 JVM 的本地方法,其他的基本一致。另外,在 Sun HotSpot 虚拟机中将虚拟机栈和本地方法栈合二为一使用。
发布于:1个月前 (02-08) IP属地:四川省
虚拟机栈:
线程私有。虚拟机栈中主要存储 Java 方法执行相关的信息。Java 方法在执行时会在虚拟机栈中创建一个栈帧,栈帧中存储着局部变量表、操作数栈、动态链接、方法出口等,每一个 Java 方法的执行都对应着虚拟机栈中的一个栈帧的入栈到出栈的过程。
局部变量表中存储着各种基本数据类型、引用类型和 returnAddress 类型的数据,即存储 boolean、byte、short、char、int、float、long、double、reference、returnAddress 类型的数据,其中 reference 即对象引用。
当线程请求的栈深度大于虚拟机允许的最大深度,则会抛出 StackOverflowError 异常;当无法获取到足够的内存时,抛出 OutOfMemoryError 异常。
线程私有。虚拟机栈中主要存储 Java 方法执行相关的信息。Java 方法在执行时会在虚拟机栈中创建一个栈帧,栈帧中存储着局部变量表、操作数栈、动态链接、方法出口等,每一个 Java 方法的执行都对应着虚拟机栈中的一个栈帧的入栈到出栈的过程。
局部变量表中存储着各种基本数据类型、引用类型和 returnAddress 类型的数据,即存储 boolean、byte、short、char、int、float、long、double、reference、returnAddress 类型的数据,其中 reference 即对象引用。
当线程请求的栈深度大于虚拟机允许的最大深度,则会抛出 StackOverflowError 异常;当无法获取到足够的内存时,抛出 OutOfMemoryError 异常。
发布于:1个月前 (02-08) IP属地:四川省
我来回答
您需要 登录 后回答此问题!