oak橡树语言怎么来的?
OAK是一个缩写,全写是the Object Allocation Keeper(对象分配守护进程)。这个术语最早出现在Unix系统编程中,描述了操作系统分配和释放内存的机制,后来这个概念被迁移到了Java虚拟机中。
在Java中,当程序需要使用一块内存时, Java虚拟机会通过分派指令让硬件将这块内存从硬盘上加载到内存中,这个过程是原子的,不能中断,也不能回退。但当程序不需要使用这块内存时,JVM不会主动地将它放回到硬盘上,而是由开发者自行调用内存管理器中的相关方法来显式地收回已使用的内存,以便能让给别的程序使用。这样,虽然每次执行的程序可能都不完全一样,但每次执行所需要的内存却都能得到回收和使用,避免了因为代码改变而导致的频繁修改内存位置的复杂操作。这种机制使得应用开发者不用关心内存分配的细节问题,使编程人员能够将更多的注意力集中在更高级的编程问题上。
但是,如果程序发生了崩溃或者错误,导致部分或全部内存不能被有效释放,那么这些无法释放的内存就叫做内存泄漏(memory leak)。这类问题通常发生在那些使用了新的特性或是调试了错误的代码之后。为了防止发生内存泄漏,开发者必须仔细检查自己所编写的代码,尤其是那些新加的功能或是在调试阶段有错的代码。有时,即使开发人员觉得自己已经做到了全面检测,但还是会发生内存泄露的问题。这时候,就可能需要分析程序的运行状态,以找出问题所在。
为了便于跟踪内存的使用情况,Java虚拟机的开发者Oracle在1.6版本以后增加了两个可以读取内存状态的命令行参数 -Xms 和 -Xmx。其中,-Xms指定初始内存大小,-Xmx指定最大内存容量。这两个参数的默认值分别是512m和1g。如果运行Java程序的时间过长,出现OOM(Out Of Memory)错误,就可以结合这两条命令的输出以及程序的输出找到内存泄漏的位置。
还有一些用于查看内存状态的工具,例如jmap、jhat等等。 希望对你有所帮助!