JVM
文章平均质量分 80
sicaujh
这个作者很懒,什么都没留下…
展开
-
Java垃圾收集(GC)详解
1、简介 Java内存运行时区域分为堆(Heap)、方法区、虚拟机栈、本地方法栈和程序计数器,其中虚拟机栈、程序计数器和本地方法栈随线程而生、随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配所少内存基本上在类结构确定下来就是已知的(尽管在运行期会由即时编译器进行一些优化,但是在基于概念模型的讨论里,大体上可以认为是编译期可知的),这几个区域的内存分配和回收都具备确定性,因此对于这几个区域就不需要过多考虑如何回收的问题,当方法结束或者线程结束时,内存自然就..原创 2021-02-16 21:49:41 · 262 阅读 · 1 评论 -
JVM之对象的访问定位
在Java虚拟机中,对象类型的数据放在方法区,而对象实例的数据放在java堆中。如果要访问对象,一般有两种方式:一种是使用句柄,另一种是直接指针式地访问对象。一、句柄访问Java堆中会划分出一块内存来作为句柄池,而reference中存储的就是对象的句柄地址,而句柄中分别存放了对象实例数据和对象类型数据各自的地址信息。优点:对象发生变化的时候只需要修改句柄池中的指针而不需要修改reference。缺点:运行速度会受到影响(需要两次指针定位)。二、使用指针(HotSpot采用.原创 2021-02-12 19:37:45 · 160 阅读 · 0 评论 -
JVM内存空间详解&实例分析
1、介绍 Java不需要开发人员来显示分配内存,而是由JVM来自动管理内存的分配和回收(垃圾回收GC),但由此带来的负面影响有可能是在不知不觉中浪费了很多内存或者造成内存泄漏。因此,作为开发人员而言,不能因为JVM自动内存管理机制就不掌握内存分配和回收的知识了。2、内存空间 分析JVM的内存结构,主要是分析JVM运行时数据区,具体划分成5个部分:方法区、堆、虚拟机栈、本地方法栈和程序计数器。2.1 方法区 方法区主要存放了需要加载的类的信息(名称、修饰符等)、...原创 2021-02-10 11:42:45 · 406 阅读 · 0 评论 -
JVM之类加载机制&双亲委派
1、介绍 类加载机制是指.class文件加载到JVM并形成Class对象的机制,在完成类加载后,应用就可以对Class对象进行实例化并调用。类加载机制可以在运行时动态加载外部的类和通过远程网络下载咋class文件等。除了有动态化的优点之外,JVM的类加载机制还有隔离运行的效果,使应用之间互不干扰。 JVM将类加载的过程划分为三个步骤:装载、链接和初始化。其中,装载和链接是将二进制的字节码转换为Class对象;初始化过程不是加载类时必须触发的,但是最迟必须在初次主动使用对象前执行,其所作的...原创 2021-01-25 22:14:12 · 120 阅读 · 0 评论 -
JVM栈、堆、方法区的交互关系
栈、堆、方法区的交互关系public class AppMain { //运行时,JVM把AppMain的信息都放入方法区 public static void main(String[] args) { //main成员方法本身放入方法区。 Sample test1 = new Sample( " 测试1 " ); //test1是引用,所以放到栈区里,Sample是自定义对象应该放到堆里面转载 2020-12-30 18:19:30 · 204 阅读 · 0 评论 -
JVM堆、栈区别
堆和栈是程序运行的关键,区别如下:栈是运行时的单位,而堆是存储的单位。 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储问题,即数据怎么放、放在哪。 在Java中有一个线程就会相应的有一个线程栈与之对应,这点很容易理解。因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈,而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程相关的信息,包括局部变量、程序运行状态、方法返回值等等,而堆只负责存储对象信息。根集合:简单地将就是栈里面的对象引用和堆内转载 2020-12-19 18:10:30 · 650 阅读 · 1 评论