Обычно при компиляции Java-файла получаются.class-файлы примерно того же размера, что и исходник. Меня заинтересовало, можно ли по небольшому исходнику сделать.class-файл, который больше, сильно больше исходника.
Можно поискать какие-то короткие конструкции языка, которые компилируются в длинные цепочки байткода, но линейный прирост меня не устраивал. Я сразу подумал про компиляцию finally-блоков: про неё уже писали на Хабре . Если вкратце, то для каждого finally-блока при непустом try-блоке создаётся минимум два варианта в байткоде: для случая нормального завершения try-блока и для случая завершения с исключением. В последнем случае исключение сохраняется в новую локальную переменную, выполняется код finally, затем исключение достаётся из локальной переменной и перебрасывается. А что если внутри finally снова разместить try-finally и так далее? Результат превзошёл все ожидания.
Я компилировал с помощью Oracle javac 1.7.0.60 и 1.8.0.25, результаты практически не отличались. Путь для исключения формируется даже в том случае, если в блоке try совсем ничего предосудительного. Например, присваивание целочисленной константы в локальную переменную - это две инструкции iconst и istore , ни про одну из них в спецификации не сказано, что они могут сгенерировать исключение. Так и будем писать:
class A {{
int a;
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
try {a=0;} finally {
a=0;
}}}}}}}}}}}}
}}
Добавление нового нетривиального кода в самый внутренний finally вызывает ошибку компиляции code too large, поэтому ограничимся таким. Если кто-то подзабыл, это у нас блок инициализации , который подклеивается к каждому конструктору. Для нашей задачи метод объявлять смысла нет.
Такой исходник занимает 336 байт, а получившийся class-файл растаращило до 6 571 429 байт, то есть в 19 557 раз (назовём это коэффициентом растаращивания). Даже при отключении всей отладочной информации с помощью -g:none class-файл весит 6 522 221 байт, что ненамного меньше. Посмотрим, что внутри с помощью утилиты javap .
Код
0: aload_0
1: invokespecial #1 // Method java/lang/Object."
В промежутках между этими goto всевозможные комбинации нормальных и исключительных завершений каждого блока try. Неожиданным оказалось то, что для каждого finally, обрабатывающего исключение, для хранения исключения создаётся новая локальная переменная, даже если блоки заведомо взаимоисключающие. Из-за этого коду требуется 4097 локальных переменных. Небольшая статистика по инструкциям:
Class A{{int a;try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{try{a=0;}finally{a=0;}}}}}}}}}}}}}A(){}A(int a){}A(char a){}A(double a){}A(float a){}A(long a){}A(short a){}A(boolean a){}A(String a){}A(Integer a){}A(Float a){}A(Short a){}A(Long a){}A(Double a){}A(Boolean a){}A(Character a){}}
Здесь у меня 16 конструкторов, исходник занимает 430 байт
. После компиляции имеем 104 450 071 байт
, коэффициент растаращивания составил 242 907
. И это не предел!
Главный писатель по вопросам технологий
Вам кто-то послал по электронной почте файл CLASS, и вы не знаете, как его открыть? Может быть, вы нашли файл CLASS на вашем компьютере и вас заинтересовало, что это за файл? Windows может сказать вам, что вы не можете открыть его, или, в худшем случае, вы можете столкнуться с соответствующим сообщением об ошибке, связанным с файлом CLASS.
До того, как вы сможете открыть файл CLASS, вам необходимо выяснить, к какому виду файла относится расширения файла CLASS.
Tip: Incorrect CLASS file association errors can be a symptom of other underlying issues within your Windows operating system. These invalid entries can also produce associated symptoms such as slow Windows startups, computer freezes, and other PC performance issues. Therefore, it highly recommended that you scan your Windows registry for invalid file associations and other issues related to a fragmented registry.
Файлы CLASS имеют Файлы разработчика, который преимущественно ассоциирован с Unknown Apple II File (found on Golden Orchard Apple II CD Rom).
Файлы CLASS также ассоциированы с Java Class File (Sun Microsystems Inc.), Java Bytecode (Sun Microsystems Inc.), Gambas Gambas Class Source File (Gambas Team) и FileViewPro.
Иные типы файлов также могут использовать расширение файла CLASS. Если вам известны любые другие форматы файлов, использующие расширение файла CLASS, пожалуйста, свяжитесь с нами , чтобы мы смогли соответствующим образом обновить нашу информацию.
Самый быстрый и легкий способ открыть свой файл CLASS - это два раза щелкнуть по нему мышью. В данном случае система Windows сама выберет необходимую программу для открытия вашего файла CLASS.
В случае, если ваш файл CLASS не открывается, весьма вероятно, что на вашем ПК не установлена необходимая прикладная программа для просмотра или редактирования файлов с расширениями CLASS.
Если ваш ПК открывает файл CLASS, но в неверной программе, вам потребуется изменить настройки ассоциации файлов в вашем реестре Windows. Другими словами, Windows ассоциирует расширения файлов CLASS с неверной программой.
Установить необязательные продукты - FileViewPro (Solvusoft) | | | |
Вы не уверены, какой тип у файла CLASS? Хотите получить точную информацию о файле, его создателе и как его можно открыть?
Теперь можно мгновенно получить всю необходимую информацию о файле CLASS!
Революционный CLASS Инструмент анализа файлов™ сканирует, анализирует и сообщает подробную информацию о файле CLASS. Наш алгоритм (ожидается выдача патента) быстро проанализирует файл и через несколько секунд предоставит подробную информацию в наглядном и легко читаемом формате.†
Уже через несколько секунд вы точно узнаете тип вашего файла CLASS, приложение, сопоставленное с файлом, имя создавшего файл пользователя, статус защиты файла и другую полезную информацию.
Чтобы начать бесплатный анализ файла, просто перетащите ваш файл CLASS внутрь пунктирной линии ниже или нажмите «Просмотреть мой компьютер» и выберите файл. Отчет об анализе файла CLASS будет показан внизу, прямо в окне браузера.
Просмотреть мой компьютер »
Пожалуйста, также проверьте мой файл на вирусы
All such files that comprise of the .CLASS extension is mainly associated with file formats that have been written using the Java programming language. All of these files are then compiled using the bytecode class program. Once different Java source code files are compiled, these files are created.
The different source code files from Java are then compiled together to generate the .CLASS files that are then loaded into the Java Virtual Machine. The machine then executes the program that the codes have been written for. It is imperative to take into account that because the Java Virtual Machine has several different versions, not all the .CLASS extension files are compatible with every single version.
Файл CLASS является одним из файлов категории Файлы разработчика. Его полное название это Java Class File. Формат файла CLASS создан Oracle. Если вы попали к нам, наверное Вы ищете программы, которые помогут Вам работать с этим конкретным расширением. На следующих страницах вы найдете списки программ, поддерживающих файл CLASS сортированные по операционных системах. Если наша база данных содержит информацию о конвертировании файла CLASS, Вы обязательно найдете его здесь.
Теги: расширение CLASS, как открыть файл CLASS, как конвертировать файл CLASS, открытие файла CLASS
Мы надеемся, что помогли Вам решить проблему с файлом CLASS. Если Вы не знаете, где можно скачать приложение из нашего списка, нажмите на ссылку (это название программы) - Вы найдете более подробную информацию относительно места, откуда загрузить безопасную установочную версию необходимого приложения.
Посещение этой страницы должно помочь Вам ответить конкретно на эти, или похожие вопросы:
Что еще может вызвать проблемы?
Поводов того, что Вы не можете открыть файл CLASS может быть больше (не только отсутствие соответствующего приложения).
Во-первых
- файл CLASS может быть неправильно связан (несовместим) с установленным приложением для его обслуживания. В таком случае Вам необходимо самостоятельно изменить эту связь. С этой целью нажмите правую кнопку мышки на файле CLASS, который Вы хотите редактировать, нажмите опцию "Открыть с помощью"
а затем выберите из списка программу, которую Вы установили. После такого действия, проблемы с открытием файла CLASS должны полностью исчезнуть.
Во вторых
- файл, который Вы хотите открыть может быть просто поврежден. В таком случае лучше всего будет найти новую его версию, или скачать его повторно с того же источника (возможно по какому-то поводу в предыдущей сессии скачивание файла CLASS не закончилось и он не может быть правильно открыт).
Если у Вас есть дополнительная информация о расширение файла CLASS мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся
Компилированный файл.JAVA, созданный компилятором Java. Содержит байтовый код являющийся бинарным программным кодом, выполняемым при запуске Java Virtual Machine (JVM). Обычно встраивается в файлы.JAR, которые входят в состав среды $CLASSPATH, подходящей для исполнения.
Файлы CLASS можно компилировать из файлов JAVA при помощи команды javac, входящей в состав пакета инсталляции JVM. Многие интегрированные среды разработки Java, такие как Eclipse, могут компилировать файлы CLASS на ходу, пока разработчики пишут программный код.
Поскольку существует множество версий JVM (например, 1.4, 1.5 и 1.6), некоторые файлы CLASS могут быть несовместимы с определенными версиями JVM. Java Runtime Environment (JRE) может выполнять файлы CLASS, но не может компилировать их, поскольку не включает в себя бинарный javac.
Примечание: компания Oracle приобрела Sun Microsystems - изначального разработчика Java. JRE и JVM часто используются как синонимы для ссылок на платформу, запускающую приложения Java.
Расширение файла.class представляет собой файл класса Java. Данный файл может быть открыт с помощью следующих программ: Oracle Java Runtime Environment, Eclipse IDE for Java Developers с подключаемым модулем JD-Eclipse, dirtyJOE, JD-GUI.
File with a .CLASS extension contains a compiled Java source code in binary form, it is executable within the Java virtual machine environment - JVM. CLASS files are created as a result of using the javac compiler on a file with a . extension. The may originate from different versions of Java environment (JRE), therefore, they may not be compatible with a specific version of JVM, but still they can be run. JRE and JVM are sometimes used interchangeably, as description of environment in which Java files are executed. Currently, the Oracle Corporation develops the environment, which was acquired by Sun Microsystems.
Some programming environments which support Java enable verification of the source code and compiling it on the fly, while writing programs. It helps to prevent errors within a project and enables its faster building and running. CLASS files are usually packed into JAR files, which enable gathering files from a project or a library in one place, defined with the $CLASSPATH environment variable.
Если появилась ситуация, в которой Вы не можете открыть файл CLASS на своем компьютере - причин может быть несколько. Первой и одновременно самой важной (встречается чаще всего) является отсутствие соответствующей аппликации обслуживающей CLASS среди установленных на Вашем компьютере.
Самым простым способом решения этой проблемы является нахождение и скачивание соответствующей аппликации. Первая часть задания, уже выполнена, - программы для обслуживания файла CLASS Вы найдете ниже. Теперь достаточно скачать и установить соответствующую аппликацию.
В дальнейшей части этой страницы Вы найдете другие возможные причины, вызывающие проблемы с файлами CLASS.
Отсутствие возможности открытия и работы с файлом CLASS, совсем не должен значить, что мы не имеем установленного на своем компьютере соответствующего программного обеспечения. Могут выступать другие проблемы, которые также блокируют нам возможность работы с файлом Java Bytecode Class Format. Ниже находится список возможных проблем.
Если Вы уверены, что все перечисленные поводы отсутствуют в Вашем случае (или были уже исключены), файл CLASS должен сотрудничать с Вашими программами без каких либо проблем. Если проблема с файлом CLASS все-таки не решена, это может значить, что в этом случае появилась другая, редкая проблема с файлом CLASS. В таком случае остается только помощь специалиста.
Unix Static Object Code Library Format | |
.a2w | Alice Program World Format |
.actx | DS Game Maker Action Description Format |
.ada | ADA Language Source Code Format |
.addin | Microsoft Visual Studio Addin Format |
Notatnik позволит нам увидеть часть данных, закодированных в файле. Этот метод позволяет просмотреть содержимое многих файлов, однако не в такой форме, как программа, предназначенная для их обслуживания. |