百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗

yuyutoo 2024-10-23 16:41 1 浏览 0 评论

目录:

[干货] JAVA - JVM - 1 JVM一套带走

[干货] JAVA - JVM - 2 内存两分

[干货] JAVA - JVM - 3 字符串常量池

[干货] JAVA - JVM - 4 类加载

[干货] JAVA - JVM - 9 内存回收

[干货] JAVA - JVM - 10 内存回收-跟搜索算法

[干货] JAVA - JVM - 11 内存回收-回收策略

[干货] JAVA - JVM - 12 内存回收-跟搜索算法的 HotSpot 实现

[干货] JAVA - JVM - 13 内存回收-HotSopt 的分代策略和收集器

[干货] JAVA - JVM - 14 内存并发- JMM Volatile CAS

[干货] JAVA - JVM - 15 内存并发-Synchronize wait notify


jvm 中内存分两部分,堆外和堆(这里是泛指)。

NativeMemory

名字很多,堆外内存,本地内存,C Heap,直接内存都是它。

  • 管理java heap的状态数据(用于GC);
  • JNI调用,也就是Native Stack;
  • JIT(即时编译器)编译时使用Native Memory,并且JIT的输入(Java字节码)和输出(可执行代码)也都是保存在Native Memory;
  • NIO direct buffer。对于IBM JVM和Hotspot,都可以通过-XX:MaxDirectMemorySize来设置nio直接缓冲区的最大值。默认是64M。超过这个时,会按照32M自动增大。

这里提一句直接内存的释放,释放时只能通过释放直接内存的引用来间接释放。

Heap & Stack

通常大家理解的堆栈。容我dao个图:

每个线程独自使用。

栈内部的部分看图自明,But:HotSpot 中没有本地方法栈,和 JavaStack 在一起。

所有线程共同使用。

堆内部的具体分代结构,后边到回收部分再说。

方法区

名字很多,各种资料中的名字不大相同,大概有这些:方法区、持久区、Method Area 等。

1 Class 元数据和 Class 常量池

各种资料说的很乱(原谅我实在是看不懂 JVM 的源码~~,嗯.... 其实是犯懒,这玩意还用看源码?用用就知道了。),根据我的理解,这俩个东西其实是同一个,本人之后的所有博文有可能不固定的称呼,请诸公理解。

包含两部分:

所有的Literal:字符串、8中基本类型的值、final 的常量

所有的Symbolic References:类的全限定名、字段名称和描述符、方法名称和描述符(包含 public void 和 parameter type,parameter name 在 java8 中也可以放到方法区,那时候就不叫方法区了,叫 MetaSpace,关于变化稍后容禀)。

另外:有人会有疑问,static 的在什么地方?其实这和上边的不冲突,就看是否有 final,如果是 final 的,也是 Literal,如果没有,也是可以赋值的,在 Heap 中。个人见解,欢迎拍砖。

2 String Constant Pool 字符串常量池

zhei 东西不是每个类特有,是所有的类共有。

话说有个 StringTable 是个Map(PS:老程序员喜欢把什么什么 Map 称之为什么什么 Table,比如我~~),初始默认1009,MLGDD。说来话长,赶明我单写一章,或者有想琢磨的可以 google String.intern()。

Java6 中的方法区

  • Class 元数据
  • String Constant Pool 字符串常量池

Java7 中的方法区

String Constant Pool 字符串常量池 从方法区转移到 Java Heap 中。

Java8 中的方法区

删除方法区,新增 MetaSpace

Literal字面量移动到 Java Heap

Symbolic References 移动到 Native Memory

MaxMetaspaceSize 参数调整大小,也可以不指定,如果不指定,jvm 会动态调整。


欢迎拍砖,决绝骂娘

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: