JVM笔记 | Java内存管理

  • 时间:
  • 浏览:2

下一篇:JVM笔记 | Java垃圾回收(GC)

Java虚拟机在执行Java应用系统进程的过程中会把它所管理的内存划分为若干个不同的数据区域,即运行时数据区。有有哪些区域都在本人 的用途、以及创建和销毁的时间,有的区域随着虚拟机应用应用系统进程的启动而居于,有的区域依赖用户应用系统进程的启动和结束而建立和销毁。

4. Java堆(Java Heap)

Java虚拟机的多应用系统进程是通过应用系统进程轮流切换并分配出理 器执行时间的法律法律法律依据来实现的,在任何一一个多选折 的时刻,一一个多出理 器(对于多核出理 器来说是一一个多内核)都只会执行一根绳子 应用系统进程中的指令。

对于习惯在HotSpot虚拟机上开发、部署应用系统进程的开发者来说,好多好多 人更后来把法律法律法律依据区称为“永久代”,本质上两者无须等价,仅仅是将会HotSpot虚拟机使用永久代来实现法律法律法律依据区,我实在省去了专门为法律法律法律依据区编写内存管理代码的工作,但现在看来并都在一一个多好主意,将会一一个多多更容易遇到内存溢出疑问。

1. 应用系统进程计数器(Program Counter Register)

对于一一个多Java应用系统进程员而言,将会JVM的自动内存管理机制,不需用为每一一个多new操作写对应的delete/free操作,假如有一天容易总出 内存泄露和内存溢出的疑问。然而一旦总出 内存泄漏和溢出方面的疑问,将会对JVM内存管理机制不了解,没人排查错误将十分艰难。

5. 法律法律法律依据区(Method Area)

Java堆是垃圾挂接器管理的主要区域,这名 好多好多 以前也被称为“GC堆”(Garbage Collected Heap)。从内存回收强度看,将会现在挂接器基本都采用分代挂接算法,好多好多 Java堆还可细分为新生代和老年代;从内存分配强度看,Java堆将会划分出多个应用系统进程私有的分配缓冲区(TLAB),无论如何划分,都与存放内容无关,进一步划分的目的是为了更好地回收内存或更慢地分配内存。

老会 一帮人把Java内存区分为堆内存和栈内存,这名 分法比较粗糙。这名 划分法律法律法律依据的流行不用 不用 说明大多数应用系统进程员最关注的、与对象内存分配关系最密切的内存区域是这两块。

6. 运行时常量池(Runtime Constant Pool)

Java与C++之间有一堵由内存动态分配和垃圾挂接技术所围成的“高墙”,墙外面的人想进去,墙上方的人却想出来。

                        《深入理解Java虚拟机》

Class文件中除了有类的版本、字段、法律法律法律依据、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这帕累托图内容将在类加载后进入法律法律法律依据区的运行时常量池存放。

3. 本地法律法律法律依据栈(Native Method Stack)

2. Java虚拟机栈(Java Virtual Machine Stacks)