温馨提示

1、列表网提醒您:在交易前请仔细核实商家真实资质!如发现非法商家,欢迎广大网民举报,举报电话:4000-999-800。

2、该信息由列表网网友发布,其真实性及合法性由发布人负责,列表网仅引用以供用户参考,详情请阅读列表网免责条款。

3、在签订合同或相关协议之前,任何要求预付定金、汇款等方式均存在风险,谨防上当受骗!

详情描述

在互联网市场上,java程序员的岗位可谓是门庭若市,人才济济,如何挤到一个合适自己的岗位,拉勾IT课java小编针对这一点,进行了jvm的介绍。

1.Java的内存划分?

程序计数器(PC,ProgramCounterRegister)。在JVM规范中,每个线程都有它自己的程序计数器,并且任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址;或者,如果是在执行本地方法,则是未指定值(undefined)。( 不会抛出

第二,Java虚拟机栈(JavaVirtualMachineStack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(StackFrame),对应着一次次的Java方法调用。

前面谈程序计数器时,提到了当前方法;同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,成为新的当前帧,一直到它返回结果或者执行结束。JVM直接对Java栈的操作只有两个,就是对栈帧的压栈和出栈。

栈帧中存储着局部变量表、操作数(operand)栈、动态链接、方法正常退出或者异常退出的定义等。

第三,堆(Heap),它是Java内存管理的核心区域,用来放置Java对象实例,几乎所有创建的Java对象实例都是被直接分配在堆上。堆被所有的线程共享,在虚拟机启动时,我们指定的“Xmx”之类参数就是用来指定较大堆空间等指标。

(编译器通过逃逸分析,确定对象是在栈上分配还是在堆上分配)

理所当然,堆也是垃圾收集器重点照顾的区域,所以堆内空间还会被不同的垃圾收集器进行进一步的细分,较有名的就是新生代、老年代的划分。

第四,方法区这也是所有线程共享的一块内存区域,用于存储所谓的元(Meta)数据,例如类结构信息,以及对应的运行时常量池、字段、方法代码等。

由于早期的实现,很多人习惯于将方法区称为永久代(PermanentGeneration)。OracleJDK8中将永久代移除,同时增加了元数据区(Metaspace)。

第五,运行时常量池(Run-TimeConstantPool),这是方法区的一部分。如果仔细分析过反编译的类文件结构,你能看到版本号、字段、方法、超类、接口等各种信息,还有一项信息就是常量池。Java的常量池可以存放各种常量信息,不管是编译期生成的各种字面量,还是需要在运行时决定的符号引用,所以它比一般语言的符号表存储的信息更加宽泛。

第六,本地方法栈(NativeMethodStack)。它和Java虚拟机栈是非常相似的,支持对本地方法的调用,也是每个线程都会创建一个。在中,本地方法栈和Java虚拟机栈是在同一块儿区域,这完全取决于技术实现的决定,并未在规范中强制。

2.什么是Java虚拟机?为什么Java被称作是无关平台的编程语言?

Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。

图片展示

  • 拉勾教育Java面试宝典JVM篇具体介绍JVM的实例应用
  • 拉勾教育Java面试宝典JVM篇具体介绍JVM的实例应用
拉勾教育Java面试宝典JVM篇具体介绍JVM的实例应用
拉勾教育Java面试宝典JVM篇具体介绍JVM的实例应用
1/2
  • 拉勾教育Java面试宝典JVM篇具体介绍JVM的实例应用
  • 拉勾教育Java面试宝典JVM篇具体介绍JVM的实例应用