首页 > 试题广场 >

下面有关JVM内存,说法错误的是?

[单选题]
下面有关JVM内存,说法错误的是?
  • 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
  • Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
  • 方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的
  • 原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
B选项求解释
发表于 2016-03-12 11:08:02 回复(2)

运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器

虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。

堆区 JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。

方法区 :所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。

程序计数器 线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。

发表于 2015-11-07 21:47:17 回复(18)
感觉d也是错的,对象可以分配到栈上,逃逸分析嘛
发表于 2017-11-12 23:25:54 回复(1)
String s = "ren";
这个字符串对象不是存放在常量池吗?
那所有的对象都存放在堆上还对吗??
发表于 2017-03-31 12:54:09 回复(2)
选择题总有技巧可言:
C中静态变量肯定是共享的啊,怎么可能是线程隔离的呢?肯定选C
发表于 2016-03-21 15:51:56 回复(9)

运行时数据区包括:程序计数器、虚拟机栈、本地方法栈、Java堆、方法区以及方法区中的运行时常量池

1、程序计数器: 线程私有,是当前线程所执行的字节码的行号指示器,如果线程正执行一个java方法,计数器记录正在执行的虚拟机字节码指令的地址,如果线程正在执行的是Native方法,则计数器值为空;

2、虚拟机栈: 即栈区, 线程私有 ,为虚拟机执行 Java 方法(字节码)服务,每个方法在执行的时会创建一个栈帧用于存放局部变量表、操作数栈、动态链接和方法出口等信息,每个方法的调用直至执行完成对应于栈帧的入栈和出栈;

3、本地方法栈: 为虚拟机使用的 N ative 方法服务,也是 线程私有

4、Java 堆: 在虚拟机启动时创建, 线程共享 ,唯一目的是存放对象实例,是垃圾收集器管理的主要区域——” GC 堆“,可以细分为新生代和老年代,新生代又可以细分为 Eden 空间、 From Survivor 空间和 To Survivor 空间;物理上可以不连续,但逻辑上连续,可以选择固定大小或者扩展;

5、方法区: 线程共享 ,用于存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。被称为“永久代”,是因为 H otSpot 虚拟机的设计团队把 GC 分代收集扩展到方法区,即使用永久代来实现方法区,像 GC 管理 Java 堆一样管理方法区,从而省去专门为方法区编写内存管理代码,内存回收目标是针对常量池的回收和堆类型的卸载;

6、运行时常量池: 线程共享 ,是方法区的一部分, C lass 文件中存放编译期生成的各种字面量和符号引用,类加载后进入方法区的运行时常量池中。
答案就是C错,方法区应该是线程共享的。

编辑于 2017-03-19 10:49:31 回复(1)
Java运行时数据区划分
发表于 2018-02-26 10:41:06 回复(2)
发表于 2018-07-01 13:26:28 回复(0)
运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器 虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。 堆区 , JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。 方法区 :所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。 程序计数器 :线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。
发表于 2019-04-17 22:00:09 回复(0)

运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器

虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。

堆区 , JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。

方法区 :所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。

程序计数器 线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。

发表于 2016-06-24 10:57:39 回复(0)
一个进程里的多个线程共享进程里的所有资源,所以C肯定是错的
发表于 2019-04-10 19:01:53 回复(0)

方法区是线程共享的

发表于 2019-04-07 20:09:38 回复(0)
方法区 :所有线程共享,
虚拟线程区:线程私有
程序计数器 线程私有
发表于 2019-01-16 22:46:35 回复(0)
Java方法执行内存模型   是栈?
发表于 2018-11-28 15:41:02 回复(0)

JVM内存模型 眼

发表于 2018-11-28 13:38:37 回复(0)
运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器 虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。 堆区 , JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理的主要区域。 方法区 :所有线程共享,存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。这个区域的内存回收目标主要是针对常量池的对象的回收和对类型的卸载。 本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError和OutOfMemoryError异常。 程序计数器 :线程私有,每个线程都有自己独立的程序计数器,用来指示下一条指令的地址。
编辑于 2018-11-04 08:37:01 回复(0)
方法区又称为静态区。跟堆一样被所有线程共享。包含所有的class和static变量 运行时常量池都分配在Java虚拟机的方法区之中。
发表于 2018-05-03 18:11:02 回复(0)
发表于 2018-03-28 22:18:17 回复(0)
线程隔离和线程私有是一会事
发表于 2017-07-19 17:22:11 回复(0)
选择题总有技巧可言: C中静态变量肯定是共享的啊,怎么可能是线程隔离的呢?肯定选C
发表于 2017-04-12 17:17:20 回复(0)