摘要:java的内存模型以及线程主要是为了顺应当前的多任务处理器,随着硬件的不断升级,如果现在还是只能单线程串行执行的话,将会浪费处理器的大量时钟,cpu的执行速度非常快,导致了和等待资源之间有时间差,在等待阶段,cpu处在空闲时间,为了有效利用这段空闲时间,就可以引入多线程处理。注意是有效利用,多线程是一把双刃剑,因为多线程程序,需要额外的一些资源,比如阻塞/唤醒等操作需要操作系统在用户态与内核态进行转换,而这种转换需要耗费比较大的资源,如果系统存在大量的阻塞/唤醒操作,那么会浪费大量的cpu时钟周期,导致系统吞吐量降低,合适的线程数量可以充分利用cpu的空闲时间,从而提升系统的吞吐量。随着多..
阅读全文
摘要:一、Class类文件结构 Class类文件严格按照顺序紧凑的排列,由无符号数和表构成,表是由多个无符号数或其他数据项构成的符合数据结构。 Class类文件格式按如下顺序排列:类型名称数量u4magic(魔术)1u2minor_version(次版本号)1u2major_version(主版本号)1u2constant_pool_count(常量个数)1cp_infoconstant_pool(常量池表)constant_pool_count-1u2access_flags(类的访问控制权限)1u2this_class(类名)1u2super_class(父类名)1u2interface...
阅读全文
摘要:JDK中的bin目录下有很多工具,这些工具可以用来检测虚拟机运行情况以及cpu,内存,线程等的监控,比如jps、jstat、jinfo、jmap、jhat、jstatck等。 jps:可以用于查看虚拟机进程的LVMID,可以有三个参数,分别为:q为只输出LVMID,省略主类的名称;m为输出输出虚拟机启动书输出的main函数;l为主类全面,如果执行的是jar包,那么输出jar的路径;v为虚拟机启动时候的jvm参数 jstat:可以显示本地或者远程虚拟机中的类装载,内存,垃圾收集,JIT编译等的运行数据,这将是运行期定位虚拟机性能问题的首选工具。命令格式:jstat [ option vm...
阅读全文
摘要:java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域,运行时数据区分别为:程序计数器,java虚拟机栈,本地方法栈,java堆,方法区。还有一个非运行时数据区:直接内存(Direct Memory)。1)程序计数器每个线程创建的时候会有一个独立的程序计数器,可以看成是线程执行的字节码的行号指示器,不同线程之间的程序计数器互不影响,存储于程序计数器所在的内存中,这块内存很小。线程私有2)java虚拟机栈每个方法被执行的时候虚拟机都会创建一个栈帧,用于存储局部变量表, 操作数栈,动态链接,方法出口等信息,一个方法被调用至结束,就对应着栈帧在虚拟机栈中从入栈到出栈的过
阅读全文