欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

从而实现代码 CAD加密 的流程控制

点击: 次  来源:昆山软开发 时间:2019-01-04

原文出处: Snailclimb

本文从 JVM 布局入手,先容了 Java 内存打点、工具建设、常量池等基本常识,劈口试中 JVM 相关的基本题目举办了讲授。

写在前面(常晤口试题)

根基问题

  • 先容下 Java 内存区域(运行时数据区)
  • Java 工具的建设进程(五步,发起能默写出来而且要知道每一步虚拟机做了什么)
  • 工具的会见定位的两种方法(句柄和直接指针两种方法)
  • 拓展问题

  • String类和常量池
  • 8种根基范例的包装类和常量池
  • 1 概述

    对付 Java 措施员来说,在虚拟机自动内存打点机制下,不再需要像C/C++措施开拓措施员这样为内一个 new 操纵去写对应的 delete/free 操纵,不容易呈现内存泄漏和内存溢出问题。正是因为 Java 措施员把内存节制权利交给 Java 虚拟机,一旦呈现内存泄漏和溢出方面的问题,假如不相识虚拟机是奈何利用内存的,那么排查错误将会是一个很是难题的任务。

    2 运行时数据区域

    Java 虚拟机在执行 Java 措施的进程中会把它打点的内存分别成若干个差异的数据区域。

    从而实现代码 CAD加密 的流程节制

    这些构成部门一些是线程私有的,其他的则是线程共享的。

    线程私有的:

  • 措施计数器
  • 虚拟机栈
  • 当处所法栈
  • 线程共享的:

  • 要领区
  • 直接内存
  • 2.1 措施计数器

    措施计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码表明器事情时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、轮回、跳转、异常处理惩罚、线程规复等成果都需要依赖这个计数器来完。

    别的,为了线程切换后能规复到正确的执行位置,每条线程都需要有一个独立的措施计数器,昆山软件开发,各线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。

    从上面的先容中我们知道措施计数器主要有两个浸染:

    1. 字节码表明器通过改变措施计数器来依次读取指令,从而实现代码的流程节制,如:顺序执行、选择、轮回、异常处理惩罚。
    2. 在多线程的环境下,措施计数器用于记录当前线程执行的位置,从而当线程被切换返来的时候可以或许知道该线程上次运行到哪儿了。

    留意:措施计数器是唯不会呈现 OutOfMemoryError 的内存区域,它的生命周期跟着线程的建设而建设,跟着线程的竣事而灭亡。

    2.2 Java 虚拟机栈

    与措施计数器一样,Java虚拟机栈也是线程私有的,它的生命周期和线程沟通,描写的是 Java 要领执行的内存模子。

    Java 内存可以粗拙的区分为堆内存(Heap)和栈内存(Stack)个中栈就是此刻说的虚拟机栈,可能说是虚拟机栈中局部变量表部门。 (实际上,Java虚拟机栈是由一个个栈帧构成,而每个栈帧中都拥有局部变量表、操纵数栈、动态链接、要领出口信息)

    局部变量表主要存放了编译器可知的各类数据范例(boolean、byte、char、short、int、float、long、double)、工具引用(reference范例,它差异于工具自己,大概是一个指向工具起始地点的引用指针,也大概是指向一个代表工具的句柄或其他与此工具相关的位置)。

    Java 虚拟机栈会呈现两种异常:StackOverFlowError 和 OutOfMemoryError。

  • StackOverFlowError: 若Java虚拟机栈的内存巨细不答允动态扩展,那么当线程请求栈的深度高出当前Java虚拟机栈的最大深度的时候,就抛出StackOverFlowError异常。
  • OutOfMemoryError: 若 Java 虚拟机栈的内存巨细答允动态扩展,且当线程请求栈时内存用完了,无法再动态扩展了,此时抛出OutOfMemoryError异常。
  • Java 虚拟机栈也是线程私有的,每个线程都有各自的Java虚拟机栈,并且跟着线程的建设而建设,跟着线程的灭亡而灭亡。

    2.3 当处所法栈

    和虚拟机栈所发挥的浸染很是相似,区别是: 虚拟机栈为虚拟机执行 Java 要领 (也就是字节码)处事,而当处所法栈则为虚拟机利用到的 Native 要领处事。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。

    当处所法被执行的时候,在当处所法栈也会建设一个栈帧,用于存放应当处所法的局部变量表、操纵数栈、动态链接、出口信息。

    要领执行完毕后相应的栈帧也会出栈并释放内存空间,也会呈现 StackOverFlowError 和 OutOfMemoryError 两种异常。

    2.4 堆

    Java 虚拟机所打点的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时建设。此内存区域的独一目标就是存放工具实例,险些所有的工具实例以及数组都在这里分派内存。