ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

狂神jvm

2021-09-19 09:31:16  阅读:180  来源: 互联网

标签:java blog GC 内存 jvm 狂神 方法


零碎知识点

  1. JDK>jre>jvm(包含)

  2. jvm使用c语言写的

  3. java也叫C+±-?

    java去掉了C++繁琐的东西,指针,内存管理

  4. 栈内不可能会有垃圾回收。为什么?

    栈用完就会弹出去,不弹出去下一个无法读取运行,有垃圾程序堵死。

  5. 方法区属于一个特殊的堆。jvm调优主要是在堆里,

    所以jvm调优99%的情况都是在调方法区和堆区

  6. java创建对象,堆内存放实例,栈内存放地址。栈内地址映射着堆内的实例对象。所以栈内没什么垃圾,垃圾在堆内。

  7. 类是模板,是抽象的;对象是具体的

一. 类加载器???

先空着

二. 双亲委派机制

https://blog.csdn.net/codeyanbao/article/details/82875064

  1. 为什么在一直往上查询类加载器时,到启动类加载器就显示为null?

    再往上就是C++代码的实现,无法查看

  2. .java–>.class–>类加载器---->jvm(C写的)

  3. 类装载器采用的机制是双亲委派模式。

三. 沙箱安全机制

  1. (59条消息) java中的安全模型(沙箱机制)_改变ing-CSDN博客_沙箱安全机制
  2. https://blog.csdn.net/qq_41813208/article/details/108091557

四. native关键字,PC寄存器,方法区

1. native

(1)凡是带了native关键字的,说明java的作用范达不到了,会去调用底层C语言的库。

(2)在本地方法栈调用 本地方法接口:JNI.

(3)JNI作用:扩展Java的使用,融合不同的编程语言为Java所用!在Java诞生的时候,C/C++横行,想要立足,必须要有调用C/C++的 程序。

(4)在最终执行的时候,通过JNI加载本地方法库中的方法。

(5)什么情况下调用native:操作硬件的情况等,如驱动打印机,管理系统(这个是什么~~)等

2. PC寄存器

程序计数器(第一次听,以后用到在搜吧)

3. 方法区

静态static变零,常量,类信息(构造方法,接口定义),运行时的常量池存在方法区中,但是实例变量存放在堆内存中,和方法区无关。

五. 栈

1. 栈帧

​ https://blog.csdn.net/ylyuanlu/article/details/18947951

​ https://blog.csdn.net/qian520ao/article/details/79118474

​ https://blog.csdn.net/heihaozi/article/details/103830143

(1)栈帧就是压栈的那个

(2)每执行一个方法都会产生一个栈帧

(3)程序正在执行的方法,一定处于栈的顶部

2. 栈,堆,方法区的交互关系

(1)三块区域,方法区存在常量池

(2)new一个对象,在栈内放一个引用地址,在堆内存放实例

(3)引用地址指向实例,实例中调用方法区中的常量池

也就是说:对象实例化的过程是什么?

​ 没找到相应文章

六. 堆

  1. 三种jvm

    (1)HotSpot(Sun公司)

    (2)JRockit

    (3)j9vm

  2. Heap, 一个JVM只有一个堆内存,堆内存的大小是可以调节的。

  3. 类加载器读取了类文件后,一般会把什么东西放到堆中? 类, 方法,常量,变量~,保存我们所有引用类型的真实对象

  4. 堆内存中还要细分为三个区域:

    ●新生区(伊甸园区) Young/New

    ●养老区old

    ●永久区Perm

    在这里插入图片描述

    (1)幸存区是新生区-养老区的过渡

    (2)GC垃圾回收,主要是在伊甸园区和养老区

    (3)假设内存满了,OOM,堆内存不够! java.lang.OutOfMemoryError:Java heap space

    img

    (4)永久存储区里存放的都是Java自带的 例如lang包中的类 如果不存在这些,Java就跑不起来了

    (5)在JDK8以后,永久存储区改了个名字(元空间)

5. 新生区、老年区

重GC和轻GC:伊甸园满了就触发轻GC,经过轻GC存活下来的就到了幸存者区,幸存者区满之后意味着新生区也满了,则触发重GC,经过重GC之后存活下来的就到了养老区。真理:经过研究,99%的对象都是临时对象

6. 永久区

(1)堆满,报错OOM,如何解决?

​ 1)手动配置类的参数,扩大堆的内存空间。

​ 2)倘若还报错,说明程序有误。可能有什么死循环代码,垃圾代码等。

(2)逻辑上存在,物理上不存在(通过计算,元空间没分配内存)

(3)常用的配置参数含义:

​ 1)-Xms 设置初始化内存分配大小 默认CPU的1/64

​ 2)-Xmx 设置最大分配内存,默认1/4

​ 3)-XX:+PrintGCDetails //打印GC垃圾回收信息

​ 4)-XX:+HeapDumpOnOutOfMemoryError //oom DUMP 打印堆内存溢出信息

  1. JPofiler工具:内存快照分析工具

七. GC算法

  1. 引用计数法(不中用)

  2. 复制算法???

    请看狂神的笔记https://blog.csdn.net/qq_40126686/article/details/108279919

  3. 标记清楚算法和标记清楚压缩算法

八. JMM

???jvm都问烂了,现在很多问这个

标签:java,blog,GC,内存,jvm,狂神,方法
来源: https://blog.csdn.net/HSH541/article/details/120377294

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有