Bootstrap

操作系统--操作系统

java内存管理

Java GC(Garbag Collection,垃圾回收,垃圾收集)机制,是java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。

JVM内存管理空间

根据JVM规范,JVM把内存划分了如下几个区域:

  1. 方法区
  2. 堆区
  3. 本地方法栈
  4. 虚拟机栈
  5. 程序计数器

JVM内存分配

Java对象所占用的内存主要在堆上实现,因为堆是线程共享的,因此在堆上分配内存时需要进行加锁,这就导致了创建对象的开销比较大。当堆上空间不足时,会出发GC,如果GC后空间仍然不足,则会抛出OutOfMemory异常。

内存的回收方式

JVM通过GC来回收堆和方法区中的内存,这个过程是自动执行的。说到Java GC机制,其主要完成3件事:确定哪些内存需要回收;确定什么时候需要执行GC;如何执行GC。JVM主要采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集器。

虚拟机中的GC过程

在一开始的时候,JVM的GC就是采用标记-清除-压缩方式进行的,这么做并不是很高效,因为当对象分配的越来越多时,对象列表也越来也大,扫描和移动越来越耗时,造成了内存回收越来越慢。

垃圾收集器

串行收集器JavaSE5和6中客户端虚拟机所采用的默认配置,它是最简单的收集器,比较适合于只有一个处理器的系统。在串行收集器中,minor和major GC过程都是用一个线程进行垃圾回收。
参考:
https://blog.csdn.net/suifeng3051/article/details/48292193#commentBox

----2020/3/9
----现代操作系统中,代码可以在系统态或用户态运行,则下列选项在用户态执行的是()
正确答案: A
命令解释程序
进程创建原语
进程调度程序
时钟中断处理程序
解析:系统态,即管态或核心态,是操作系统管理的程序执行时,机器所处的状态。
用户态,即目态,是用户程序执行时机器所处的状态。
为什么要划分用户态和系统态?
一个最主要原因是要把用户程序和系统程序区分开,以利于程序的共享和保护。显然,这也是以增加系统复杂度和系统开销为代价的。

----操作系统中的SPOOLing技术,实质是将( )转化为共享设各的技术。
正确答案: B
虚拟设备
独占设备
脱机设备
块设备
解析:独占设备

----在下列选项中,属于解除死锁的方法是()。
正确答案: A
剥夺资源法
资源分配图简化法
银行家算法
资源静态分配法
解析:产生死锁的4个必要条件:
1.互斥条件
2.请求和保持条件
3.不可抢占
4.循环等待条件
预防死锁主要分为三种:
1.破坏请求和保持条件
2.破坏不可抢占条件
3.破坏循环等待条件
避免死锁的基本思想就是确保系统始终处于安全状态。最具有代表性的避免死锁的算法是Dijkstra的银行家算法。
死锁的解除方法(2种):
1.抢占资源
2.终止(或撤销)进程。

----多道程序环境下,每个进程何时获得处理机,何时提出资源请求而暂停等等都是不可预知的,这就是操作系统的()
正确答案: D
并发性
共享性
虚拟性
异步性
解析:操作系统有四个特征:并发,共享,异步,虚拟
并发:是指两个或多个事件在同一时间间隔内发生。操作系统的并发性是指计算机系统中同时存在多个运行着的程序,因此它应该具有处理和调度多个程序同时执行的能力。
共享:是指系统中的资源(硬件资源和信息资源)可以被多个并发执行的程序共同使用,而不是被其中一个独占。资源共享有两种方式:互斥访问和同时访问。
异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底。而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。异步性使得操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。但是只要运行环境相同,操作系统必须保证多次运行程序,都获得相同的结果。
虚拟:虚拟性是一种管理技术,把物理上的一个实体变成逻辑上的多个对应物,或把物理上的多个实体变成逻辑上的一个对应物的技术。采用虚拟技术的目的是为用户提供易于使用、方便高效的操作环境。

----程序并发运行时失去了封闭性,其运行结果具有不可再现的特征。
进程的并发运行也失去封闭性,但是具有可再现性的特征(通过进程同步)。

----进程的基本特性是()。
正确答案: A
进程是动态的、多个进程可以含有相同的程序和多个进程可以并行运行
解析:进程的四个特性: 动态,并发,独立,异步。

----下列指令中,不能影响进位的是( )。

正确答案: C
ADD AX,10
SAL AL,1
INC CX
SUB AX,BX
解析:进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
A选项:ADD 加法指令
B选项:SAL 算术左移
C选项:INC 是将寄存器中的数自加1
D选项:SUB 减法指令

----进程占有的资源:
地址空间
全局变量
打开的文件
子进程
信号量
账户信息
线程占用的资源:

寄存器
状态
程序计数器

;