java虚拟机之内存分配

Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 内存中对象的分配与回收。

JDK1.8之前的堆内存示意图:

从上图可以看出堆内存分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survivor1 区+Survivor2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。

1.对象优先在eden区分配

目前主流的垃圾收集器都会采用分代回收算法,因此需要将堆内存分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。

大多数情况下,对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC.下面我们来进行实际测试以下。

在测试之前我们先来看看 Minor GC和Full GC 有什么不同呢?

  • 新生代GC(Minor GC):指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。
  • 老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC经常会伴随至少一次的Minor GC(并非绝对),Major GC的速度一般会比Minor GC的慢10倍以上。

2.大对象直接进入老年代

大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。

为什么要这样呢?

为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。

3.长期存活的对象将进入老年代 

既然虚拟机采用了分代收集的思想来管理内存,那么内存回收时就必须能识别哪些对象应放在新生代,哪些对象应放在老年代中。为了做到这一点,虚拟机给每个对象一个对象年龄(Age)计数器。如果对象在 Eden 出生并经过第一次 Minor GC 后仍然能够存活,并且能被 Survivor 容纳的话,将被移动到 Survivor 空间中,并将对象年龄设为1.对象在 Survivor 中每熬过一次 MinorGC,年龄就增加1岁,当它的年龄增加到一定程度(默认为15岁),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。

4 动态对象年龄判定

为了更好的适应不同程序的内存情况,虚拟机不是永远要求对象年龄必须达到了某个值才能进入老年代,如果 Survivor 空间中相同年龄所有对象大小的总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无需达到要求的年龄。

 

转载于:https://www.cnblogs.com/Dream-chasingGirl/p/10351575.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知道无人驾驶的网络安全有多重要吗?英国政府都决定插手开发了

这样的策略也被解读为,英国政府希望借此抢占未来无人驾驶汽车研发的先机。 相信看过下午我们有关速8中黑科技的文章的朋友们,一定对有关车辆网络安全印象深刻,也足以见得未来无人驾驶时代的网络安全问题有多重要。所以,英国政府决…

linux uniq命令_如何在Linux上使用uniq命令

linux uniq命令Fatmawati Achmad Zaenuri/ShutterstockFatmawati Achmad Zaenuri / ShutterstockThe Linux uniq command whips through your text files looking for unique or duplicate lines. In this guide, we cover its versatility and features, as well as how you c…

解决 display 和 transition 冲突的问题

问题: 既需要“显示、隐藏”’效果,也需要动画效果。此时使用了xxx.style.display "none / block" 之后,我们发现 transition 动画效果就没有了。 解决办法一:用定时器(这种方法并不好) btn2.on…

win10任务栏和开始菜单_如何将网站固定到Windows 10任务栏或开始菜单

win10任务栏和开始菜单Having quick access to frequently-used or hard to remember websites can save you time and frustration. Whether you use Chrome, Firefox, or Edge, you can add a shortcut to any site right to your Windows 10 taskbar or Start menu. 快速访问…

智能家居的尴尬:概念比用户火

智能家居概念的走俏与用户的接受程度成鲜明的对比,如何才能撬开这个市场,这是整个行业都需要思考的问题。 追溯起源,智能家居已经有20年的历史,但由于技术缺陷、价格昂贵,实用性差、安装复杂及产品同质化严重等原因&a…

WEB_矛盾

题目链接:http://123.206.87.240:8002/get/index1.php 题解: 打开题目,看题目信息,本题首先要弄清楚 is_numeric() 函数的作用 作用如下图: 即想要输出flag,num既不能是数字字符,不能为数1&…

如何在Windows上解决蓝牙问题

Bluetooth gives you the freedom to move without a tether, but it isn’t always the most reliable way to use wireless devices. If you’re having trouble with Bluetooth on your Windows machine, you can follow the steps below to troubleshoot it. 蓝牙使您可以不…

Multicast注册中心

1234提供方启动时广播自己的地址。   消费方启动时广播订阅请求。   提供方收到订阅请求时&#xff0c;单播自己的地址给订阅者&#xff0c;如果设置了unicastfalse&#xff0c;则广播给订阅者。   消费方收到提供方地址时&#xff0c;连接该地址进行RPC调用。 <du…

阻止a链接跳转方法总结

总结下a标签阻止默认行为的几种简单方法(1) <a href"javascript:void(0);" > 点我 </a> onclick方法负责执行js函数&#xff0c;而void是一个操作符&#xff0c;void(0)返回undefined&#xff0c;地址不发生跳转。 <a href"javascript:;&qu…

美味奇缘_轻松访问和管理您的美味书签

美味奇缘Looking for an easy way to access and manage your Delicious Bookmarks collection with minimal UI impact? Now you can with SimpleDelicious for Firefox. 是否正在寻找一种简单的方法来访问和管理您的Delicious Bookmarks收藏&#xff0c;而对UI的影响最小&am…

谈谈如何使用Netty开发实现高性能的RPC服务器

RPC&#xff08;Remote Procedure Call Protocol&#xff09;远程过程调用协议&#xff0c;它是一种通过网络&#xff0c;从远程计算机程序上请求服务&#xff0c;而不必了解底层网络技术的协议。说的再直白一点&#xff0c;就是客户端在不必知道调用细节的前提之下&#xff0c…

寒假万恶之源3:抓老鼠啊~亏了还是赚了?

1.代码&#xff1a; #include<iostream>using namespace std;int main(){ char a/*操作*/; int i/*计数工具*/,b0/*老鼠会开心几天*/; int e/*正常的来*/,f/*老鼠会悲伤几天*/; int c1/*老鼠来不来*/,d0/*奶酪数目*/,g0/*老鼠数目*/; for (i1;;i) { …

在Firefox中结合Wolfram Alpha和Google搜索结果

Do you wish there was a way to combine all that Wolfram Alpha and Google goodness together when you search for something? Now you can with the Wolfram Alpha Google extension for Firefox. 您是否希望有一种方法可以在搜索某些内容时将Wolfram Alpha和Google的所有…

Docker容器中开始.NETCore之路

一、引言  开始写这篇博客前&#xff0c;已经尝试练习过好多次Docker环境安装,.Net Core环境安装了&#xff0c;在这里替腾讯云做一个推广,假如我们想学习、练手.net core 或是Docker却苦于没有开发环境&#xff0c;服务器也不想买&#xff0c;那么我们可以使用腾讯云提供的开…

分布式的数据一致性

一.前序 数据的一致性和系统的性能是每个分布式系统都需要考虑和权衡的问题。一致性的级别如下&#xff1a;1.强一致性这种一致性级别是最符合用户直觉的&#xff0c;它要求系统写入什么&#xff0c;读出来的也会是什么&#xff0c;用户体验好&#xff0c;但实现起来往往对系统…

kompozer如何启动_使用KompoZer创建网站

kompozer如何启动Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在寻找一种轻松创建自己的网页的方法&#…

我也说说宏定义likely()和unlikely()

作者&#xff1a;gfree.windgmail.com 博客&#xff1a;blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.windgmail.com所有&#xff0c;使用GPL发布&#xff0c;可以自由拷贝&#xff0c;转载。但转载请保持文档的完整性&#xff0c;注明原作者及…

图片懒加载与预加载

预加载 常用的是new Image();&#xff0c;设置其src来实现预载&#xff0c;再使用onload方法回调预载完成事件。function loadImage(url, callback) {var img new Image(); //创建一个Image对象&#xff0c;实现图片的预下载img.src url;if (img.complete){ // 如果图片已经存…

电脑pin重置_如果忘记了如何重置Windows PIN

电脑pin重置A good password or PIN is difficult to crack but can be difficult to remember. If you forgot or lost your Windows login PIN, you won’t be able to retrieve it, but you can change it. Here’s how. 好的密码或PIN很难破解&#xff0c;但很难记住。 如果…

android.support不统一的问题

今天supprt28遇到的问题&#xff0c;由于28还是预览版&#xff0c;还存在一些bug 都是因为如果程序内出现不同的&#xff0c;support或者其他外部引用库的多个版本&#xff0c;Gradle在进行合并的时候会使用本地持有的&#xff0c;最高版本的来进行编译&#xff0c;所以25的sup…