Java程序的运行原理是什么


这篇文章将为大家详细讲解有关Java程序的运行原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。class文件包含Java程序执行的字节码数据严格按照格式紧凑排列在class文件的二进制流,中间无分割符文件开头有一个0xcafebabe(16进制)特殊的标志

线程独占: 每个线程都会有它独立的空间,随线程的生命周期而创建和销毁
线程共享: 所有线程都能访问这块内存数据,随虚拟机或GC而创建和销毁方法区是各个线程共享的内存区域用于存储已被虚拟机加载的类信息, 常量,静态变量, 即时编译后的代码等数据虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分, 但它却有一个别名叫Non-Heap, 目的应该是与Java堆区分开来Oracle的Hotspot虚拟机在Java7中方法区放在’永久代’(Permanent Generation), Java8放在元数据空间, 并且通过GC机制对这个区域进行管理运行时常量池是方法区的一部分Java堆是被所有共享的一块内存区域, 在虚拟机启动时创建存放对象的实例垃圾收集器的主要管理区域Java堆还可以细分为: 新生代和老年代, 新生代又可以细分为Eden 空间, From Survivor空间 和To Survivor空间空间满了会抛OutOfMemoryErrorJava虚拟机栈是线程私有的, 它的生命周期与线程相同Java虚拟机栈描述的是Java方法执行的内存模型: 每个方法被执行的的时候都会同时创建一个栈帧(栈帧是方法运行时的基础数据结构)用于存储局部变量表, 操作栈, 动态链接, 方法出口等信息.栈内存默认最大是1M, 超出则抛出StackOverFlowError本地方法栈与虚拟机栈的功能类似, 虚拟机栈是为虚拟机执行Java方法而准备的, 本地方法栈是为虚拟机使用Native本地方法而准备的Hotspot虚拟机中虚拟机栈与本地方法栈的实现方式一样, 超出大小后也会抛StackOverFlowError程序计数器是线程私有的 香港云主机一块较小的内存空间记录当前线程执行的字节码位置, 存储的是字节码指令地址, 如果执行Native方法, 则计数器为空CPU同一时间, 只会执行一条线程的指令. JVM多线程会轮流切换并分配CPU的执行时间的方式. 为了线程切换后, 需要通过程序计数器来恢复正确的执行位置使用Demo.Java进行测试, 运行javac Demo.java编译成class文件, 然后运行javap -v Demo.class > Demo.txt查看class文件内容
Demo.JavaDemo.txt

关于Java程序的运行原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

相关推荐: 如何使用Hive集成Solr?

(一)Hive+Solr简介Hive作为Hadoop生态系统里面离线的数据仓库,可以非常方便的使用SQL的方式来离线分析海量的历史数据,并根据分析的结果,来干一些其他的事情,如报表统计查询等。Solr作为高性能的搜索服务器,能够提供快速,强大的全文检索功能。(…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/27 15:26
Next 07/27 15:33

相关推荐