首页 > 其他分享 >jvm

jvm

时间:2023-04-13 15:37:59浏览次数:37  
标签:标记 回收 算法 STW jvm new 加载

java内存模型与分区:

本地方法栈:native方法调用本地其他语言接口;

程序计数器:记录当前线程的运行位置;

:存放运行时的方法,包括:局部变量表、操作数栈、动态链接(指向常量池)和方法返回地址

:初始化的对象、成员变量。

方法区

类型信息(加载类的类型(Class)、类的完整名称、类型修饰符等);

域信息(public);

方法信息(void、int);

全局变量(static final);

常量池(运行时常量池);

参数:

-Xss:设置栈最大空间;

-Xms:设置堆起始空间;

-Xmx:设置堆最大空间;

指令:

jps:查看当前程序运行的进程;

jstat -gc 进程号:gc信息;

堆:

可设置线程私有的TLAB缓冲区;

新生代Survivorfromto),老年代

​ 8 : 1 : 1

​ 1 : 2

例:

Person person = new Person();

方法区

栈 -> 堆(对象实例数据) -> 方法区(对象类型数据)

栈 -> 堆 -> 方法区

对象头:

内容:运行时元数据、类型指针;

对象的访问定位:使用句柄、直接指针;

类加载子系统:

加载class文件。

过程:加载、链接(验证、准备、解析)、初始化;

分类:引导类加载器、启动类加载器、扩展类加载器;

双亲委派机制:类加载器接到类加载请求,委托父类加载。

破坏双亲委派机制:重写loadClass和findClass;

StringTable:

Jdk9:byte[];

jdk8:存储在堆中;

垃圾回收算法:

引用计数法:循环引用导致回收失败;

可达性分析算法:GCRoots(可以是除堆之外的其他地方);

标记-清除算法

标记-整理算法

复制算法;

分代收集算法;

强引用:new对象,内存不够,报OOM都不回收;

软引用:new softReference,内存不够,回收;

弱引用:new WeakReference,遍历时,回收;

虚引用;

垃圾回收器:

新生代

Serial:串行回收,复制算法;

ParNew:并行回收;

Parallel GC:吞吐量优先;

G1

老年代:

Serial Old:串行回收,标记压缩算法;

CMS:初始标记(STW)、并发标记、重新标记(STW)、并发清除;

优点:并发收集、低延迟;

缺点:碎片、CPU依赖、浮动垃圾;

G1:区域化分代式,可控延迟,获取高吞吐量;

堆内存分割为区域;

初始标记(STW)、并发标记、再次标记(STW)、独占清理(STW)、并发清理

标签:标记,回收,算法,STW,jvm,new,加载
From: https://www.cnblogs.com/maxzhangxiaotao/p/17314972.html

相关文章

  • JVM 内存
    简述JVM内存模型  从宏观上来说JVM内存区域分为三部分线程共享区域、线程私有区域、直接内存区域。1.1、线程共享区域1.1.1、堆区堆区Heap是JVM中最大的一块内存区域,基本上所有的对象实例都是在堆上分配空间。堆区细分为年轻代和老年代,其中年轻代又分为Eden、S0、S1......
  • 细读JVM日志--01
    七种垃圾收集器具体每一种的详情见以下是垃圾回收日志中的一块:0.150:[GC(System.gc())[PSYoungGen:5161K->931K(74752K)]5161K->939K(245760K),0.0007762secs] [Times:user=0.00sys=0.00,real=0.00secs]0.151:[FullGC(System.gc())[PSYoungGen:931K->0K(74752K)]......
  • JVM基础一
    目录一、JVM基本认识1、虚拟机与JVM2、JVM整体结构Java文件编译过程图JVM结构图JVM分类JVM生命周期简述简单了解几个虚拟机二、类加载子系统(ClassLoaderSubSystem)介绍1、类加载子系统作用、流程作用工作流程2、加载(Loading)3、连接(Linking)——验证(Verification)4、连接(Lin......
  • JVM:并发的可达性分析
    当前主流编程语言的垃圾收集器基本上都是依靠可达性分析算法来判定对象是否存活的,可达性分析算法理论上要求全过程都基于一个能保障一致性的快照中才能够进行分析,这意味着必须全程冻结用户线程的运行。在根节点枚举这个步骤中,由于GCRoots相比起整个Java堆中全部的对象毕竟......
  • JVM 堆内存大小查看
    JVM堆内存大小查看在默认不配置JVM堆内存大小的情况下,JVM根据默认值来配置当前内存大小,可通过如下命令进行查看:java-XX:+PrintFlagsFinal-version|grepHeapSize  上图表示启动的JVM默认最大堆内存约为2.9G,初始化大小为195MB。 ......
  • 通俗解释 JVM CAS 机制
    JVM的CAS,即CompareAndSwap,是一种并发编程中常用的保证原子性的技术。通俗地讲,CAS用于在多线程环境下对共享变量的值进行原子操作,即多个线程同时访问同一个共享变量,但只有一个线程能修改这个变量的值,并且这个操作是原子的,不会被其他线程打断。具体来说,CAS操作包含如下三个......
  • JVM
    什么是JVMjvm是java虚拟机运行在用户态、通过应用程序实现java代码跨平台、与平台无关、实际上是"一次编译,到处执行"从微观来说编译出来的是字节码!去到哪个平台都能用,只要有那个平台的JDK就可以运行!字码好比是一个人,平台好比为国家,JDK好比这个国家的语言!只要这个人(字节码)有了......
  • JVM系统优化实践(14):GC可视化工具
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~工欲善其事,必先利其器。知道了GC工作原理,学会了看GC日志之后,再来了解一下分析GC的工具。它们分别是jstat、jmap、jhat。jstat顾名思义,主要是用于查看JVM的内存和GC情况。先用jps找出Java进程的PID,再用jstat-gc[PID]查看JVM的内存......
  • Java虚拟机运行时数据区(JVM_2)
    2.3运行时数据区(Run-TImeDataAreas)2.3.1官网概括官网;https://docs.oracle.com/javase/specs/jvms/se8/html/index.htmlTheJavaVirtualMachinedefinesvariousrun-timedataareasthatareusedduringexecutionofaprogram.Someofthesedataareasarecreate......
  • 深入理解 JVM---JVM 和 GC 日志 以及 内存分配回收日志
    虚拟机及垃圾收集器日志1、JDK9日志在JDK9以前,HotSpot并没有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环日志大小、输出格式、重定向等设置在不同功能上都要单独解决。直到JDK9,这种混乱不堪的局面才终于消失,HotSpot所有功能的日......