图来自JavaGuide
pPqDK1I.png

程序计数器

java

字符串常量池的变化:

方法区是所有线程共享的内存,在java8以前是放在JVM内存中的,由永久代实现,受JVM内存大小参数限制,在java8中移除了永久代的内容方法区由元空间(Meta Space)实现,并直接放到了本地内存中,不受JVM参数限制(当然,如果物理内存被占满了,方法区也会报OOM),并且将原来放在方法区的字符串常量池和静态变量都转移到了Java堆中。

所有的对象都是在Eden区new出来

OOM解决方法

永久代逻辑上存在,物理上不存在

堆内存调优

-Xms 1m 设置初始化内存分配大小 默认本机内存1/64

-Xmx 1m 设置最大分配内存 默认本机内存1/4

-XX:+PrintGCDetails 打印GC垃圾回收信息

-XX:+HeapDumpOnOutOfMemoryError: 导出OOM异常文件

虚拟机

正在执行的方法一定在栈的顶部

运行时栈帧包含的结构:局部变量表、操作数栈、动态连接返回地址、附加信息

垃圾回收是否涉及栈内存

不涉及,垃圾回收主要指堆内存,当栈帧弹栈后,内存就会释放

栈内存分配越大越好吗?

  • 未必,默认栈内存1024k,栈帧过大会导致线程数变少

方法内的局部变量是否线程安全

什么情况下会导致堆内存溢出(StackOverflow

堆、栈的区别

  • 栈内存一般用来存储局部变量和方法调用,堆内存用来存储java对象和数组。堆会GC垃圾回收,而栈不会。
  • 栈内存是线程私有的,堆内存是线程共有的
  • 两者异常错误不同,但如果栈内存或堆内存不足都会抛出异常

方法区

运行时常量池

直接内存

GC垃圾回收

发生在堆。

垃圾回收算法

标记清除算法

首先标记出所有不需要回收的对象,在标记完成后统一回收掉所有没有标记的对象。

缺点:

  • 效率不高
  • 产生大量不连续的内存碎片
复制算法

内存分为大小相同的两块,每次使用其中的一块,当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用空间一次清理掉。

用于新生代的Survivor区

缺点:

  • 可用内存变小,缩小为原来的一半
  • 不适用于年代
标记整理算法

标记过程仍然与“标记清除算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。

根据老年代的特点提出的一种标记算法,多了整理这一步,因此效率也不高,适合老年代这种垃圾回收频率不是很高的场景

分代收集算法

对象的生命周期不同,故根据对象的存货周期在堆中分为新生代、老年代,根据其特点选择合适的垃圾收集算法

类的加载过程

pPqcw0P.png

主要分为七个过程

pPqg8H0.png

  1. 加载

  2. 验证

    验证类是否符合JVM规范

  3. 准备

    为类变量分配内存并设置初始值

  4. 解析

    类中符号引用转变为直接引用

  5. 初始化

    对类的静态变量、静态代码块进行初始化操作

  6. 使用

    JVM 开始从入口方法开始执行用户的程序代码

  7. 卸载

    程序代码执行完毕后,JVM销毁Class对象,JVM也退出内存

双亲委派机制

当某个类加载需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载没有加载,下一级才会去加载这个类。

优点:

  • 避免某一个类被重复加载,保证唯一性。
  • 为了安全,保证类库API不会被修改

JVM调优

JVM调优主要是调整年轻代、老年代、元空间的内存大小使用的垃圾回收器。

-Xms : 设置堆的初始化内存大小
-Xmx :设置堆的最大内存大小
-XXSurvivorRatio=3,表示年轻代中的分配比率survivor:survivor:eden = 1:1:3
-XX:newSize=n   设置年轻代的初始大小
-XX:MaxNewSize   设置年轻代的最大大小,  初始大小和最大大小两个值通常相同
  • 线程堆栈的设置

    默认1M,但128k就够用了

-Xss每个线程stack大小的调整,-Xss128k

原文地址:https://blog.csdn.net/weixin_59864324/article/details/134699677

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_7937.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注