Java虚拟机
来源:互联网 发布:百通世纪免费网络视频 编辑:程序博客网 时间:2024/06/18 07:49
1、JDK目录结构
http://www.th7.cn/Program/java/201306/138877.shtml
2、 Java程序的启动过程?
http://blog.csdn.net/jun55xiu/article/details/6325518
写了一段代码,编译器编译成为字节码文件.class,然后运行的时候,创建java虚拟机,然后加载类,类加载bootstrap,然后加载extclassloader,apiclassloader。加载了用户类之后。执行代码,执行的代码的时候会开一个线程,然后又线程栈,里面存储局部变量等,然后还有程序计数器,也是以线程为单位的,可以知道字节码当前运行到哪一行。然后对于初始化的变量,然后存放在堆里面。在栈里面运行的内容可以知道自己指向的堆里面的对象在哪,知道对象的方法区中的方法在哪。对于常量和静态方法等都是存放在方法区的。
3、 Java内存管理?[此部分引用较多,可参看原博文]
http://liu1227787871.blog.163.com/blog/static/205363197201263103320466/
1、 java程序可以分为java程序,java虚拟机和操作系统三个层次。Java程序与虚拟机打交道,虚拟机和操作系统打交道。程序运行前,jvm申请一定的内存,运行时,jvm负责分配java程序的内存,如果初始化的内存不够,那么jvm可以继续向操作系统申请内存直到最大可申请内存。
2、 可以通过runtime获取内存的一些数据。
3、 Jvm会将申请到的内存分为三部分:
方法区:用于存储加载进来的java类,类的属性和方法以及静态成员等内容。
堆:用于存储对象的属性,可以理解为对象的属性存储在堆中,对象的方法存储在方法区。
栈:每当出现方法调用的时候,会在栈用开辟一块空间用于存储局部变量,引用等,方法结束后,该块内存释放。
4、 深入内存区域?[此部分引用较多,可参看原博文]
http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html
http://www.cnblogs.com/gw811/archive/2012/10/18/2729490.html
5、 JVM?
6、 类加载器?
http://www.cnblogs.com/chenying99/archive/2013/04/02/2994642.html
继承ClassLoader类,重写findClass方法,在其构造函数里面可以通过super()或者super(classloader)来指明其父加载器。在调用loadClass的时候,先看其父加载器能否加载到类,如果加载不到,那么自己再加载。
子加载器可以看到父加载器加载的所有类,而父类是看不到子类的。如果没有直接或者间接父子关系的加载器加载的类是彼此不可见的,但是可以通过java的反射机制获取类的属性和方法。
一般重写loadclass的时候都是说我想要存在相同全名的类可以有两份,和正常的双亲代理不同,这个从底部的类加载器开始加载。这样是为了保证不同的应用所使用的类不会有冲突。
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- JAVA虚拟机
- Java虚拟机
- Java虚拟机
- Java虚拟机
- java虚拟机
- java虚拟机
- Java虚拟机
- Java虚拟机
- 你所不知道的Spotify:比盗版更便捷的音乐服务[译]
- 分享
- 使用maven-war-plugin 对Maven项目进行动态打包
- h5页面
- elasticsearch Hello World
- Java虚拟机
- error LNK2005: _printf already defined in MSVCRTD.lib(MSVCR90D.dll)LIBCMTD.lib
- JavaScript开发者调查
- 是否有必要显式的在方法体内将局部变量赋值为null
- 2014-12-25
- DEDE网站地图优化技巧
- boost使用property_tree/json_parser处理包含中文字符的UTF8时异常的解决办法
- SSIS可靠性和扩展性—可扩展性
- 【ZooKeeper Notes 27】ZooKeeper管理员指南——部署与管理ZooKeeper