`

对于规范和实现,你会混淆吗?

    博客分类:
  • java
阅读更多

昨晚和朋友聊天,喝了点咖啡,由于我经常喝茶,很长时间没喝咖啡了,所以失眠了,于是起床读JVM规范,读完后在朋友圈发了一条信息:

JVM Run-Time Data Areas:The Java Virtual Machine defines various run-time data areas that are used during execution of a program. Some of these data areas are created on Java Virtual Machine start-up and are destroyed only when the Java Virtual Machine exits. Other data areas are per thread. Per-thread data areas are created when a thread is created and destroyed when the thread exits. http://url.cn/eyfKNQ

早上起床后发现了一个朋友的回复:

川哥,一直有一个疑问。之前了解到Java内存对于堆内存分为新生代,老年带,永久带,而常量池和字节码文件归属于永久带内存,这里为啥又属于方法区了~对于Java内存分为堆和非堆又是以什么维度划分的

我的回复如下:

你之前的了解没有错,"permanent generation"(永久带)是JVM规范的实现之一(即HotSpot)的概念,“Method Area”(方法区)是JVM规范中的概念,在JVM规范中明确指出:方法区逻辑上是堆的一部分,规范没有强制指定方法区在内存中的位置(参见规范2.5.4节描述: Although the method area is logically part of the heap, simple implementations may choose not to either garbage collect or compact it. This specification does not mandate the location of the method area or the policies used to manage compiled code.)在最新的HotSpot中,已经移除了"permanent generation":The Permanent Generation (PermGen) space has been replaced by a new space called Metaspace. 至于如何区分堆(heap)和非堆(non heap),我认为需要把握堆的定义,一开始说堆是用于存储类实例(class instances )和数组(arrays),后来又说方法区(Method Area)逻辑上也是堆的一部分,当然,除了这两部分,其他的都是非堆(non heap)了(参见规范2.5.3节描述:The heap is the run-time data area from which memory for all class instances and arrays is allocated.)

有不同想法或疑惑的同学欢迎一起讨论!

 

 

 

 

 

2
1
分享到:
评论

相关推荐

    android实现一键反混淆

    在Android开发过程中,为了保护应用的安全性和代码的私密性,开发者通常会使用混淆工具(如ProGuard或R8)对APK进行混淆,混淆后的代码难以阅读和理解,但这也给调试和后期维护带来了困难。当我们需要查看混淆后的...

    .net 反混淆工具

    反混淆工具通过识别和反转混淆策略来实现其功能,例如,将乱码的类名和方法名还原为有意义的标识符,修复被篡改的控制流,以便于分析人员理解和调试代码。 反混淆可能涉及到以下步骤: 1. **元数据解析**:读取.NET...

    一种基于源代码的Java代码混淆器的设计与实现.pdf

    2. 混淆器的系统结构设计:为了对源代码进行加密,生成晦涩难懂且能通过javac编译的Java源文件,混淆器系统结构设计的关键在于源代码混淆的设计和实现方法。系统主要由规范化处理模块、词法分析器、语法分析器、词法...

    Java标识符重命名混淆算法及其实现.pdf

    【Java标识符重命名混淆算法】是针对Java代码混淆的一种技术,主要目的是增强代码的不可读性和抗逆向工程能力,以保护软件知识产权和保密信息。这种混淆技术并不改变程序原有的功能,只是使得代码难以理解和解析。 ...

    JS和CSS压缩混淆 JsCompressor

    JsCompressor是一款用于实现这一目标的工具,它可以帮助开发者对JavaScript和CSS文件进行压缩和混淆,从而提升网页的加载速度和安全性。 JavaScript(JS)是网页动态功能的核心,而CSS则负责页面的样式和布局。然而...

    接口和抽象类的区别_--相信你看完不会再混淆了

    不同的观察者可能会根据不同的需求定义不同的接口,正如例子中提到的,动物学家可能会定义`IAnimal`接口,而遗传学家可能会定义`IDescendable`接口。这反映了接口作为一种工具,可以帮助我们从不同的角度理解世界。 ...

    国密算法工具源码和国密算法实现规范

    本资源提供了国密算法的工具源码和实现规范,对于理解和应用国密算法具有重要价值。 首先,我们来详细了解一下这些国密算法: 1. SM2算法:这是一种基于椭圆曲线密码学(ECC)的公钥加密算法,主要用于非对称加密...

    Web项目借助Proguard混淆说明.docx

    同时,该项目还实现了xml、jsp、js、class文件的混淆。 三、软件总体设计 ----------------- ### 2.1 系统组成 “Web 混淆项目”系统由两部分组成:软件系统和硬件系统。软件系统采用java运行环境,而硬件系统...

    Api设计规范

    1. 把抽象接口和具体实现放入不同的包,避免混淆。 2. 把 API 放进上层包,而把具体实现放进下层包,保持层次结构。 3. 考虑把一组大型的 API 分拆进不同的包,以避免混乱。 4. 考虑把 API 和实现打包进不同的 jar ...

    华为C/C++编码规范

    通过遵循华为的C/C++编码规范,程序员可以编写出更易于理解、维护和扩展的代码,这对于个人职业发展和团队协作都至关重要。无论你是初入编程殿堂的新手,还是经验丰富的老兵,理解并实践这些规范都将使你的代码更具...

    数据结构 编程规范和范例

    《数据结构编程规范和范例》 编程规范是软件开发中的基石,它旨在提升代码的可读性、可维护性和团队协作效率。本规范详细涵盖了多个方面,包括排版、注释、标识符命名、可读性等,旨在提供一套完整的编程准则。 1....

    谷歌C++编码规范

    谷歌C++编码规范是一套详细的编程规范,由谷歌公司制定,旨在统一和提高C++代码的质量和可读性。该编码规范被认为是业内公认的最佳实践之一,广泛适用于C++开发者,特别是在大型项目中,遵循这些规范可以帮助减少...

    阿里Java开发编程规范word版

    对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用`Impl`的后缀与接口区别。 2. 如果是形容能力的接口名称,取对应的形容词做接口名(通常是`-able`的形式)。 - **正例**:`...

    Java web开发规范

    - **页面开发规范**:详细规定了不同类型的页面(如新增、修改、查看、删除操作以及列表展示等)的技术要求和实现方式,确保用户体验和功能的统一。 5. **页面开发规范**: - **新增页面**:要求提供清晰的用户...

    ASPICE软件需求规范文档模板

    * 术语与缩写:了解基本术语和缩写的定义,避免误解和混淆。 * 参考文献:了解相关的参考文献,了解软件需求规范的依据和参考资料。 二、约束 / Context and Constraint * 产品概述:了解整体软件系统的架构组成,...

    Google+C+++编程规范.pdf

    Google 的 C++ 编程规范对类的设计和实现提出了明确的要求。 * 构造函数(Constructor):构造函数的职责是初始化对象,需要遵守明确的命名规则。 * 默认构造函数(DefaultConstructors):默认构造函数是类的特殊...

    \系统软件编制规范(PB).doc

    - **编写目的**:制定规范的主要目标是统一软件的外观和感觉,如界面设计,以及确立一套通用的命名规则,以便于团队成员理解代码并减少潜在的混淆。这也有助于确保软件的长期维护和升级。 2. **设计规范**: - **...

    云平台UI统一设计规范

    规范会定义列数、间距和单元格大小,以实现灵活且响应式的布局。 6. **交互设计**:包括按钮、开关、表单、滑块等组件的交互模式,以及反馈机制(如提示信息、加载动画)的设计指导。这些应遵循用户习惯,减少学习...

Global site tag (gtag.js) - Google Analytics