简单介绍Java实时应用程序中的内存管理

孩子们世界很好

孩子们世界很好

2016-02-19 19:12

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是简单介绍Java实时应用程序中的内存管理,一起来学习了解下吧!

  垃圾收集是一个比较复杂的过程。通常,Java运行时会遍历堆,检查不再被其他对象引用、从而可以安全删除的对象,然而,由于垃圾收集占用CPU周期,所以它可能会影响应用程序代码的执行。即,假如在执行应用程序代码的过程中执行垃圾收集,则应用程序代码的响应时间可能延长。这会导致用户事务延迟的延长。更为糟糕的是,因为用户不知道何时会进行垃圾收集,因此延迟的延长是不可预知的。

  实时应用程序有严格的时间要求,即它们必须在确定的、已知的延迟条件下执行应用程序代码。因此垃圾收集所引起的不可预知的延迟延长就成为一个问题。

  那么这个问题的解决方案是什么呢?一个明显的解决方案就是不要对实时应用程序使用Java。这是一个下下选。作为一种编程语言和一个开发平台,Java具有许多优点。我们应该能够解决Java中的这个问题。

  另一种解决方案是在Java中使用另一种内存治理方法来代替垃圾收集程序。RTSJ (Real-Time Specification for Java)定义了immortal memory和scoped memory的概念。不朽内存(Immortal memory)是从不进行垃圾收集的内存,只要JVM存在,它就也存在。作用域内存(Scoped memory)则是按块分配和释放的内存。即,用户显式地创建一个内存区域来存放对象,该区域中的对象将在该区域被销毁时释放。不管是不朽内存还是作用域内存,都不需要进行垃圾收集。不过,这也有一个缺点:治理内存的重担又落在了用户身上,就像C/C++应用程序一样。这个代价仍然很高。有没有更好的方法呢?

  我们来重新考虑一下垃圾收集。垃圾收集的主要问题是它所引起的不可预知的延迟峰值。能否避免这种不可预知的行为呢?或者,能否限制(即约束)这种不可预知的行为呢?通过更频繁地执行垃圾收集,我们就可以限制最大延迟时间。这就是WLRT所采用的方法。因此,垃圾收集成为一项可预知的任务,具有已知的代价,从而使实时开发人员可以根据需要进行考虑和建模。而且,更为重要的是,我们没有牺牲Java的易用性。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

简单介绍Java实时应用程序中的内存管理

编程语言 网络编程
简单介绍Java实时应用程序中的内存管理

Java应用程序中创建图像

Java JAVA基础
Java应用程序中创建图像

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在 Java 应用程序中访问USB设备

Java JAVA基础
在 Java 应用程序中访问USB设备

在Java应用程序中访问USB设备

编程语言 网络编程
在Java应用程序中访问USB设备

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

简单介绍Java语言中内存管理的几个技巧

编程语言 网络编程
简单介绍Java语言中内存管理的几个技巧

Java进阶 Java应用程序中动态分配CPU资源

编程语言 网络编程
Java进阶 Java应用程序中动态分配CPU资源

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10怎么禁止插入U盘是自动播放

Win10怎么禁止插入U盘是自动播放

Win8怎么没有 F8 出现修复计算机功能?

Win8怎么没有 F8 出现修复计算机功能?
下拉加载更多内容 ↓