class类文件结构

深入理解JavaClass文件格式(一)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(二)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(三)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(四)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(五)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(六)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(七)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(八)-张纪刚的博客-CSDN博客深入理解JavaClass文件格式(九)-张纪刚的博客-CSDN博客Class文件格式总结-张纪刚的博客-CSDN博客之前收藏了关于类文件结构的一系列文章,通过这个专栏可以很好

垃圾收集与内存分配

一.垃圾收集1.概述我们都知道JVM已经为我们提供了自动垃圾收集和自动内存分配,为什么我们还有学习这方面的内容呢?周志明大神给出的答案是这样的:当我们排查各种内存溢出和内存泄漏的问题时,(内存溢出和内存泄漏的区别)或者当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要手动的对垃圾回收的内存分配实施必要的监控和调节。在之前的运行时数据区中,我们知道程序计数器、Java栈、本地方法栈的生命周期和线程是一样的,栈中的栈帧也是随着方法的进入和退出执行着进栈和出栈操作,栈的生命周期和占用内存大小在类结构确定时就已经确定下来,并且是已知的。所以这几个线程私有的内存区域不必考虑太多垃圾回收的问题但是堆具有非常大的不确定性和动态性,在类结构中,一个接口的多个实现类占用的内存大小可能不一样,一个方法的多个分支占用的内存也可能不一样,我们只有在程序运行期间才能知道会创建哪些对象,Java堆才是垃圾回收的主战

Java内存区域

对周志明大神的书籍做一个地毯式的横向总结,有一些前后章节关联的内容后面会进行纵向总结,在保证内容准确的情况,尽量使用自己的语言,加上自己的理解,可能有误差之处,但是只作为个人笔记,如有发现,欢迎指正!1.运行时数据区域概述Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁时间,即生命周期,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户进程的启动和结束而创建和销毁,下面一次介绍虚拟机运行时区域:1.程序计数器占用内存空间较小,字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行的字节码指令Java虚拟机的多线程是通过各个线程轮流使用时间片来实现的,在任何一个时间点上,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程的指令,因此为了线程切换后能够回到正确的位置,每个线程都需要有一个独立的