一.java的虚拟机分为三大区域: 执行引擎, java运行内存, 类加载器

1.1.Java运行内存分为线程共享区域和线程私有区:

我们大多数初学者用的都是sun公司最早设计的Java HotSpot(TM)虚拟机

(IBM的J9也是java虚拟机, 还有openjdk也是java虚拟机)

-堆常量池,方法区--都属于线程共享区域,池(公有区)

-本地方法栈,虚拟机栈(我们一般关注的是这个栈),程序计数器--属于线程私有区

具体参考最下边的图

1.2.对象的回收: 可达扫描分析, 标记, 回收内存, 整理内存来的内存(小区域的内存不能存储大对象)

可达性分析策略: 分析此对象是否是垃圾(此对象是否被引用)

如何判断对象被回收了?答:可以重写对象所属类的finalized方法

上图中的c1对象可以当作spring的scope为Singleton形式的单例对象

提问: spring的scope为prototype形式时,作用域是不是每次从spring获取都会创建一个新的对象. 答: 是的(会)

执行System.gc();时c1对象没有被销毁,因为map集合(对象池)还引用了这个对象. 只有再次调用beanPool.clear()将对象池清空对象才会被销毁

1.3.启动GC有两种方式:

A.手动启动GC:   将对象的引用置为null, 然后调用System.gc();  就像jdbc的close是在将引用置为null

B.自动启动GC:   内存不够用了会自动启动GC. 例如下边两段代码就是自动启GC

如何判定GC运行了?答:运行java文件时,点右键然后选run config通过在弹出的窗口中的arguments选项中配置运行时的虚拟机参数-XX:+PrintGCDetails来查看(如图A)

注意: GC垃圾回收器分为小GC和大GC

-年轻代(年轻代分为伊甸园区和幸存区<幸存区又分为:幸存区1和幸存区2>)-小GC来负责回收

-老年代-大GC来负责回收

-元数区(方法区)

注:多次回收没被回收掉就放入老年代

图A

二.java代码的运行简析:

2.1.javac编译器将.java文件编译为.class文件存入硬盘disk

2.2.类加载子系统ClassLoader将字节码夹杂到内存中

2.3.然后将字节码信息分别存入java运行时内存的不同区域(详细解释参考1.1.)

2.4.JVM执行引擎调用引擎内的解释器将java运行时内存中的代码进行翻译(可能将java代码翻译成二进制), JIT负责将已经翻译的内容进行缓存.

2.5.翻译好的内容交给操作系统来执行(windows系统linux系统mac等系统都能执行)

https://blog.csdn.net/shijiujiu33/article/details/104868390

https://baijiahao.baidu.com/s?id=1673182721214592210&wfr=spider&for=pc

https://blog.csdn.net/weixin_42321815/article/details/89005180

早期的智能手机经常发烫并卡死是因为软件中的太多,

Java中能用全局变量就别用静态变量引用对象

能用局部变量就别用全局变量引用对象, 因为它们的生命周期长短不同

三.类被读到(加载到)内存中了但没创建对象, 此现象能用代码看到对应过程吗?

对象在构造前肯定得先加载本类

访问静态方法肯定会加载本类, 访问类的属性要看属性的类型和修饰(不一定加载本类)

查看类的加载过程可以在运行代码时配置类加载参数:  -XX:+TraceClassLoading

注意: Spring的@Lazy是延迟对象的创建,但是它标注的类是需要立即被加载到内存的(但是没立即创建对象)

如果用@Component注解标注类但没用@Lazy标注的话,类会被立即加载,对象也会立即创建

扩展名词:

热替换 ---- 用类加载器用新代码直接替换原来代码

java内存知识点扩展_笔记的更多相关文章

  1. 《深入理解 Java 内存模型》读书笔记

    ![img](https://mmbiz.qpic.cn/mmbiz_jpg/1flHOHZw6RtPu3BNx3zps1JhSmPICRw7QgeOmxOfTbCT3RLgIo4qRpn6xL4qg ...

  2. 转《深入理解 Java 内存模型》读书笔记

    转:https://mp.weixin.qq.com/s/2hA6u4hLEPWlTPdD-XB-bg 前提 <深入理解 Java 内存模型>程晓明著,该书在以前看过一遍,现在学的东西越多 ...

  3. Java内存访问重排序笔记

    >>关于重排序 重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. > ...

  4. Java内存模型与线程_学习笔记

    深入理解java虚拟机: 1.java内存模型 java虚拟机规范中试图定义一种Java内存模型.Java Memory Model(JMM) 1.1 主内存与工作内存 java内存模型规定所有的变量 ...

  5. Java系列笔记(3) - Java 内存区域和GC机制

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  6. 2016021801 - Java内存区域学习笔记

    根据<深入理解java虚拟机>学习归纳整理学习笔记 程序计数器 用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员:当前线程表示当前机场, 所执行的字节码等同于被等 ...

  7. 【转载】Java系列笔记(3) - Java 内存区域和GC机制

    Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...

  8. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  9. java内存模型知识点汇总

    1.像windows/linux这种操作系统中,自带jvm么?以方便java程序的运行? 答:是的,一般操作系统都自带jvm的.但不带jdk,也就是说java的运行环境有,但编译环境没有. 1.jav ...

随机推荐

  1. 6.29模拟赛 (T1:李时珍的皮肤衣 T2:马大嘴的废话 T3:SSY的队列 T4:清理牛棚);

    啊,又是考炸的一天,成功的退步了三名,啊,成共的看错了T1  的题意 ,水了80分. 第十五名就是我,额,已经有点倒数的感觉了,并且一道题都没AC  我太难了. 好了,废话不多说了,下面正式提接: 这 ...

  2. HDU 5963 朋友 (找规律,思维)

    HDU 5963 朋友 题目大意 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点 ...

  3. 树的子结构(剑指offer-17)

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解析 解答 /** public class TreeNode { int val = 0; Tr ...

  4. 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……

    摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.openGauss 正式开源,华为公开发布源代码[摘要]6月1日,华为正式宣布开源数据库能 ...

  5. 方正璞华Java面试总结(武汉)

    方正璞华Java面试总结(武汉) 现在社会急缺复合型人才,计算机与日语的结合,具备这两种能力的人不愁工作,最后他们大多到的也是日企,甚至到日本去工作.至今为止接触的日企有光庭.方正璞华.先锋·商泰.英 ...

  6. Scala 基础(十五):Scala 模式匹配(三)

    1 变量声明中的模式 match中每一个case都可以单独提取出来,意思是一样的. 应用案例 val (x, y) = (1, 2) val (q, r) = BigInt(10) /% 3 //说明 ...

  7. Django框架03 /视图相关

    Django框架03 /视图相关 目录 Django框架03 /视图相关 1. 请求相关 2.响应相关 3.FBV和CBV 视图(视图函数和视图类) 3.1 类视图 CBV 3.2 视图函数 FBV ...

  8. c++运行程序 改变字和背景的颜色与窗口大小和位置 (c++)(windows)

    关于改变字体的颜色和背景颜色: 在#include <windows.h> 库里 0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A ...

  9. Ethical Hacking - GAINING ACCESS(20)

    CLIENT SIDE ATTACKS - Spoofing backdoor extension Change the extension of the trojan from exe to a s ...

  10. Java冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序

    冒泡排序   冒泡排序是一种简单的排序算法.它重复地走访过要排序地数列,一次比较两个元素,如果它们地顺序错误就把它们交换过来.走访数列地工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. ...