سؤال

لقد رأيت العديد من التطبيقات التي تأخذ دروسًا في الآلات الموسيقية وتأخذها -javaagent كمعلمة عند التحميل أيضا وضع -noverify إلى سطر الأوامر.

مستند جافا يقول ذلك -noverify يقوم بإيقاف تشغيل التحقق من الفئة.

ولكن لماذا قد يرغب أي شخص في إيقاف التحقق حتى لو كان يستخدم دروسًا في الأجهزة؟

هل كانت مفيدة؟

المحلول

والبدء الوقت، أود أن أقول. التحقق من أن الطبقات صحيحة يأخذ بعض الوقت عندما يتم تحميل الطبقة. منذ يمكن تحميل الطبقات بطريقة كسول (وليس على بداية التطبيق، ولكن عندما تستخدم لأول مرة)، وهذا قد يسبب تأخير وقت التشغيل غير متوقعة وغير مرغوب فيها.

وفي الواقع لا يحتاج إلى أن يتم التحقق بشكل عام الصف. والمترجم لا تنبعث منها أي بايت كود غير صالح أو بناء الطبقة. والسبب في التحقق هو أن الطبقة يجوز بناء على نظام واحد، والحصول على شبكة الانترنت، وتنتقل لك من خلال الانترنت دون وقاية. على هذا الطريق، مهاجم ضار قد تعديل بايت كود وخلق شيء المترجم قد تخلق أبدا. شيء يمكن أن تحطم JVM أو ربما تلتف القيود الأمنية. وهكذا يتم التحقق من الطبقة قبل استخدامها. إذا كان هذا هو التطبيق المحلي، وعادة ما يكون هناك حاجة للتحقق من بايت كود مرة أخرى.

نصائح أخرى

عندما يتم استخدامه بالتزامن مع -javaagent, ، فهو على الأغلب لا لأسباب تتعلق بالأداء، ولكن لأن الوكيل يقوم عمدًا بإنشاء رمز ثانوي "غير صالح".

تجدر الإشارة إلى أن الكود الثانوي غير الصالح قد يستمر في التنفيذ بشكل جيد، لأن بعض قواعد التحقق صارمة للغاية.على سبيل المثال، this يجب ألا يتم الوصول إليها في منشئ قبل استدعاء المنشئ الفائق، لأنه لم تتم تهيئة المتغيرات في هذه المرحلة.ولكن لا يزال هناك أشياء أخرى تريد القيام بها (راجع مثال JRebel).ثم تستخدم -noverify للتحايل على تلك القاعدة.

والتصحيح! في الواقع هذا ما أفعله الآن، وكيف تعثرت عبر هذا السؤال. في الطين ونحن نفعل الكثير من الأجهزة بايت كود، وأحيانا يساعد على إيقاف المدقق ونحن تصحيح محولات طبقتنا، حتى نتمكن من رؤية أين بالضبط فشلوا في وقت التشغيل.

وأنت على حق، ونحن نريد المدقق أن تبقى على الإنتاج.

وسوف تستخدم JRebel دون -noverify إعطاء هذا التحذير عند بدء التشغيل:

<اقتباس فقرة>   

وJRebel: "-noverify" في عداد المفقودين، وتغيير / مضيفا / لن يتم تمكين الصانعين إزالة

!

وهكذا يبدو أن -noverify يسمح بايت كود إعادة الأجهزة إلى القيام ببعض الأشياء التي لولاها لا يكون ممكنا.

والبدء مرة تستخدم ليكون قليلا من قضية. ومع ذلك، محققين الآن أسرع، وكذلك المعالجات. التعليمات البرمجية المترجمة مع JDK6 إرادة javac افتراضيا يتضمن معلومات اضافية لاتخاذ الخطوة متحقق بشكل أسرع. اباتشي الوئام يستخدم فقط خوارزمية التحقق أسرع بكثير.

أنتجت

وبعض الإصدارات القديمة جدا من javac بايت كود غير صحيح. والواقع أن الشمس المساعد لا يزال يتضمن إصلاح متابعة التعليمات البرمجية لإجراء بعض ملفات فئة كسر التحقق.

والمدقق الجديدة التي يتم تقديمها في JAVA 6 معقد جدا لمعالجة للتلاعب التعليمات البرمجية.

ونلقي نظرة على هذا: HTTP: // chrononsystems كوم / بلوق / جافا-7-تصميم-عيب-يؤدي إلى كبيرة الى الوراء خطوة لرأس JVM

ووتقرير علة ذات الصلة: http://bugs.sun.com/view_bug.do؟bug_id=8009595

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top