微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

狂神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都问烂了,现在很多问这个

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐