![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 91
JVM相关知识
文轩-萍
程序猿
展开
-
JVM-运行时数据区
就是JVM在运行期间会使用的到的内存,其中一些会随着虚拟机启动和结束而创建和销毁,另外一些则是与线程一一对应的,这些与线程对应的数据区会随着线程的开始和结束而创建和销毁。每个JVM启动对应一个Runtime实例,即运行时环境。运行时数据区被划分为6个区域线程私有区域:程序计数器PC、虚拟机栈VMS、本地方法栈线程共享区域:堆Heap、元数据区Metaspace、直接内存在Hotspot JVM中线程主要分为编译线程:此类线程在运行时会将字节码编译成到本地代码。原创 2023-07-18 10:52:38 · 86 阅读 · 1 评论 -
JVM-虚拟机栈
虚拟机栈:由于Java跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。所以指令集小,编译器容易实现,但是性能下降,实现同样的功能需要更多的指令。Java虚拟机规范允许Java栈的大小是动态的或者是固定不变的。设置栈空间大小:可以使用参数-Xss选项来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度。虚拟机栈特点:栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器;原创 2023-07-18 16:20:22 · 68 阅读 · 1 评论 -
JVM-方法区
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。方法区在JVM启动的时候被创建,并且它的实际的物理内存和Java堆区一样都可以是不连续的。关闭JVM就会释放这个区域的内存。方法区的大小也可以选择固定大小或者可扩展。方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:OOM。在jdk7及以前,习惯上把方法区称为永久代。jdk8开始,使用元空间取代了永久代。本质上,方法区和永久代并不等价,仅是对hostspot而言的。原创 2023-07-18 10:29:35 · 66 阅读 · 1 评论 -
JVM-垃圾回收算法
Java的垃圾回收机制:Java的自动内存管理,开发人员无需手动参与内存的分配与回收,这样降低内存泄漏和内存溢出的风险,开发人员可以更专心地专注于业务开发。Java堆是垃圾收集器的工作重点。频繁收集年轻区、较少收集老年区、基本不动方法区。如何确定一个对象是否为垃圾?引用计数算法:在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。原创 2023-07-18 21:26:01 · 69 阅读 · 1 评论 -
JVM运行时数据区之堆空间
一个JVM实例对应一个Runtime对象,也就是一个进程,堆是Java内存管理的核心区域(进程唯一、线程共享)。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大的一块空间,堆内存大小可以设置为固定大小,也可以是扩展的。Java虚拟机规范规定,堆可以处于物理上不连续的内存空间中,但在逻辑上他应该被视为连续的。所有线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB),原创 2023-07-18 10:01:57 · 89 阅读 · 1 评论 -
JVM-垃圾收集器
Java 堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法;年老代主要使用标记-整理垃圾回收算法,因此 java 虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器。GC的对比面向服务端应用。原创 2023-07-19 09:25:27 · 69 阅读 · 0 评论