java的内存管理_操作系统实验——java内存管理
1.Test.java
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Test.begin();
}
public static void begin(){
Free f=new Free();
Use u=new Use();
System.out.println("》》》--------------請選擇操作----------《《《");
System.out.println("》》》--------------1.申請內存----------《《《");
System.out.println("》》》--------------2.釋放內存----------《《《");
System.out.println("》》》--------------3.退出程序----------《《《");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
while(a!=3){
switch(a){
case 1:u.use();break;
case 2:f.free();break;
}
System.out.println("》》》--------------請選擇操作----------《《《");
System.out.println("》》》--------------1.申請內存----------《《《");
System.out.println("》》》--------------2.釋放內存----------《《《");
System.out.println("》》》--------------3.退出程序----------《《《");
sc=new Scanner(System.in);
a=sc.nextInt();
}
System.out.println("系統退出成功!");
}
}
2.Use.java
import java.util.Scanner;
public class Use {
public static Node first=null;
public static Node tail=null;
public static int count=0;
public static int name=1;
public void use(){
System.out.println("請輸入需要的內存空間:");
Scanner sc=new Scanner(System.in);
int a=Integer.parseInt(sc.nextLine());
if(a<=Free.all){
Node node=new Node();
if(count==0){
node.firstaddress=0;
node.length=a;
node.name=name;
first=node;
tail=node;
}
else{
node.firstaddress=tail.firstaddress+tail.length;
node.length=a;
node.name=name;
tail.next=node;
tail=node;
}
count++;
name++;
Free.all=Free.all-a;
}
else{
System.out.println("內存空間不夠!");
}
Free.print();
}
}
3.Free.java
import java.util.Scanner;
public class Free {
public static Node first=null;
public static Node tail=null;
public static int count=0;
public static Node befortail=null;
public static int all=1000;
public void free(){
System.out.println("請輸入要釋放的內存塊名:");
Scanner sc=new Scanner(System.in);
int a=Integer.parseInt(sc.nextLine());
Node node=new Node();
node=Use.first;
if(a==Use.first.name){
if(count==0){
first=node;
tail=node;
}
else{
tail.next=node;
tail=node;
}
Use.first=node.next;
}
else {
for(int i=0;i
if(node.name==a){
break;
}
befortail=node;
node=node.next;
}
if(count==0){
first=node;
tail=node;
}
else{
tail.next=node;
tail=node;
}
if(Use.tail!=Free.befortail.next){
Free.befortail.next=node.next;
}
else{
Use.tail=Free.befortail;
Use.tail.next=null;
}
}
count++;
Use.count--;
Free.merge();
Free.print();
}
public static void merge(){
Node[] node=new Node[100];
Node[] node2=new Node[100];
int a=0;
Node node1=new Node();
node1=first;
for(int i=0;i
if(node1!=null){
node[node1.name]=node1;
node1=node1.next;
}
}
for(int i=0;i<100;i++){
if(node[i]!=null){
node2[a]=node[i];
node2[a].next=null;
a++;
}
}
if(count>1){
for(int i=0;i
if(node2[i].firstaddress+node2[i].length==node2[i+1].firstaddress){
node2[i+1].firstaddress=node2[i].firstaddress;
node2[i+1].length=node2[i].length+node2[i+1].length;
node2[i]=null;
Free.count--;
}
}
}
if(node2[a-1].firstaddress+node2[a-1].length==1000-Free.all){
Free.all+=node2[a-1].length;
node2[a-1]=null;
Free.count--;
}
if(Free.count!=0){
if(node2[0]!=null){
first=node2[0];
}
else{
first=node2[1];
}
for(int i=0;i
if(node2[i]!=null){
befortail=node2[i];
befortail.next=node2[i+1];
}
}
}
}
public static void print(){
System.out.println("占用內存塊表:");
System.out.println("內存塊名 內存塊首地址 內存塊長");
Node node=new Node();
node=Use.first;
for(int i=0;i
if(node!=null){
System.out.println(" "+node.name+" "+node.firstaddress+" "+node.length);
node=node.next;
}
}
System.out.println("空閑內存塊表:");
System.out.println("內存塊名 內存塊首地址 內存塊長");
Node freenode=new Node();
freenode=Free.first;
for(int i=0;i
if(freenode!=null){
System.out.println(" "+freenode.name+" "+freenode.firstaddress+" "+freenode.length);
freenode=freenode.next;
}
}
}
}
4.Node.java
public class Node {
public int firstaddress;
public int length;
public int name;
public Node next;
}
實驗5 ?內存管理(2學時)
一、實驗目的
通過實驗加強對內存管理方法的理解和掌握。
二、實驗內容
編寫程序實現采用可變分區方法管理內存。
三、實驗要求
1、在該實驗中,采用可變分區方式完成對存儲空間的管理(即存儲空間的分配與回收工作)。
2、設計用來記錄主存使用情況的數據結構:已分區表和空閑分區表或鏈表。
3、在設計好的數據結構上設計一個主存分配算法(循環首次適應算法)。
4、在設計好的數據結構上設計一個主存回收算法。其中,若回收的分區有上鄰空閑分區和(或)下鄰空閑分區,要求合并為一個空閑分區登記在空閑分區表的一個表項里。
5、(附加)若需要可以實現程序的浮動,對內存空間進行緊湊
總結
以上是生活随笔為你收集整理的java的内存管理_操作系统实验——java内存管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序基础:数据结构(郝斌讲解)(2)
- 下一篇: 计算机防火墙不能更改,win7系统更新防