程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
JVM(Java Virtual Machine,Java虚拟机)是Java语言的核心,主要用于解释Java字节码。它可以在运行Java程序时自动管理内存、处理异常等。Java程序员不需要关心底层硬件和操作系统的细节,只需要编写符合Java语法规范的代码,就可以实现跨平台的编程。
JVM内存模型主要是指Java虚拟机在运行时所使用的内存结构。主要包括程序计数器、栈、堆、方法区等部分。
-
程序计数器(Program Counter Register)
一块较小的内存空间,每个线程私有,用于记录当前线程执行的字节码指令的地址。每个线程都有一个独立的程序计数器,用于控制线程的执行流程。
-
虚拟机栈(VM Stack)
存放的是一些基本类型的变量和对象引用。Java 方法执行的内存模型是以栈帧(Stack Frame)为基础的,每个线程在运行时都会有一个独立的栈,栈中的每个方法调用都会创建一个栈帧,栈帧包含了方法的参数、局部变量和返回值等信息。栈的大小是固定的,并且栈中的数据是线程私有的,不会被其他线程访问。
-
堆(Heap)
JVM中最大的一块内存区域,用于存储对象实例。一般通过new关键字创建的对象都存放在堆中,堆的大小可以通过启动参数进行调整。堆被所有线程共享,但是它的访问是线程不安全的,需要通过锁机制来保证线程安全,也是垃圾回收器主要活动区域。
-
方法区(Method Area)
是用来存储加载的类信息、常量、静态变量等数据的。它是所有线程共享的内存区域,存储了类的结构信息、常量池、静态变量和方法字节码等。方法区的大小也可以通过启动参数进行调整。
系列文章索引
MyBatis的插件能在哪些地方进行拦截?
了解MyBatis的缓存机制吗
面试官:谈谈对volatile的理解
Spring中用到了哪些设计模式
面试官:说一下SQL的执行过程
线程池的工作原理