如题

解决方案 »

  1.   

    对于Java的用户来说,这个问题没有意义.堆,JVM的堆是对象的内存空间的来源.
    栈,分配了变量的空间,.Java应该没有所谓的代码区的,它的代码就是ByteCode是被JVM动态加载到内存中的,这块内存不像C/C++程序有个明确的代码区.
    并且这个代码区,你没有手段去显式的操作它,ClassLoader默默地完成了,即便是你自己派生的也如此.
    而对于C/C++程序来说,代码区的内存不可写,数据区的数据不可以作为代码执行,有助于保护系统安全,简单的缓冲区溢出攻击就可以被避免.
    在Vista系统上这是一个原则了, 在Windows XP和Linux上还不是.
    简单的BufferOverflow攻击教程可以到我这里下载.如果想了解更多的,看JVM和ByteCode的spec, 相关的还有ASM等技术. 不过我基本不碰这些东西.
      

  2.   

    不能做
    JAVA所有的分配都在堆上,只在饯上留引用
    JAVA的内存分配也是由JVM处理的,你碰不到
      

  3.   

    我就是因为逃避这些问题才学习Java的老大。。
      

  4.   

    开始的时候我也在逃避,我甚至常常摇摆与是学Java还是学C#这种问题上,摆来摆去,结果连C++都学会了。
      

  5.   

    用Java就别考虑内存,那不是Java专注的地方...啊,4楼真强大...让我也摇摆起来吧...
      

  6.   

    java里堆的分配参数很多,但控制堆的总大小的是-Xms -Xmx,其余的一些堆参数是控制堆内部的分配。控制java线程栈的参数是-Xss用来指定每个线程占用的栈空间大小。java的代码其实存放在内存的永久区里,可以用-XX:PermSize来指定。如果真要搞清楚这些参数真正的含义及影响可以用很长的文章来写。需要关注不同的垃圾收集算法,比如现在java对堆的管理往往不是用一种垃圾收集算法,而是各种算法的一个结合体我看上面有很多空地java的内存认识上存在误区,往往在应用发布到生产环境前为了达到最佳的性能及最高的内存利用率,我们都会通过性能测试的方法来调整这些内存参数。这些内存参数可时也用来解决java进程的内存溢出问题。