当前位置: 首页 > news >正文

西安做网站的公司维护软件产品设计流程

西安做网站的公司维护,软件产品设计流程,代运营公司需要什么资质,网站建设进度图Java 与JNI 内存管理是怎样的想要弄清楚Java与JNI的内存管理的关系#xff0c;首先要弄清楚JVM的内存模型JVM内存模型.png其中本地方法栈就是运行时调用native 方法的数据保存区。本地方法栈的大小可以设置成固定的或者是动态扩展。Java中的内存泄露JAVA 编程中的内存泄漏首先要弄清楚JVM的内存模型JVM内存模型.png其中本地方法栈就是运行时调用native 方法的数据保存区。本地方法栈的大小可以设置成固定的或者是动态扩展。Java中的内存泄露JAVA 编程中的内存泄漏从泄漏的内存位置角度可以分为两种JVM 中 Java Heap 的内存泄漏JVM 内存中 native memory 的内存泄漏。Java Heap 的内存泄漏Java 对象存储在 JVM 进程空间中的 Java Heap 中Java Heap 可以在 JVM 运行过程中动态变化。如果 Java 对象越来越多占据 Java Heap 的空间也越来越大JVM 会在运行时扩充 Java Heap 的容量。如果 Java Heap 容量扩充到上限并且在 GC 后仍然没有足够空间分配新的 Java 对象便会抛出 out of memory 异常导致 JVM 进程崩溃。Java Heap 中 out of memory 异常的出现有两种原因①程序过于庞大致使过多 Java 对象的同时存在②程序编写的错误导致 Java Heap 内存泄漏。多种原因可能导致 Java Heap 内存泄漏。JNI 编程错误也可能导致 Java Heap 的内存泄漏。JVM 中 native memory 的内存泄漏JVM 进程空间中Java Heap 以外的内存空间称为 JVM 的 native memory。进程的很多资源都是存储在 JVM 的 native memory 中例如载入的代码映像线程的堆栈线程的管理控制块JVM 的静态数据、全局数据等等。也包括 JNI 程序中 native code 分配到的资源。JNI编程中的内存泄露Native Code 本身的内存泄漏Global Reference 引入的内存泄漏JNI 编程中潜在的内存泄漏特别是LocalReference的使用哪些情况下需要做内存管理native code本身需要做内存管理如使用c/c语言编写需要遵守语言本身的内存管理策略如指针变量的创建于释放不当都可能产生内存泄露进一步导致内存JVM的崩溃。Global Reference的管理而 Global Reference 对 Java 对象的引用一直有效因此它们引用的 Java 对象会一直存在 Java Heap 中。在使用 Global Reference 时需要仔细维护对 Global Reference 的使用。如果一定要使用 Global Reference务必确保在不用的时候删除。就像在 C 语言中调用 malloc() 动态分配一块内存之后调用 free() 释放一样。否则Global Reference 引用的 Java 对象将永远停留在 Java Heap 中造成 Java Heap 的内存泄漏。Local Reference的管理Local Reference管理模型图localReference_Java_map.jpg从这个映射关系表可以看出实际上每当线程从 Java 环境切换到 native code 上下文时(J2N)JVM 会分配一块内存创建一个 Local Reference 表这个表用来存放本次 native method 执行中创建的所有的 Local Reference。每当在 native code 中引用到一个 Java 对象时JVM 就会在这个表中创建一个 Local Reference运行 native method 的线程的堆栈记录着 Local Reference 表的内存位置(指针 p)Local Reference 表中存放 JNI Local Reference实现 Local Reference 到 Java 对象的映射。native method 代码间接访问 Java 对象(java obj1java obj2)。通过指针 p 定位相应的 Local Reference 的位置然后通过相应的 Local Reference 映射到 Java 对象。当 native method 引用一个 Java 对象时会在 Local Reference 表中创建一个新 Local Reference。在 Local Reference 结构中写入内容实现 Local Reference 到 Java 对象的映射。native method 调用 DeleteLocalRef() 释放某个 JNI Local Reference 时首先通过指针 p 定位相应的 Local Reference 在 Local Ref 表中的位置然后从 Local Ref 表中删除该 Local Reference也就取消了对相应 Java 对象的引用(Ref count 减 1)。当越来越多的 Local Reference 被创建这些 Local Reference 会在 Local Ref 表中占据越来越多内存。当 Local Reference 太多以至于 Local Ref 表的空间被用光JVM 会抛出异常从而导致 JVM 的崩溃。Local Reference 不是native code的局部变量区别体现在局部变量存储在线程堆栈中而 Local Reference 存储在 Local Ref 表中。局部变量在函数退栈后被删除而 Local Reference 在调用 DeleteLocalRef() 后才会从 Local Ref 表中删除并且失效或者在整个 Native Method 执行结束后被删除。可以在代码中直接访问局部变量而 Local Reference 的内容无法在代码中直接访问必须通过 JNI function 间接访问。JNI function 实现了对 Local Reference 的间接访问JNI function 的内部实现依赖于具体 JVM。具体关于JNI内存泄露的实例分析可以参考IBM开发者社区的一篇文章在 JNI 编程中避免内存泄漏
http://www.yutouwan.com/news/298050/

相关文章:

  • 邢台做移动网站家装设计网站开发
  • 做网站没有签合同可以退款吗广东哪里有网站建设
  • 外贸型网站建设公司学做网站论坛插件
  • 想自己搞一个视频网站怎么做深圳官方网站制作
  • 网站公司 模板温州微网站公司
  • dedecms网站地图修改品牌网站建设新闻
  • 营销手机网站论坛网站论坛网站建设建设
  • 在什么网站上做外贸网站出现的问题
  • 阿里网站注册tp做网站
  • 河南省建设部网站官网腾讯云域名注册步骤
  • 全网型网站建设方案建设部建造师强制注销网站
  • asp技术做网站做外贸要建什么网站
  • 家具网站模板商品网站建设
  • 个人备案网站可以做淘宝客it网站开发
  • 什么是网站的二级目录2022年度关键词
  • 做网站的设计流程怎么给公司网站上放视频
  • 昌平石家庄网站建设传媒公司起名
  • 做外贸兼职的网站有哪些外包一个企业网站多少钱
  • vs2017js网站开发方法胶州国际网站建设效果
  • wordpress 机械 主题郑州做网站优化外包
  • g4560做网站服务器wordpress 4.5 漏洞
  • 国内建网站多少钱广东省建设信息中心官网
  • 网站建设实习招聘网站建设功能设计
  • 超链接到网站怎么做手机商城下载
  • 有机玻璃东莞网站建设技术支持建站与备案的具体流程是什么
  • 天津做网站公司官方网站推广策划
  • 儿童教育自适应网站模板wordpress分类目录进不去
  • 海南网站建设fwlitwordpress编写文章
  • 南宁百度网站推广公众号怎么做链接
  • 包装在线设计网站保定定兴网站建设