初识JVM--java虚拟机的基本知识-程序员宅基地

技术标签: java  

JVM运行时的内存块

  1. pc寄存器:(线程独有)保存线程运行的java方法地址
  2. Java 虚拟接栈(线程独有):用于存储线程的栈帧
  3. Java堆(全局共享):随着Java虚拟机的启动 创建 存储着所有对象的实例以及数组对象,而且内置gc(垃圾回收机制)
  4. 方法区:运行常量池
  5. 本地方法栈:线程独有。

 

在jvm中gc(垃圾回收机制)是Java立足点之一。垃圾自动回收可以让Java程序员减少与内存打交道,更专注于业务的开发与实现。

垃圾回收需要实现如下几点

  1. 什么对象可以回收‘
  2. 何时回收
  3. 怎么回收

 

关于垃圾回收的对象定义,主要有两种:

  • 检查这个对象是否有引用

  比如:a =new A(); 那么对象A是有引用的。但这种方式会出现死锁,就是有两个或者多个对象之间相互引用,但这些对象都是没用的。怎么办?

  • 检查这个对象是否根部对象可达。

只有一个root,root与其他对象直接或间接关联,如果这个对象根部不可达,那么这个对象就“垃圾”

利用根部是否可达的方式没有死锁,是目前jvm gc的主流实现方式。当然未来的路还很长,说不定还有更好的算法实现呢?

 

何时回收?

  垃圾对象的产生,一般都是周期回收。在回收垃圾的时候,停止运行的java程序

怎么回收?

  1. 标记-清理:先将视为垃圾的对象标记,然后进行清理,这样清理出来的空间是不连续的
  2. 复制:将内存分成两半,然后将有效的复制到另一半。这样整理出来的内存空间是连续的
  3. 标记-清理-整理:针对标记-清理加了优化,整理出连续的内存空间。

 

进一步优化:

  总会有一些对象会一直存在如静态变量,线程池。。。这些“老不死”就没必要老是检查它们了,可以减少检查和清理的周期。于是就有了,新生代,老生代,永久代

  • 新生代:新建的对象,这里一般是局部对象,使用过后很快消亡。经过几个周期之后,将升级为老生代,新生代的存活率10%左右
  • 老生代:从新生代升级为的老生代,拥有更顽强的生命,所以垃圾清理的算法和周期都与新生代不同
  • 永久代:永久代并不是不可能死亡,清理还是要的只不过周期很长而已。

 

转载于:https://www.cnblogs.com/zhongzheng123/p/5853054.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30318645/article/details/95697658

智能推荐

用limma包的voom方法来做RNA-seq 差异分析_limma voom-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏17次。用limma包的voom方法来做RNA-seq 差异分析大家都知道,这十几年来最流行的差异分析软件就是R的limma包了,但是它以前只支持microarray的表达数据。考虑到大家都熟悉了它,它又发了一个voom的方法,让它从此支持RNA-seq的count数据啦!大家都知道芯片数据跟RNA-seq数据的本质就是value的分布不一样,所以各种针对RNA-seq的差异分析包也就是提出来一个新的normalization方法而已。而我们limma本身就提出了一个voom的方法来对RNA-seq数据进行_limma voom

应聘华为的朋友小心了,应聘华为的悲惨遭遇!-程序员宅基地

文章浏览阅读9.5k次,点赞3次,收藏2次。 以下内容全部真实,为本人亲身经历。可随时进行当面对质。   本人女朋友,原本是西安一家企业里面的行政助理,工作比较稳定,收入不高,但也基本够她用了。    一天,我的一个同学(华为员工)说华为西研所正在招聘文员,让我女朋友去试一下。由于我的几个同学都是华为的,我对华为的印象也还不错,再加上华为应该可以给我女朋友更高一些的工资,于是我便让我女朋友去面试了。    经过近一个月的漫

python 遗传算法优化bp神经网络_利用遗传算法优化BP神经网络出现了一些问题,求大神解答...-程序员宅基地

文章浏览阅读1.6k次。本帖最后由 初学者er 于 2019-3-1 20:25 编辑总是出现错误:错误使用 network/subsasgn>network_subsasgn (line 550)net.IW{1,1} must be a 6-by-0 matrix.出错 network/subsasgn (line 10)net = network_subsasgn(net,subscripts,v,netna..._错误使用 network/subsasgn>network_subsasgn net.lw{2,1} must be a 53-by-6 mat

python编程特性_Python--核心编程特性-程序员宅基地

文章浏览阅读45次。1.模块导入问题如何导入模块:import sys如何查看该模块路径:prinnt(sys.path)2.== 与 is 的比较 返回Ture Flase"=="用来比较两个值是否相等"is"用来表示两个变量是否是同一个,比较的是内存地址(针对引用类型(list,tuper,dict)1 a=[1,2,3]2 b=[1,2,3]3 a==b4 aisb5 基本数据验证6 a=2567..._python编程2=a是对的吗

R语言:结构方程模型、潜变量分析-程序员宅基地

文章浏览阅读7.3k次,点赞5次,收藏43次。结构方程模型入门介绍对于熟悉线性回归拟合结构方程模型的分析师来说,首先会感到奇怪。在R环境中,拟合结构方程模型涉及学习新的建模语法,新的绘图语法以及通常是新的数据输入方法。然而,快速重新定位并且很快用户会接触到差异,拟合结构方程模型可以成为分析师工具箱中的强大工具。构造潜在变量比较替代模型对较大数据集的多组分析。设置 环境在R中开始使用结构方程建模(SEM)...

VSCode+clangd阅读linux内核源码_bear -- make-程序员宅基地

文章浏览阅读7.1k次,点赞9次,收藏69次。VSCode+clangd阅读linux内核源码_bear -- make

随便推点

Spark-shuffle源码细读一:ShuffleManager_sparksql shuffledrowrdd-程序员宅基地

文章浏览阅读1.4k次。version:spark 3.0.1ShuffleManager目前只有一个实现SortShuffleManager。分析其源码。_sparksql shuffledrowrdd

为何excel中数据无法计算机,造成Excel表格打不开的几种原因及解决办法-程序员宅基地

文章浏览阅读2.6k次。无法打开Excel表的原因是什么?如果无法打开Excel表怎么办?以下是导致Excel表无法打开的一些原因和解决方案。一、无法打开Excel表格的原因1、计算机中毒如果计算机中毒,则可能无法打开Excel电子表格文件。当然,如果计算机中毒了,则不仅可能无法打开Excel电子表格文件,而且也可能无法打开其他文件,并且还可能会影响不同类型病毒的影响。区别例如:如果是宏病毒,则应用宏后可能无法打开文件。..._数据模型问题导致无法打开工作簿

python是用matplotlib和seaborn.heatmap()绘制混淆矩阵_seaborn heatmap不显示值-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏7次。本文主要是对自己做实验需要绘制混淆矩阵从而做一个简单的记录。主要解决以下几个问题:矩阵数据以行为基准进行归一化;显示x轴、y轴的真实标签而不是数字;调整轴上标签字体的样式、字号、显示方向、对齐方式等;标签文字过长,默认画布无法显示完整。from sklearn.metrics import confusion_matriximport matplotlib.pyplot as pltimport numpy as npimport seaborn as snslabel_txt = _seaborn heatmap不显示值

Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建_vscode openocd stm32 jlink-程序员宅基地

文章浏览阅读753次,点赞7次,收藏9次。需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包,并添加环境变量。需要修改 Vscode 工程 .vscode 路径下的 launch.json 文件。对于 openocd,需要使用 Zadig 工具安装 Jlink 驱动。并将 mingw32-make.exe 名字改成 make.exe。对于 Mingw 的安装比较困难,国内的网无法正常下载组件,_vscode openocd stm32 jlink

MemCache超详细解读-程序员宅基地

文章浏览阅读367次。MemCache是什么MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。...

wps生成正态分布的随机数_如何用excel批量生成正态分布的随机数?-程序员宅基地

文章浏览阅读3.4k次。昨天的文章提到《如何不留痕迹做批量 "假"数据?》提到用rand函数批量生成随机数,这是最简单最快速的方法,但同时也有一个缺陷,就是rand函数生成的是均匀分布的随机数,在区间范围内会分布得比较均匀,不符合日常生活中数据的按照正态分布的特点,这样也就留下了明显的痕迹。比如我用rand函数生成0-100的100个随机数,用Minitab自动生成直方图,频数是下面这样的:大家可以看到,大致上每个区间分..._wps生成正态分布的随机数

推荐文章

热门文章

相关标签