`
timerri
  • 浏览: 47131 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java也许需要栈对象和对象分组管理....

    博客分类:
  • java
阅读更多
GC是java的优点,但在某些情况下也会成为java的缺点,特别是在内存的使用与GC策略不相符的时候。这些时候,我们一般会采用池化或者其他可以避免完全使用GC策略的方法来解决问题。但是这类的解决方法一般代价都会比较大。我们需要考虑新的方案来提升GC在这方面的性能。

那么为什么不能用显式的释放方案呢?因为如果添加入显式的释放方法的话,那么就会迫使java所有的对象也需要添加上显式的释放方法(你总不会希望释放自己对象的时候,对象内部的基本对象不会随之释放吧)。这样既破坏了java的体系结构,也使java失去了不会出现空指针的优点。所以,GC还是必须GC,我们必须寻找更好的策略来解决GC的弱点。

在应用中,经常会出现一次性对象这样对象,这类对象的特点是初始化一次,使用一次,然后等待被GC释放。这样的对象对于GC来说会是沉重的负担。因为GC对于这样的对象也必须查找一次引用。如果这类对象数量巨大,GC的时间将会相当的长。

在C或者C++中,我们通常在这种情况下把结构或者对象本身存储在栈中(而java是只储存指针)。我很奇怪为什么java不也这样做。哪怕是专门分配一个heap给栈中创造的对象也是好的。这样我们就能够轻易的指定一个对象的生存期,也能大大降低GC的压力。

另外,我们是否能考虑一种能够分組控制对象的方法。对组内对象的引用计数一律记载入组而不是记载在对象内。仅当组引用为0时再一次性的清除掉组内所有。这样理论上就会大大减少GC需要查询引用的数量。

以上两种方案都必须修改编译器以及jvm的实现才能做到。所以现在实现的可能还是非常的低。不过我认为如果实现,将会大大改善java在高性能应用中的不足。

分享到:
评论
5 楼 Arbow 2008-11-06  
dennis_zane 写道
如果这样改,那你为什么不直接用cpp? C++ 0x都要引入GC了


据闻c++0x最新定下的草案取消了直接的GC支持

引用
Transparent garbage collection
C++0x will not feature transparent garbage collection directly. Instead, the C++0x standard will include features that will make it easier to implement garbage collection in C++.
Full garbage collection support has been remanded to a later version of the standard or a Technical Report.

http://en.wikipedia.org/wiki/C%2B%2B09#Transparent_garbage_collection


4 楼 gembler 2008-11-06  
关于java内存管理的问题,随着版本的变化也在不段地优化,更何况有一些更高效的jvm可选择。
3 楼 rehte 2008-11-06  
JVM在Java 7中据说将加入内存逃逸分析,对于非逃逸行对象采用运行栈分配的方法。
比如:
void doSomething(){
    A a = new A();
    a.doOtherthing();    
}

这个方法产生的对象a是非逃逸的,Java 7的虚拟机可以检测这种对象的生成,将new A的对象放在运行时栈上产生。这种方法有很大的好处,开发人员不需要显示的声明某个对象是栈式分配,和以前的编程方式没有任何区别,又大大提升了内存管理效率。
2 楼 timerri 2008-11-06  
cpp和java,我一般都是混用的...呵呵
谁叫java能力弱呢
1 楼 dennis_zane 2008-11-06  
如果这样改,那你为什么不直接用cpp? C++ 0x都要引入GC了

相关推荐

    vue+Java 实现附件分组下载压缩包(csdn)————程序.pdf

    在本文中,我们将探讨如何使用Vue.js前端框架和Java后端服务来实现一个功能...这种功能的实现需要对前端和后端的技术栈有深入的理解,包括Vue.js的API、HTTP请求、Blob对象、FileReader以及Java的文件处理和HTTP响应。

    NiagaraAX开发者向导-docDeveloperPDF

    直接链接和间接链接 ................... .. 36 链接激活(Activation) ............................ 36 执行(Execution) ..... 37 概览..... 37 运行状态(Running state) ...................... 37 链接...

    模拟手机通信录管理系统JAVA

    【标题】"模拟手机通信录管理系统JAVA"是一个基于Java编程语言开发的学生课程设计项目,旨在构建一个能够管理和操作联系人信息的系统,类似于手机中的通讯录应用。通过这个系统,用户可以实现添加、编辑、删除联系人...

    java web权限管理系统

    1. 资源管理:定义和管理系统的各种资源,如菜单、接口、文件等,并设定其访问规则。 2. 人员管理:创建和管理用户账户,分配给用户特定的角色。 3. 角色管理:定义角色,赋予角色不同的资源访问权限。 4. 部门管理...

    的Java工程师面试题.doc

    2. 堆和栈:堆和栈是两种不同的内存空间,堆用来存储对象,栈用来存储方法的调用信息。 3. 排序算法:快速排序是最快的排序算法,可以用于排序大规模的数据。例如,给阿里2万多名员工按年龄排序,可以使用快速排序...

    java权限管理系统(简单)

    总结,这个“java权限管理系统(简单)”项目是一个实践性的教学示例,它展示了如何使用Java技术栈来实现基本的权限管理功能。通过学习和理解这个系统,开发者可以加深对Struts、Hibernate、Spring这三大框架的运用...

    Java包的作用

    总之,Java包的使用是Java编程中的一个重要方面,它不仅有助于代码的组织和管理,还可以提高程序的安全性和可维护性。通过合理利用Java提供的各种包,开发者可以更加高效地开发出高质量的应用程序。

    java面试题分享.zip

    7. **线程**:理解并发和并行,知道如何创建和管理线程,熟悉synchronized关键字和ThreadLocal类。 8. **反射机制**:了解Class类,动态加载类,以及调用私有方法和构造器的能力。 9. **I/O流**:掌握文件读写,网络...

    基于Java+ssm的试题库管理系统.zip

    【标题】:“基于Java+SSM的试题库管理系统”是一个典型的Web应用开发项目,它结合了Spring、SpringMVC和MyBatis三个框架,用于构建高效、稳定的在线考试平台。 【描述】:这个系统旨在实现对试题的创建、管理、...

    java笔记 java笔记

    Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。Java的设计理念是“一次编写,到处运行”,这意味着编写的Java程序可以在任何安装了Java虚拟机(JVM)的设备上运行。 #### ...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    java语言编写研究生管理系统

    在这个系统中,Java语言作为主要的开发工具,利用其强大的面向对象特性和丰富的类库,实现了对研究生招生信息的有效管理和高效处理。 首先,让我们关注系统的数据库部分。在研究生管理系统中,数据库扮演了至关重要...

    手机通讯录管理系统.rar

    通过学习和分析其源代码,我们可以深入理解Java语言特性和面向对象编程的思想,同时掌握数据库操作、GUI设计以及文件处理等实用技能。对于进一步的改进,开发者还可以考虑引入更多的功能,比如联系人分组、联系人...

    java面试题汇总.rar

    此外,深入理解Java内存管理,包括堆和栈内存,以及垃圾回收机制,也是面试中常见的问题。 其次,扩展知识部分涵盖Java集合框架,如ArrayList、LinkedList、HashMap、HashSet等数据结构及其适用场景。熟悉并发编程...

    JAVA编程常用英文单词汇总.doc

    5. **Collection**: 集合 — 存储和管理一组对象的容器。 6. **ArrayList**: (数组列表)表示动态数组 — 动态调整大小的数组。 7. **HashMap**: 散列表,哈希表 — 使用哈希算法存储和检索数据的集合。 8. **Swing**...

    java 数据库

    11. Visual FoxPro数据库文件:它包含了用户数据和系统信息,可以是存放用户数据的文件,也可以是管理数据库对象的系统文件。 12. 修改表结构:在SQL中,修改表结构的命令是ALTER TABLE。 13. 分组报表索引表达式...

    sql面试题,java面试题

    在IT行业中,SQL和Java是两个非常重要的编程语言和技术,特别是在数据库管理和后端开发领域。本文将深入探讨这两个领域的核心面试知识点,帮助你为即将到来的面试做好充分准备。 首先,让我们关注SQL面试题。SQL...

    java秋招面试资源

    在准备Java秋招面试时,你需要对多个领域有深入的理解,包括Java编程基础、操作系统原理、计算机网络知识以及数据库管理。下面将详细阐述这些领域的关键知识点。 首先,让我们来看看Java面试的核心内容。Java是一种...

    基于java+swing+mysql田径运动会管理系统-数据库课设报告.pdf

    MySQL作为后端数据库管理系统,用于存储和管理数据。具体实现方式如下: 1. **Java+Swing**:Java作为一种广泛使用的面向对象编程语言,其强大的功能和丰富的类库非常适合开发此类应用。Swing则是Java提供的图形...

Global site tag (gtag.js) - Google Analytics