JVM Java程序运行底层原理及垃圾回收概念 day1
概念一:程序的栈(栈帧)和堆
栈:每个线程都有一个栈(栈帧),栈里包含main方法和其他main方法调用的其他方法,方法调用完后,自动释放——弹出栈(栈顶指针向下)。
堆:包含新建的对象的详细信息。需要手动释放
最难调试的bug:
- 野指针
同一个对象,两个指针,一个释放了,另外一个不知道还拿来用
同一个指针,不同位置,
不在指向任何对象的指针
NullPionterExcepetion
并发问题
多线程访问同一块空间。
:
语言的发展历史
C/C++
- 手工管理 malloc free/new delete
- 忘记释放 - memory leak- out of memory
- 释放多次 产生极其i难以调试的bug,一个线程空间莫名其妙被释放
- 运行效率高,开发效率低。
Java python go
- 方便内存管理的语言
- GC—Garbage Collector —应用线程只管分配,垃圾回收器负责回收
rust
- 运行效率超高(asm c c++)
- 不用手工管理内存(没有GC)
- 学习曲线巨高
garbage的概念
判断堆里面的对象是否是garbage
简答思想:
每个变量都有一个计数器,记录指向其的指针数,(不好)python引用计数法
java使用根可达**(Root Searching)**算法
垃圾回收机制:
- Mark Sweep(标记清除)缺点:碎片化
- Copying :只用一半的空间,垃圾回收时,把用过的一半中有效的内存整理好放进另一半里,之前的一半完全重置。(内存浪费)
- Mark Compact(),使用整块内存,回收垃圾时整理有用的部分,清除其余部分。效率低,三种最低。
对这三种算法的综合运用,诞生了各种各样的垃圾回收器。
JVM Java程序运行底层原理及垃圾回收概念 day1相关推荐
- JVM底层原理+四大垃圾回收算法详解-周阳老师
转载自,感谢原作者:https://www.jianshu.com/p/9e6841a895b4 注意:垃圾回收算法周阳老师讲的有错误,具体在p19,四大垃圾回收算法为复制算法.标记-整理算法.标记- ...
- 从Java程序运行的角度分析JDK1.8下JVM的内存区域划分及变量存储
(内容归纳于网络,不妥之处可共同商讨) 文章目录 Java程序运行 Java编译器 JVM HotSpot 类加载器 字节码校验器 JVM内存五大区域 JDK1.8 下的方法区 元空间与永久代 JDK ...
- 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)
java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...
- JVM内存模型、原理、垃圾回收、调优
JVM内存模型.原理.垃圾回收.调优,这Java语言的基础,作为Java从业人员是必须要掌握的,另外这也是面试经常会问到的知识. ----------------------------------- ...
- Java 程序的工作原理
文章目录 Java 语言的主要特点 Java 体系 从源码到机器码的过程 JDK.JRE 与 JVM 是什么 字节码解释过程 Java两大核心机制之JVM Java两大核心机制之GC Java 语言的 ...
- java程序运行机制
计算机高级编程语言分为两种: 编译型:针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式. 一次性的编译成平台相关的机器语言文件,运行 ...
- Java程序运行机制简介
Java程序运行机制 Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译,后解释两个步骤. 高级语言的运行机制 计算机高级语言按程序的执行 ...
- java 程序运行过程 简介
这里的Java程序运行过程,是指我们编译好代码之后,在命令行开始执行java xxx命令,到java程序开始执行起来的这一过程,我们称其为运行时. 第一步,操作系统解析我们输入的java xxx命令, ...
- 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )
文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...
最新文章
- 第一课时之HTML简介
- Reverse Linked List II leetcode java
- 从内置函数看 Python 的设计思想:len(x) 是否击败 x.len(),
- 浪费超9000亿美金,数字化转型失败罪魁祸首在DevOps?
- 《MySQL必知必会》.pdf
- Genymotion下载及安装(安卓虚拟机)
- 2020 ECCV 目标检测冠军
- 数学一年级应用题_一年级数学下册100以内加减法应用题,给孩子下载!
- 惯导系统误差分析(一) 惯性导航系统的误差与误差源
- 【mosek.fusion】Primal SVM
- Android手机无法上网怎么办,Android手机的WIFI连接上了却不能上网是怎么回事如何解决...
- 如何在“一周内”摸清一个行业
- day3-作业(18-23)(java泛型总结一)
- Windows Terminal PowerShell 7 美化
- char如何储存那么多汉字
- 10-199 C2-1修改订单运费
- android 应用图标 角标 显示未读消息
- C语言高精度加法(含c++版)
- msys 的安装和使用
- quartz定时任务不执行