-
请问下面程序运行后的输出结果为什么是2
2021-01-01 20:55:45<p>int a=6; if(a=2) printf(“%d\n”,a); else printf(“%d\n”,a+1); return 0;</p> -
下面那些情况可以终止当前线程的运行 java程序输出结果
2020-04-15 21:20:52当不是抢占式的调度时,高优先级的线程将在当前线程终止后,得到优先的执行权。 调用sleep方法,当前线程j进入阻塞状态,sleep执行完成后重新进入就入就绪状态 线程结束的三个原因: 1、run方法执行完成,线程正常...
当一个优先级高的线程进入就绪状态时,当前线程执行时,如果是抢占式的调度方式,是会暂停当前线程的执行的,当仍然不是终止它的执行。当不是抢占式的调度时,高优先级的线程将在当前线程终止后,得到优先的执行权。
调用sleep方法,当前线程j进入阻塞状态,sleep执行完成后重新进入就入就绪状态线程结束的三个原因: 1、run方法执行完成,线程正常结束 2、线程抛出一个未捕获的Exception或者Error 3、直接调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)
当创建一个新的线程时,该线程也加入到了抢占cpu执行权的队伍中,但是是否能抢到,并不清楚
父类没有无参构造函数,z子类需要显示调用父类的有参构造函数,super(形参);
子类第一行都有默认的super( );
1)此处是类对方法的调用,不是对象对方法的调用。
2)方法是static静态方法,直接使用"类.方法"即可,因为静态方法使用不依赖对象是否被创建。
null可以被强制类型转换成任意类型(不是任意类型对象),于是可以通过它来执行静态方法。
3)非静态的方法用"对象.方法"的方式,必须依赖对象被创建后才能使用,若将testMethod()方法前的static去掉,则会报 空指针异常 。此处也验证了2)的观点
本题是一个自动拆装箱的考题(自动拆装箱JDK需在1.5上),下面的讨论都不针对新开辟对象的情况:
1、基本型和基本型封装型进行“”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
2.Integer的比较应该与其声明方式与值范围有关.像Integer a = new Integer(3),这样声明的两个Integer对象==比较返回的应该是false.因为堆中指向不同的地址值.但是像用Integer b = 3这样声明的,只要在-128127的范围内时==比较返回的是true,这是因为在方法去存在一个数组,存储着-128127的数,这时b的值是直接指向方法区的地址值.
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true
4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。 -
《Java EE 程序设计》作者:郝玉龙 书中程序3-18运行代码后,结果是错的
2019-05-26 22:10:38图3-25 程序3-18运行结果 测试结果: 无法访问此网站 localhost 意外终止了连接。 请试试以下办法: 检查网络连接 检查代理服务器和防火墙 运行 Windows 网络诊断 ERR_CONNECTION_CLOSED -
用C语言写的程序,目标是输入一个字母,输出这个字母其后的第四个,下面程序有点问题,求帮看看。
2016-11-17 14:53:55上面是程序,运行是没问题的,但是有个小问题,就是我在执行程序后要输入两个字母才能得到结果。举个例子,我想让h变成 l,理论上我只要在程序上打h按回车就行了,但是上面这个程序不仅需要我输入h,还要我输入一个... -
Pycharm中输出问题,Pycharm运行程序时在Python console窗口中输出
2020-09-20 20:11:37作者就层遇到很多坑最近遇到的一个问题就是输出问题,虽然不影响输出结果但就是看起来不顺眼,现在我将问题,描述如下 这就是遇到的问题输出不在正常的run中,直接输出到控制台了也不知道怎么搞的,查阅相关资料后...问题描述
Pycharm是一款很好用的IDE,但是有一些细节问题需要我们注意。作者就层遇到很多坑最近遇到的一个问题就是输出问题,虽然不影响输出结果但就是看起来不顺眼,现在我将问题,描述如下
这就是遇到的问题输出不在正常的run中,直接输出到控制台了也不知道怎么搞的,查阅相关资料后下面说一下解决方案直接上图:
1、
2、点击框出来的这里进去页面
3、最后一步把这个框起来的对号去掉就好了。
特别注意这只是改了一个py文件,如果创建新的py文件还是会在控制台输出所以要从根源上解决问题,下面附上解决方法
还是在原来改RUN的那个地方改进默认模板,这样的话才会完整的解决这个问题。参考文献
1、参考解决方案 -
java数组编译后_给定如下 Java 代码,编译运行时,结果是_________ 。_学小易找答案...
2021-03-01 08:22:40【单选题】某个 main() 方法中有以下代码: 请问以上程序编译运行后的结果是【单选题】给定如下 Java 代码,编译运行时,结果是_________ 。【单选题】下面 正确 的表达式是 ________ 。【单选题】下列程序的输出结果为...【单选题】某个 main() 方法中有以下代码: 请问以上程序编译运行后的结果是
【单选题】给定如下 Java 代码,编译运行时,结果是_________ 。
【单选题】下面 正确 的表达式是 ________ 。
【单选题】下列程序的输出结果为_________ 。
【单选题】下列程序运行的结果是
【判断题】在嵌套循环中,内层循环和外层循环不能交叉。( )
【单选题】给定如下 Java 代码,编译运行时,结果是_________ 。
【单选题】下列哪个赋值语句是不正确的________ 。
【单选题】若定义有变量 float f1,f2 = 8.0F, 则下列说法正确的是 ________ 。
【单选题】关于选择结构,下列说法正确的是_________ 。
【单选题】下面程序段的输出结果为___________________。
【单选题】以账簿记录为依据,采用表格和文字形式将会计信息提供给使用者的书面文件是( )
【单选题】下列创建数组的语句中正确的是
【单选题】当一个char型变量a和一个int型变量b进行混合运算时,正确的说法是____________________。
【单选题】给定如下程序,编译运行,错误出现在_________ 。
【单选题】有如下程序段,下列说法正确的是_________ 。
【单选题】若 intArray 为整型数组,i 为整型变量,则下列有关数组元素的访问方法中错误的是
【其它】项目一 C语言编程基础 1. 熟悉 Dev c++ 集成环境。调试一个 HelloWorld 的程序。 2. 字符数据的输入与输出,编写一个输入与输出字符练习的程序。 3. 格式输入与输出,编写一个可输入整型数据和实型数据的程序。 具体请参看我们的第一次实训指导书,自己写的程序也可以一同提交,请大家将程序的逐句的讲解,程序讲解拍成视频,同时程序拍成照片,提交。 交程序照片(没机器的课后可总结写到笔记本上或作业本上,然后拍照) 交程序逐条讲解视频(没机器的课 后可总结写到笔记本上或作业本上,一边拿着本子讲解一边拍,机房里面拍了的,讲解清楚的视频也可以 )
【简答题】
【单选题】下面哪项可以得到一维数组元素的个数,Java 中定义数组名为 abc
【单选题】下面程序代码段执行后输出结果是_________ 。
【单选题】下面代码段的输出结果是_________ 。
【单选题】分析如下程序段,输出结果为_________ 。
【单选题】在以下整型常量的表示方法中,不正确的是________ 。
【判断题】在多重循环中,可以使用break语句控制跳转出相应的嵌套层次;使用continue语句控制跳转到相应的嵌套层次
【简答题】3.通过二维数组实现,统计四个同学的五门学科的成绩(c,c#,java,html,sql). 要求1:求出全班单科成绩的总成绩和平均成绩,并存放到一个二维数据中。 要求2:求出每位同学的的总成绩和平均成绩,并存放到一个二维数据中。
【判断题】当 continue和标号一起使用时,其含义是结束标号标记的那重循环的当次循环。( )
【单选题】对于语句“float s;”,能正确得到1.5的赋值语句是____________________。
【单选题】有 Java 语句“int[] a,b=new int[3];”,则说法正确的是
【单选题】下列关于数组的描述错误的是
【单选题】下列程序的输出结果是_________ 。
【单选题】定义 3 个整型数组 a1、a2、a3,下面声明正确的语句是
【判断题】在循环语句中,break可以立即结束当次循环而执行下一次循环。 ( )
【单选题】执行下面的 for 循环后,a[5] 的值是 int[] a = new int[10]; a[0] = 0; for (int i = 1; i < 10; i++) { a[i] = a[i – 1] + i; }
【单选题】数组元素之所以相关,是因为它们具有相同的
【单选题】设 a、b 为 long型变量,x、y 为 float型变量,ch为 char类型变量,且它们均已被赋值,则下列语句中正确的是__________。
【单选题】在下列 Java 的基本数据类型中,所占字节数最少的是 ________ 。
【判断题】break语句和continue语句只能用于循环语句中。( )
【简答题】通过学习文件这一章,完成对文件的读,与写的操作。 将结构体的练习也一起提交到这个部分!!
【简答题】1工资 2库存 3解密 等 都参看实训文档
【单选题】企业对融资租入的固定资产视同自有固定资产进行会计核算,符合会计信息质量的( )要求
【多选题】有关会计基本职能的关系,下列说法中正确的有( )
【单选题】下面程序说法正确的是
【单选题】下列程序的运行结果是______________________。
【简答题】2.已知有一个已被初始化的字符串:char strarray[]="This is an cup.";要求将里面多余的字母‘n’去除后重新保存,然后再输出这个字符中数组.
【单选题】下列________表达式的值为真。
【单选题】假设 a是 int类型的变量,并初始化为 3,则下列_________ 是合法的条件语句。
【简答题】1.注册QQ账号,用字符数组存放注册QQ号码及密码。然后再提示用户登录,用户从键盘输入,最后再判断登录成功。
【单选题】下面程序的执行结果是_________ 。
【单选题】程序段“for(int i=0; i<=3; ++i){System.out.print("a");}”,输出语句共执行_________ 次。
-
一个java程序是怎样运行起来的(2)
2017-11-28 22:37:48接上一篇---- 一个java程序是怎样运行起来的(1),当我们执行java Test后,程序会在控制台输出我们想要的结果,那么这个过程中经历了些什么呢?我们知道,java程序要想运行起来,必须建立在java虚拟机上。下面结合...接上一篇---- 一个java程序是怎样运行起来的(1),当我们执行java Test后,程序会在控制台输出我们想要的结果,那么这个过程中经历了些什么呢?我们知道,java程序要想运行起来,必须建立在java虚拟机上。下面结合hotspot vm(sun实现的java虚拟机)简单看下执行java Test命令后,java虚拟机的处理过程。
在执行java Test命令后,会去启动java虚拟机来执行程序,在启动java虚拟机之前有一些初始化的工作需要进行
1、创建java虚拟机环境前期的一些准备工作
hotspot vm的入口在 java.c 中,当执行java Test 时,首先进入到java.c的main方法
/* * Entry point.省略掉了部分代码 */ int main(int argc, char ** argv) { char *jarfile = 0; char *classname = 0; char *s = 0; char *main_class = NULL; ............ CreateExecutionEnvironment(&argc, &argv, jrepath, sizeof(jrepath), jvmpath, sizeof(jvmpath), original_argv); printf("Using java runtime at: %s\n", jrepath); if (!LoadJavaVM(jvmpath, &ifn)) { exit(6); } /* Set default CLASSPATH */ if ((s = getenv("CLASSPATH")) == 0) { s = "."; } #ifndef JAVA_ARGS SetClassPath(s); #endif /* * Parse command line options; if the return value of * ParseArguments is false, the program should exit. */ if (!ParseArguments(&argc, &argv, &jarfile, &classname, &ret, jvmpath)) { exit(ret); } /* Override class path if -jar flag was specified */ if (jarfile != 0) { SetClassPath(jarfile); } /* set the -Dsun.java.command pseudo property */ SetJavaCommandLineProp(classname, jarfile, argc, argv); /* Set the -Dsun.java.launcher pseudo property */ SetJavaLauncherProp(); /* set the -Dsun.java.launcher.* platform properties */ SetJavaLauncherPlatformProps(); { /* Create a new thread to create JVM and invoke main method */ ......... return ContinueInNewThread(JavaMain, threadStackSize, (void*)&args); } }
1.1、首先是创建执行执行环境,主要的过程在CreateExecutionEnvironment这个函数中,这个函数的实现在java_md.c文件
这个函数主要干了两件事,一是寻找jre路径,在本人的机器上,这个jre路径是D:\java\jdk1.7.0_79\jre,二是寻找jvm路径,主要是找到jvm.dll的路径void CreateExecutionEnvironment(int *_argcp,char ***_argvp,char jrepath[],jint so_jrepath,char jvmpath[],jint so_jvmpath,char **original_argv) { /* * 省略部分代码 */ char *execname = NULL; int original_argc = *_argcp; jboolean jvmpathExists; .............. { char *arch = (char *) ARCH; /* like sparc or sparcv9 */ char *p; if (!GetJREPath(jrepath, so_jrepath, arch, JNI_FALSE) ) { fprintf(stderr, "Error: could not find Java 2 Runtime Environment.\n"); exit(2); } if (!GetJVMPath(jrepath, NULL, jvmpath, so_jvmpath, arch )) { fprintf(stderr, "Error: no JVM at `%s'.\n", jvmpath); exit(4); } } }
1.2、加载java虚拟机,主要在函数LoadJavaVM中实现:
首先加载jvm.dll,windows下使用WinApi函数LoadLibrary函数来加载jvm.dll,接下来指定了使用 "JNI_CreateJavaVM" 创建java虚拟机,这个函数在jni.cpp,以及"JNI_GetDefaultJavaVMInitArgs"函数用于获取默认的java虚拟机初始化参数。jboolean LoadJavaVM(const char *jvmpath, InvocationFunctions *ifn) { ................ Dl_info dlinfo; void *libjvm; libjvm = dlopen(jvmpath, RTLD_NOW + RTLD_GLOBAL); .................. ifn->CreateJavaVM = (CreateJavaVM_t) dlsym(libjvm, "JNI_CreateJavaVM"); if (ifn->CreateJavaVM == NULL) goto error; ifn->GetDefaultJavaVMInitArgs = (GetDefaultJavaVMInitArgs_t) dlsym(libjvm, "JNI_GetDefaultJavaVMInitArgs"); if (ifn->GetDefaultJavaVMInitArgs == NULL) goto error; return JNI_TRUE; }
1.3、设置jvm运行时需要用到的一些属性
SetClassPath(xxxx) /* set the -Dsun.java.command pseudo property */ SetJavaCommandLineProp(classname, jarfile, argc, argv); /* Set the -Dsun.java.launcher pseudo property */ SetJavaLauncherProp(); /* set the -Dsun.java.launcher.* platform properties */ SetJavaLauncherPlatformProps();
1.4、创建一个新的线程去初始化jvm并执行java程序
该线程指定了执行的函数为JavaMain,这个函数在java.c文件中.{ /* Create a new thread to create JVM and invoke main method */ struct JavaMainArgs args; args.argc = argc; args.argv = argv; args.jarfile = jarfile; args.classname = classname; args.ifn = ifn; return ContinueInNewThread(JavaMain, threadStackSize, (void*)&args); }
到此,创建jvm前期的一些准备工作已经完成!!!
2、创建java虚拟机
创建java虚拟机的函数入口在java.c中:
还记得上面的ifn这个指针吧,ifn->CreateJavaVM(pvm, (void **)penv, &args);实际上是调用JNI_CreateJavaVM去完成虚拟机的初始化工作。int JNICALL JavaMain(void * _args) { .......... if (!InitializeJVM(&vm, &env, &ifn)) { ReportErrorMessage("Could not create the Java virtual machine.", JNI_TRUE); exit(1); } } static jboolean InitializeJVM(JavaVM **pvm, JNIEnv **penv, InvocationFunctions *ifn) { ........ r = ifn->CreateJavaVM(pvm, (void **)penv, &args); JLI_MemFree(options); return r == JNI_OK; }
JNI_IMPORT_OR_EXPORT_ jint JNICALL JNI_CreateJavaVM(JavaVM **vm, void **penv, void *args) { ........................ result = Threads::create_vm((JavaVMInitArgs*) args, &can_try_again); ...................... return result; }
java虚拟机的创建是一个比较复杂的过程,细节实现比较多,下面我们来简单看下其中的主要步骤,参见thread.cpp1,if (!is_supported_jni_version(args->version)) return JNI_EVERSION;校验当前jvm是否支持该版本
2,ostream_init();初始化输出模块
3,Arguments::process_sun_java_launcher_properties(args);处理java命令行中指定了“-Dsun.java.launcher”属性,
4,os::init();初始化系统信息,如处理器个数,页文件大小等
5,Arguments::init_system_properties();初始化system properties,
6,JDK_Version_init();初始化jdk版本信息// Initialize system properties key and value. void Arguments::init_system_properties() { ........... _java_ext_dirs = new SystemProperty("java.ext.dirs", NULL, true);//初始化key--->value:"java.ext.dirs"---->null _java_endorsed_dirs = new SystemProperty("java.endorsed.dirs", NULL, true);//"java.endorsed.dirs"---->null _sun_boot_library_path = new SystemProperty("sun.boot.library.path", NULL, true);//"sun.boot.library.path"---->null _java_library_path = new SystemProperty("java.library.path", NULL, true);//"java.library.path"--->null _java_home = new SystemProperty("java.home", NULL, true);//"java.home"---->null _sun_boot_class_path = new SystemProperty("sun.boot.class.path", NULL, true);//"sun.boot.class.path"---->null _java_class_path = new SystemProperty("java.class.path", "", true);//"java.class.path"---->"" // Add to System Property list. PropertyList_add(&_system_properties, _java_ext_dirs); PropertyList_add(&_system_properties, _java_endorsed_dirs); PropertyList_add(&_system_properties, _sun_boot_library_path); PropertyList_add(&_system_properties, _java_library_path); PropertyList_add(&_system_properties, _java_home); PropertyList_add(&_system_properties, _java_class_path); PropertyList_add(&_system_properties, _sun_boot_class_path); // Set OS specific system properties values os::init_system_properties_values(); } void os::init_system_properties_values() { /* sysclasspath, java_home, dll_dir */ { .............. Arguments::set_java_home(home_path);//设置java_home,即上面的_java_home = new SystemProperty("java.home", NULL, true);"java.home"---->环境变量中配置的值 ......... Arguments::set_dll_dir(dll_path);//"sun.boot.library.path"----->当前机器的dll路径,在本人机器上为D:\java\jdk1.7.0_79\jre\bin if (!set_boot_path('\\', ';'))//"sun.boot.class.path"---->classpath return; } .............. Arguments::set_library_path(library_path);//"java.library.path"--->环境变量path的值,以及windows目录,system目录 ............ Arguments::set_ext_dirs(buf);//"java.ext.dirs"---->本机上为D:\java\jdk1.7.0_79\jre\lib\ext .................. Arguments::set_endorsed_dirs(buf);//"java.endorsed.dirs"---->本机上为D:\java\jdk1.7.0_79\jre\lib\ext\endorsed }
7,Arguments::init_version_specific_system_properties();更新jdk特定system properties
8,jint parse_result = Arguments::parse(args);解析参数
9,jint os_init_2_result = os::init_2();//设置 stack_size,线程优先级等
10,ThreadLocalStorage::init();初始化thread local storage,
11,ostream_init_log();初始化日志输出
12,vm_init_globals();初始化全局的数据结构并在堆上创建system classes
13,创建一个java线程void vm_init_globals() { check_ThreadShadow(); basic_types_init();//初始化基本类型,比如int所能表示的最大值与最小值以及一个int占多少个字节 eventlog_init();//初始化eventlog mutex_init();//初始化一堆的锁,比如gc lock等 chunkpool_init();//初始化hotspotvm 内存池chunkpool perfMemory_init();//初始化jvm性能统计 }
14,ObjectMonitor::Initialize() ;初始化java对象监视器,关键字synchronized就是通过对象监视器实现的// Attach the main thread to this os thread JavaThread* main_thread = new JavaThread(); main_thread->set_thread_state(_thread_in_vm);//线程在jvm中执行 main_thread->record_stack_base_and_size();//记录线程的基址和大小 main_thread->initialize_thread_local_storage();//初始化TLS main_thread->set_active_handles(JNIHandleBlock::allocate_block());//设置jni句柄 if (!main_thread->set_as_starting_thread()) { vm_shutdown_during_initialization( "Failed necessary internal allocation. Out of swap space"); delete main_thread; *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again return JNI_ENOMEM; } // Enable guard page *after* os::create_main_thread(), otherwise it would // crash Linux VM, see notes in os_linux.cpp. main_thread->create_stack_guard_pages();
15,MemTracker::bootstrap_multi_thread();//当vm进入多线程模式时,create nmt lock for multi-thread execution
16,jint status = init_globals();//初始化全局模块
-----management_init();//init java.lang.management API support,vm创建信息,线程信息,运行时信息,类加载信息-----bytecodes_init();//初始化jvm指令集
-----classLoader_init();//初始化classLoader
void ClassLoader::initialize() { .........//初始化jvm性能统计的信息 // lookup zip library entry points load_zip_library(); // initialize search path setup_bootstrap_search_path(); if (LazyBootClassLoader) { // set up meta index which makes boot classpath initialization lazier setup_meta_index(); } } void ClassLoader::load_zip_library() { assert(ZipOpen == NULL, "should not load zip library twice"); // First make sure native library is loaded os::native_java_library();//确保verify.dll,java.dll已加载 // Load zip library char path[JVM_MAXPATHLEN]; char ebuf[1024]; os::dll_build_name(path, sizeof(path), Arguments::get_dll_dir(), "zip"); void* handle = os::dll_load(path, ebuf, sizeof ebuf);//加载zip.dll if (handle == NULL) { vm_exit_during_initialization("Unable to load ZIP library", path); } // Lookup zip entry points ZipOpen = CAST_TO_FN_PTR(ZipOpen_t, os::dll_lookup(handle, "ZIP_Open")); .................//获取zip.dll中有关函数的入口地址 // Lookup canonicalize entry in libjava.dll void *javalib_handle = os::native_java_library(); CanonicalizeEntry = CAST_TO_FN_PTR(canonicalize_fn_t, os::dll_lookup(javalib_handle, "Canonicalize"));//获取canonicalize入口地址 } void ClassLoader::setup_bootstrap_search_path() { assert(_first_entry == NULL, "should not setup bootstrap class search path twice"); char* sys_class_path = os::strdup(Arguments::get_sysclasspath());//获取system class path信息,在第5步中进行了初始化_sun_boot_class_path if (TraceClassLoading && Verbose) { tty->print_cr("[Bootstrap loader class path=%s]", sys_class_path); } int len = (int)strlen(sys_class_path); int end = 0; // Iterate over class path entries for (int start = 0; start < len; start = end) { while (sys_class_path[end] && sys_class_path[end] != os::path_separator()[0]) {//解析路径字符串 end++; } char* path = NEW_C_HEAP_ARRAY(char, end-start+1, mtClass); strncpy(path, &sys_class_path[start], end-start); path[end-start] = '\0'; update_class_path_entry_list(path, false);//将路径信息添加到ClassPathEntry中,ClassPathEntry是一个链表 FREE_C_HEAP_ARRAY(char, path, mtClass); while (sys_class_path[end] == os::path_separator()[0]) { end++; } } } //此步骤后,等于告诉了jvm bootclassloader的搜索路径,后续用来加载这些路径下的class文件
----codeCache_init();//初始化代码缓存
----VM_Version_init();//初始化vm版本
----os_init_globals();//初始化os额外的全局信息,目前从代码上看应该是没有额外的处理
----stubRoutines_init1();//初始化stubRoutines,便于在c文件中调用java代码
----jint status = universe_init();//java堆初始化
jint universe_init() {//比较复杂 ........ GC_locker::lock(); // do not allow gc during bootstrapping JavaClasses::compute_hard_coded_offsets();//计算硬编码偏移,如Throwable中各个变量的offset,该方法计算了Throwable Class,java_lang_boxing_object,java_lang_ref_Reference,java_lang_ref_SoftReference Class,java_lang_ClassLoader,java_lang_System,java_lang_StackTraceElement中成员变量的offset. ................... jint status = Universe::initialize_heap();//堆初始化 if (status != JNI_OK) { return status; } // We have a heap so create the methodOop caches before // CompactingPermGenGen::initialize_oops() tries to populate them. Universe::_finalizer_register_cache = new LatestMethodOopCache(); Universe::_loader_addClass_cache = new LatestMethodOopCache(); Universe::_pd_implies_cache = new LatestMethodOopCache(); Universe::_reflect_invoke_cache = new ActiveMethodOopsCache(); SymbolTable::create_table();//创建SymbolTable,大小360*1024 StringTable::create_table();//创建StringTable,大小40 ClassLoader::create_package_info_table();//创建 PackageHashtable,大小31 return JNI_OK; } jint Universe::initialize_heap() { .....................//针对不同的gc收集器使用不同的_collectedHeap,主要有ParallelScavengeHeap,G1CollectedHeap,GenCollectedHeap, 不同类型的collectedHeap有不同的收集策略,默认使用GenCollectedHeap,策略MarkSweepPolicy jint status = Universe::heap()->initialize();//GenCollectedHeap初始化,这个值得细细研究..... if (status != JNI_OK) { return status; } ................ if (UseTLAB) { assert(Universe::heap()->supports_tlab_allocation(), "Should support thread-local allocation buffers"); ThreadLocalAllocBuffer::startup_initialization();//初始化TLAB } return JNI_OK; }
, ----interpreter_init();//初始化模板解释器,将所有字节码的目标代码生成函数和参数保存在_template_table,每个字节码、程序和函数的调用都要进行计数,后面细读后在分析,先看个大概----invocationCounter_init();//初始化计数
----marksweep_init();//初始化标记整理,用于gc
----accessFlags_init();//初始化访问标志,just checking size of flags
----templateTable_init();//每个字节码对应有相应的汇编指令,所有字节码的template封装成templateTable,里面包含每个字节码指令的具体机器码映射
----SharedRuntime::generate_stubs();//
----universe2_init(); // dependent on codeCache_init and stubRoutines_init1
----referenceProcessor_init();
---jni_handles_init();
---vmStructs_init();
---vtableStubs_init();
---InlineCacheBuffer_init();
---compilerOracle_init();
---compilationPolicy_init();
---compileBroker_init();
---VMRegImpl::set_regName();
---if (!universe_post_init()) {
return JNI_ERR;
}
---javaClasses_init(); // must happen after vtable initialization
---stubRoutines_init2(); // note: StubRoutines need 2-phase init17,main_thread->cache_global_variables();//缓存全局变量
18,// Create the VMThread
19,//初始化jdk核心类,如java.lang.String,java.lang.Thread等
..............
在java虚拟机初始化完成后,接下就该执行实际的java程序了
============================我是分割线===================================================
hotspot vm是一个庞大的工程,涉及到的知识点太多。对于刚开始接触不久的我来说,是在是复杂。所以基于本人对jvm有限的理解(更多的可能是自己yy),尝试做一个简单的jvm实现,目前功能非常有限,正在慢慢积极的完善,github上地址:https://github.com/reverence/czvm
-
程序运行以后没反应了?
2020-12-02 07:23:57// 输出结果的分隔符, 比如: 如果想要换行输出, 可以改为: \n // 有个特殊的例外, 如果设置为 gop, 则会输出 "xxx", "xxx" 样式 "OutputSeparator": "gop", // IP 或 IP 段文件... -
恳请指点:四阶龙格库塔解常微分方程不断改变步长,运行有时候出结果,有时候程序没有结果
2016-06-28 03:23:52// 加上下面程序(改变步长d)则运行停止工作,没有时运行良好? /* if((0.3*r[i])&&(X*r[i])) { d=0.7*d; if((0.6*r[i])&&(X*r[i])) d=0.4*d; if((0.9*r[i])&&(X[i])) d=0.1*d; }*/ ... -
python的输出命令是什么_Python中最基本的输入与输出命令基础教程
2020-12-01 21:29:17任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,或者简写为... -
程序改错:【下面程序功能】:两个有序数列的拼接。?
2020-04-21 17:57:12下列程序中函数append的功能是将b指向的数组前blen个元素中存储的一个升序数列(简称b数列)追加到a指向的数组前alen个元素中存储的一个降序数列(简称a数列)之后,合并后的数列中前半部分是原a数列中的数据但改为... -
第2部分--C语言程序设计练习三(参考答案).doc
2020-10-19 19:52:19阅读分析下面程序后写出程序的运行结果 运行结果 2 6 12 20 2.写出以下程序的功能如果输入14写出程序的输出结果 输出结果no 3.阅读下面的程序并回答问题 1数组中a[10]号元素中存储的是什么字符? 答a[10]元素中存储的... -
python输入名字输出姓_python学习-输入输出
2020-12-03 06:47:41Python的输入和输出非常方便,下面详细记录一下任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。输入是Input,输出是Output... -
【c-WinAPI】 程序运行崩溃(自己写的函数出错),求大神帮忙!!!
2019-07-06 15:19:36修改后的代码其实也有问题,那就是虽然可以运行,但是假如在一个矩形内输出了n(n>1)行,那么只有第一行能被保留(啊啊啊,要疯了!!!) ## 最终预期功能 嗯,这里在重申一下,那个TextPrint函数是低配版的... -
【c-WinAPI】 程序运行崩溃(自己写的函数出错),求大神帮忙!!!!
2019-07-06 15:21:53修改后的代码其实也有问题,那就是虽然可以运行,但是假如在一个矩形内输出了n(n>1)行,那么只有第一行能被保留(啊啊啊,要疯了!!!) ## 最终预期功能 嗯,这里在重申一下,那个TextPrint函数是低配版的... -
在python程序中数据的来源可以是-python
2020-10-29 21:37:48【单选题】以下赋值语句中合法的是【单选题】字符串:s= abcde',n=len(s)。...)的输出结果为( )【单选题】执行下面代码后,程序运行的结果为:( )【单选题】下列表达式的值为True的是()【单选题】我们通过使用turt... -
python学习-输入输出
2019-03-01 16:00:00任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,... -
在运行结果对比输出(OJ_SHOW_DIFF)中提示每个数据点的结果(AC/WA/TLE...)。 11-16 优化 @muzea 开发了从 GitHub 到 Gitee 的同步机制,并部署了CI。 11-13 更新 在运行时错误(RuntimeError)中显示数据点...
-
python语言的字符串中的字符采用的编码是_Python程序采用Unicode编码,英文字符和中文字符在Python中分别...
2020-12-09 08:50:19【单选题】以下程序运行后输出结果是: #include void main() { char *s="abcde"; s+=2; printf("%d\n",s);}【单选题】关于强制联想的描述,哪一项是错误的?【单选题】下面那个电子器件能够储存电场能( )。【单选题】... -
求助大神,这个matlab程序如何修改才能正确运行?
2016-05-02 18:17:20%输出结果并绘图 figure(1); plotif=1; X=Xp; [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif); figure(2); plot(LC1); figure(3); plot(LC2); function [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif) % JSPGA的内联子函数,用于求... -
Python的输入与输出
2018-08-08 15:07:45任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果 input() 和 print() 是在命令行下面最基本的输入和输出 一 Python的输入 1)... -
编程题,求指点,动态规划入门题,思路简单,但是程序跑不了结果
2016-11-12 06:30:40思路是先找到最高点,然后在四周着比他低的最高点,长度加一,但是运行不了,不知错在哪 改为记忆化搜索后代码提交总是runtimeerror,请问到底咋回事 ``` #include using namespace std; #define ... -
python基础之输入和输出
2019-09-29 14:51:07任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。 下面我们在Python交互模式进行一些简单的输入输出 开始 找到安装的... -
python字符串去掉回车_Python——输入和输出
2020-12-30 02:54:30任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,... -
C#隐式运行CMD命令(隐藏命令窗口)
2021-01-01 08:17:44本程序没有使用p.StandardOutput.ReadtoEnd()和p.StandardOutput.ReadLine()方法来获得输出,因为这些方法执行后画面容易卡死。而是通过调用异步方法BeginOutputReadLine来获取输出,并在事件p.OutputDataReceived的... -
求大神看看这题我程序的问题是什么
2017-03-18 00:17:59以下为程序运行结果示例 x1=-0.5000 x2=-1.0000 输入格式: 无 输出格式: "x1=%.4f\n" "x2=%.4f\n" 为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 我的程序:#include #... -
C#隐式运行CMD命令
2015-06-09 14:50:12本文实现了C#隐式运行CMD命令的功能。...本程序没有使用p.StandardOutput.ReadtoEnd()和p.StandardOutput.ReadLine()方法来获得输出,因为这些方法执行后画面容易卡死。而是通过调用异步方法BeginOutputReadLi -
小白学Python(3)——输入和输出,显示你的名字
2019-09-28 13:36:35任何计算机程序都是为了执行一个特定的任务,有了输入,用户才能告诉计算机程序所需的信息,有了输出,程序运行后才能告诉用户任务的结果。 输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,... -
python 3.5 田字格的输出
2020-12-22 01:00:48'''一开始的符号总是得不到下面的运行结果,总是有点错乱,其实是符号选择错误...... 后来在各个符号前后都留有空格。''' for h in range(1,12): for l in range(1,12): if h in [1,6,11] and l in [1,6,11]: -
python控制台输出乱码_解决PyCharm控制台输出乱码的问题
2020-12-04 08:54:53把之前的程序导进来试运行下安装是否成功,发现控制台里的显示结果有乱码。乱码部分是一个目录的输出,这个目录里含有中文路径网上搜了下,有人说把下面图中的两个Encoding设置为UTF-8会解决这个问题。这么配置了下...