- 浏览: 253566 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
绝大数情况下(不知道还有哪些情况),java程序(方法、变量、对象)驻留在内存中的栈和堆上。
栈(堆栈):驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。
创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。
堆:一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
总结:
1.对象在堆上
2.局部变量在栈上
//以上是转载
//个人分析
3.每个线程都有自己的常量池(int pool,string pool,char pool)
栈(堆栈):驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。
创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一限制无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。
堆:一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
总结:
1.对象在堆上
2.局部变量在栈上
//以上是转载
//个人分析
3.每个线程都有自己的常量池(int pool,string pool,char pool)
发表评论
-
servletcontext 的获取
2013-05-12 20:10 477容器在初始化servlet时,会为其注入servletconf ... -
取得下一个sequence。 getNextInterval
2013-03-15 11:47 9391. 初始sequence值放置于数据库。 2. 启动时产 ... -
java 脚本,编译与注解处理
2013-02-05 10:04 8511.java中支持脚本调用 通过脚本引擎来执行。 Obj ... -
java 安全管理器
2013-02-04 11:24 8301.在java语言实现中,扩展和系统加载器都是java实现的, ... -
RMI 底层实现
2013-01-28 16:43 9141. server端代码: Registry regist ... -
Java获取当前路径
2013-01-22 18:12 896无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 ... -
java1.5 新特性
2013-01-10 16:50 764"JDK1.5"的一个重要主题就是通过新增 ... -
import static静态导入
2013-01-10 12:12 848import static静态导入是JDK1.5中的新特性。一 ... -
类加载器加载的类的访问权限问题
2013-01-04 15:34 10521.父加载器加载的类不能访问子加载器加载的类。 (向下可见性) ... -
java 内部类总结
2012-12-28 12:31 745主要从分类和使用情境来看 1. 普通内部类。 位置: 在 ... -
java构造函数和静态变量的执行顺序
2012-12-18 11:18 1034java初始化顺序 1在new B一个实例时首先要进行类的装载 ... -
Java多线程之Condition接口的实现
2012-11-26 17:03 937在实际中一个lock可产生多个Condition对象。个人认为 ... -
java线程同步原理(lock,synchronized)
2012-11-26 14:26 998一。 java线程同步原理 java会为每个object对象分 ... -
总结下java中abstract,interface,final,static,加深理解
2012-11-16 17:16 888一,抽象类:abstract 1,只要有一个或一个 ... -
为什么interface的变量必须是public final static的
2012-11-16 17:15 1017public 感觉是因为Java对接口的要求是所有类都可以实现 ... -
stack在排序的应用
2012-10-22 17:04 718对于list, 可用Collections的静态方法 Coll ... -
随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer
2012-09-25 14:59 1574RandomAccessFile RandomAccessF ... -
Java 服务器端支持断点续传的源代码
2012-09-25 14:44 4037Java 服务器端支持断点续传的源代码【支持快车、迅雷】(仅支 ... -
new File(String parent,String child)
2012-08-22 23:00 1169//user_dir:E:\workspace\javates ... -
System.getProperty
2012-08-22 22:07 913System.getProperty(String name) ...
相关推荐
- **Java内存模型**:包括堆内存、栈内存、方法区、本地方法栈和程序计数器等部分。 - **垃圾回收(GC)原理**:了解如何自动回收不再使用的对象,以及不同垃圾收集器的工作机制。 - **内存泄漏**:理解内存泄漏...
Java内存管理是一个关键的性能优化领域,特别是在大型的服务器端应用程序中。内存泄露和溢出是常见的问题,它们可能导致服务不稳定甚至崩溃。本篇主要讨论Java内存泄露和溢出的检查方法以及常用的工具。 首先,当...
- "jvm":指的是Java虚拟机,是Java程序运行的平台,负责执行字节码、内存管理、线程调度等。 - "javacore":本话题的重点,是Java应用程序出现问题时生成的日志文件,用于诊断问题。 - "heapdump":表示Java堆...
JVM(Java Virtual Machine)内存管理是Java编程中至关...理解JVM内存管理对于解决Java程序中的内存泄漏、性能优化以及避免OutOfMemoryError等问题至关重要。开发者应关注内存的合理分配和释放,以确保程序的高效运行。
Java程序性能优化是一个重要的主题,尤其对于大型企业级应用,性能优化可以显著提升用户体验和系统效率。以下是一些关于如何提高Java程序性能的关键点: 1. **使用单例模式**:单例模式可以减少资源的创建和管理,...
首先,Java的垃圾回收器负责自动管理内存,通过追踪从"根"对象(如栈中的对象、静态数据成员和JNI句柄等)可达的所有对象,标记并保留活动对象,释放其余无法访问的对象。然而,尽管GC减少了程序员对内存管理的直接...
代码段存储程序的机器指令,数据段存储全局变量和静态变量,堆用于动态分配内存,而栈则处理函数调用和局部变量。 内存监视的主要目的是识别内存泄漏、性能瓶颈以及优化程序的内存使用。内存泄漏是程序错误地分配但...
在Java开发过程中,对JVM(Java虚拟机)的监控是至关重要的,它能帮助我们了解应用程序的运行状态,优化性能,以及及时发现并解决内存泄漏等问题。`vmmap`工具是Mac OS X系统中一个强大的内存分析工具,它可以用来...
对象(通过 new 关键字创建的对象,new 的作用就是在堆中创建对象)、实例成员在堆中存放。字面常量存放在常量区。 Servlet Servlet 是在服务器上运行的小程序。一个 Servlet 就是一个 Java 类,并且可以通过...
- 基本数据类型如`int`是直接存储在栈中,而封装类如`Integer`是对象,存储在堆中。`Integer`提供了额外的方法,如`compareTo()`,但相比`int`,创建和操作对象会消耗更多资源。在处理大量数据时,通常推荐使用`int...
* 虚拟机栈(Java Virtual Machine Stack):每个线程都有一个虚拟机栈,用于存储当前方法调用的参数和局部变量。 * 本地方法区(Native Method Area):用于存储 native 方法的信息。 * 堆(Heap):用于存储Java...
内存溢出是Java程序运行时常见的问题之一,它发生在程序请求的内存超过了系统或虚拟机所能分配的量,可能导致程序崩溃或者性能急剧下降。JProfiler 5.2.1正是针对这种情况而设计的,它提供了直观的界面和丰富的功能...
- **基本数据类型**:如int、char等,它们的值直接存储在栈中,而引用类型如Integer则是对象的引用,存储在堆中。 3. **String与StringBuilder/StringBuffer的区别** - **String**:不可变,一旦创建就不能修改,...
如您所见,在这个分配程序中,内存的释放使用了一个非常简单的机制,在固定时间内完成内存释放。分配内存稍微困难一些。以下是该算法的略述: 清单 5. 主分配程序的伪代码 1. If our allocator has not been ...
- **Servlet**:驻留在服务器内存中,多线程处理请求,性能高。 - **CGI**:每次请求启动新的进程,处理完请求后结束,效率低。 7. **集合框架**: - **ArrayList和Vector**:基于数组实现,支持随机访问,但...
基本数据类型是直接存储在栈中,而封装类的对象存储在堆中,提供了一些额外的方法,如Integer的parseInt()。对于大量操作字符串的情况,String是不可变的,适合用于常量;而StringBuffer或StringBuilder在需要频繁...
堆内存是Java对象的主要存储区域,分为新生代(Young Generation)、老年代(Tenured Generation)和永久代( Perm Generation,在Java 8及以后版本中被元空间(Metaspace)取代)。当新生代的Eden区无法分配新对象...
4. **高效性**:Servlet被加载到内存中后会一直驻留在内存中,这样可以避免每次请求时都重新加载代码所带来的性能开销。 #### 三、Servlet的工作原理 1. **生命周期**:Servlet的生命周期包括初始化阶段、服务阶段...
Wily Technology是一家专注于企业级Java应用性能监控和优化的公司,其产品和服务能够帮助开发者和运维人员快速定位和解决J2EE应用中的性能瓶颈,尤其是在内存管理和优化方面。通过深度的性能分析和实时监控,Wily...