当前位置:首页 > 内存 > 正文

Java内存管理

  • 内存
  • 2024-08-10 00:35:42
  • 5920

一、北大青鸟java培训:java编程内存管理需要注意的问题?

您在进行程序系统维护时,是否无法快速解决Java编程内存管理问题,导致系统错误?下面我们一起来学习学习一下Java编程内存管理到底有哪些?
程序计数器(理解)程序计数器可以看作是当前线程执行的字节码的行号指示器。
在虚拟机概念模型中,字节码翻译器的任务是通过改变程序计数器的值来选择下一条要执行的字节码指令,以及分支、循环、跳转、异常处理、线程恢复等基础知识,ETC。所有的功能都是靠这个计数器来完成的。
Java虚拟机栈(了解)Java虚拟机栈也是线程私有的,其生命周期与线程相同。
虚拟机栈描述了Java方法执行的内存模型:每个方法执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链表、方法退出信息等。
每个方法从调用到完成执行的过程对应着从压栈帧到退出虚拟机栈的过程。
局部变量表存储编译器已知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型(指向字节码指令)。
如果扩展时无法使用足够的内存,则会抛出OutOfMemoryError异常。
本地方法栈(了解)本地方法栈的作用与虚拟机栈类似。虚拟机使用的本机方法。
有些虚拟机直接将本地方法栈和虚拟机栈合二为一。
将会抛出StackOverflowError和OutOfMemoryError异常。
JavaHeap堆内存用于存储new创建的对象实例和数组。
(要点)Java堆是所有线程共享的一块内存区域,它是在虚拟机启动时创建的。
Java堆是垃圾收集器管理的主要区域。
java课程培训机构


二、Java的内存管理机制是怎样的?Java中的内存分配有三种类型,\x0d\x0a1:程序编译时分配内存,如静态变量\x0d\x0a2:堆栈上的所有局部变量创建于,当程序退出作用域时变量,该变量的内存被自动释放。\x0d\x0a3​​​​堆区:在堆中创建对象(包括数组)。程序在运行时使用new关键字创建一个对象。一旦对象被创建,内存就会在堆中分配给它。


三、如何禁止自动内存管理,改用手动分配内存内存管理包括分配和释放对象。
在Java中,程序员必须通过new关键字为每个对象(基本类型除外)申请内存空间。所有对象都在堆上分配空间。
物品的释放由GC决定并执行。
在Java中,内存分配由程序完成,内存释放由GC完成。这种两行方法简化了程序员的工作。但同时也增加了JVM的工作量。这就是Java程序运行速度较慢的原因之一。
GC释放空间方法:
监控各个对象的执行状态,包括对象申请、引用、引用、赋值等。当对象不再被引用时释放该对象。
2.内存管理结构
Java使用有向图进行内存管理对于程序的每个时刻,我们都有一个有向图来表示JVM的内存分配情况。
将对象视为有向图的顶点,将引用关系视为图的有向边。从引用者到被引用对象的直接边缘点。此外,每个线程对象都可以用作图的起始顶点。例如,大多数程序从主进程开始执行,因此该图是从主进程的顶点开始的根树。在这个有向图中,从根顶点可达的对象都是有效对象,GC不会回收这些对象。如果一个对象(连通子图)从根顶点不可达(注意该图是有向图),那么我们就认为这个(这些)对象不再被引用,可以被GC回收。
3.使用有向图管理内存的优缺点
Java使用有向图来管理内存,可以消除引用循环的问题。比如存在三个相引用的对象,只要根进程无法访问,GC也可以回收它们。
这种方法的优点是内存管理的精度很高,但效率较低。