java内存知识点扩展_笔记
一.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内存知识点扩展_笔记的更多相关文章
- 《深入理解 Java 内存模型》读书笔记
 1.1 主内存与工作内存 java内存模型规定所有的变量 ...
- Java系列笔记(3) - Java 内存区域和GC机制
目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...
- 2016021801 - Java内存区域学习笔记
根据<深入理解java虚拟机>学习归纳整理学习笔记 程序计数器 用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员:当前线程表示当前机场, 所执行的字节码等同于被等 ...
- 【转载】Java系列笔记(3) - Java 内存区域和GC机制
Java系列笔记(3) - Java 内存区域和GC机制 转载:原文地址http://www.cnblogs.com/zhguang/p/3257367.html 目录 Java垃圾回收概况 Java ...
- 转 Java笔记:Java内存模型
Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...
- java内存模型知识点汇总
1.像windows/linux这种操作系统中,自带jvm么?以方便java程序的运行? 答:是的,一般操作系统都自带jvm的.但不带jdk,也就是说java的运行环境有,但编译环境没有. 1.jav ...
随机推荐
- 线性动归之Wooden Sticks
题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工: 1.第一根木头需要先花费1min: 2.加工完第i跟木头 ...
- 栈的压入、弹出序列(剑指offer-21)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……
摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.openGauss 正式开源,华为公开发布源代码[摘要]6月1日,华为正式宣布开源数据库能 ...
- Docker装的Oracle 11g没有HR用户怎么办?一个脚本解决问题!
#0x0 问题描述 这个学期有一门Oracle的课,我图省事就直接拉了个docker镜像来做练习,一直倒也没啥问题,但是今天的作业需要用到HR这个模板用户. 然而我执行alter user hr ac ...
- Let's GO(四)
人生苦短,Let's GO Let's GO(一) Let's GO(二) Let's GO(三) Let's GO(四) 今天我学了什么? 1.panic && recover Go ...
- 一、python 基础之基础语法
一.变量命名规则 1.驼峰命名 大驼峰 MyName = 'leon' 小驼峰 myName = 'Amy' 2.下划线命名 my_name = 'jack' 建议:变量名或者文件名使用下划线命名方式 ...
- 机器学习实战基础(十四):sklearn中的数据预处理和特征工程(七)特征选择 之 Filter过滤法(一) 方差过滤
Filter过滤法 过滤方法通常用作预处理步骤,特征选择完全独立于任何机器学习算法.它是根据各种统计检验中的分数以及相关性的各项指标来选择特征 1 方差过滤 1.1 VarianceThreshold ...
- 数据可视化实例(五): 气泡图(matplotlib,pandas)
https://datawhalechina.github.io/pms50/#/chapter2/chapter2 关联 (Correlation) 关联图表用于可视化2个或更多变量之间的关系. 也 ...
- StringTable结构以及基本调优
StringTable底层实现类似于HashTable,由数组和链表组成,数组又称为桶数组.比如有这样一段代码: public class Demo4 { public static void mai ...
- 毕业三年从月薪6K到20K
首先,声明这不是标题党,是一个真实的北漂故事! 为什么写这篇文章呢?第一,有感而发,感恩遇到的人和事,其次,希望对读这篇文章的你有所帮助 毕业那年 时间追溯到17年6月30号,那天毕业典礼,之 ...